DX11中渲染到纹理的数据存储问题

以float格式存储到纹理中时,rgba中的a值,如果存储方式不当,可能会导致数据错乱。

问题是在体绘制实验中出现的。

在渲染到纹理的ps shader中,使用如下代码输出坐标值,其中output.vpos类型为float4。

 PS_INPUT output = (PS_INPUT)0;
 output.vpos.xyz = input.Pos.xyz; 
......
 output.Pos = mul( output.Pos, View );
output.vpos.w =output.Pos.z;//z值可以理解为视线的长度

注意最后一句,这样存储会导致数据丢失,尚不清楚在dx11在存储时经过了什么处理,但是显然在vpos.w存储是不合理的。

将vpos.w设置为1.可得到正确结果,看来vpos的xyz存储并没有问题

猜你喜欢

转载自blog.csdn.net/udumbara007/article/details/88032879