opengl skybox shader xyww

opengl

天空盒vertex shader 中常用的一个技巧是:gl_Position = (u_MVP * vec4(a_position, 1.0)).xyww。刚开始觉得xyww挺合理,后来一想,觉得有问题,如果所有点的depth=1,如果先draw正对相机的面,再draw背对相机的面,岂不是把前面draw的覆盖了。。。但事实上大家都在用,肯定没错,为此纠结了好久。

后来在一篇文章中发现了问题,在opengl渲染管线中:
1.顺序:先裁剪,后透视除法
2.裁剪公式:裁剪公式
从裁剪公式中可以看出,所有w<0的点都会被裁剪掉,而相机背面的所有点的w都是小于0的,所以不会存在相机背面的面把相机前边的面覆盖掉的问题,所以用xyww是合理的

你可能感兴趣的:(openGL)