游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3820|回复: 8

PixelShader的返回值总是float4?

[复制链接]

7

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2010-7-8 19:10:00 | 显示全部楼层 |阅读模式
1。为何书上和常见的例子里PixelShader的返回值总是float4?

2。创建texture的时候指定的D3DFMT_A8R8G8B8或者D3DFMT_X8R8G8B8是怎么和
PixelShader的返回值对应起来的呢?

3。如果只想让GPU来计算,输入一个float,返回一个float该怎么办呢?

盼望高手解惑阿~~~~~~~~~~

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-7-8 21:54:00 | 显示全部楼层

Re:PixelShader的返回值总是float4?

要看有几个渲染目标!

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2010-7-8 22:00:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

12

主题

31

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2010-7-9 19:00:00 | 显示全部楼层

Re:PixelShader的返回值总是float4?

帮楼主up一下 同样关注的问题

2

主题

79

帖子

85

积分

注册会员

Rank: 2

积分
85
QQ
发表于 2010-7-10 12:29:00 | 显示全部楼层

Re: PixelShader的返回值总是float4?


     PixelShader的输出值是float4,就是四个浮点数值了,它们分别对应R、G、B、A四个通道,也就是红、绿、蓝和透明通道值。
     当你指定的render target是D3DFMT_A8R8G8B8或者D3DFMT_X8R8G8B8格式时,上面的四个float就分别对应每个通道写值进去。

     如果你想只返回一个float点值,RT指定其它的格式就可以了,例如,你指定了16位浮点数的D3DFMT_R16F:

     16-bit float format using 16 bits for the red channel.

或者是32位浮点数的D3DFMT_R32F:

     32-bit float format using 32 bits for the red channel.

     当PixelShader输出的四个float时,只有red通道的值是写到纹理上,其它的三个通道的值是忽略掉了,但是float4这个格式是不能变的,你可以输出flat4( v, 0, 0, 0 )这样的形式,v 就是有效数值了。

     具体的其它格式你可以参考相应的文档,可以据实际情况设定输出多少通道和数值类型。

     另外,如果RT格式是指定是整型,而输出是float类型,PS在输出时自动作了转换的。

7

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2010-7-10 17:12:00 | 显示全部楼层

Re:PixelShader的返回值总是float4?

谢谢你,非常感谢!

假如我们利用GPU来计算的话,计算结果是存储在纹理中的。

那么PixelShader的计算结果怎么样线性的排列在显存空间呢?

比如第一次我输入一个 a,经过计算后生成的A,怎么把结果放在纹理的第一个位置?

第二次输入b,经过计算后生成的B,怎么排列在第二个位置呢?

[em6]

2

主题

79

帖子

85

积分

注册会员

Rank: 2

积分
85
QQ
发表于 2010-7-10 18:08:00 | 显示全部楼层

Re: PixelShader的返回值总是float4?


    输入相应的数值并在指定位置输出结果,有一个方法是用正交投影方式。

    比如,你可以将输入的数值预先写入一个纹理中,在处理流程中,用该纹理作为输入纹理,

然后在PS上就可以得到输入纹理和RT上的每个输出点一一对应了。

7

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2010-7-10 19:26:00 | 显示全部楼层

Re:PixelShader的返回值总是float4?

我的设想是这样的,假如我截获一个游戏的流,我经过pixel shader之后,让他生成一个texture,
然后把这个texture再伪装成为游戏需要的流丢给游戏处理。

这样,我就需要把截获的流每一位都在texture中排列好,对个别位修改之后,再扔给游戏。

这该怎么实现呢?

其实俺是个菜菜菜鸟,高手请明示呀~~~~

7

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2010-7-13 10:08:00 | 显示全部楼层

Re:PixelShader的返回值总是float4?

没人知道么。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 10:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表