|
发表于 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在输出时自动作了转换的。
|
|