原因:当我们把顶点从裁剪空间投影到屏幕空间中,需要进行透视除法(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