关于IN.screenPos.z的平台差异

2019-11-07  本文已影响0人  mp123
DX平台下使用screenPos.z的效果
OpenGL平台下使用screenPos.z的效果

原因:当我们把顶点从裁剪空间投影到屏幕空间中,需要进行透视除法(Perspective Division),就是用其次坐标系的w分量去除以x、y、z分量,得到的坐标叫做归一化的设备坐标(Normalized Device Coordinates),现在所有的坐标都位于一个立方体内,在OpenGL中,x、y、z的范围为[-1,1],但是在DirectX中,x、y的范围值[-1,1],z的范围却是[0,1]。

顶点的空间变换过程

解决办法:

 float screenZ;
                #if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3)) && defined(SHADER_API_MOBILE)
                    screenZ = Linear01Depth((i.screenPos.z + 1.0f) * 0.5f);                             
                #else
                    screenZ = Linear01Depth(i.screenPos.z);             
                #endif
上一篇 下一篇

猜你喜欢

热点阅读