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

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容