以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存储并没有问题