在 OpenGL 中,您的视点始终位于 [0,0,0]。假设此时您有一个顶点作为立方体或其他对象的一部分。该顶点是在相机/视点的前面还是后面?在投影之后,当 z==0 时,我总是以 w=1 结束,这也(如预期的那样)发生在 z==-1 的顶点上。所以实际上 z=0 和 z=-1 的顶点在投影后的距离相等。
在此处查看vec(2,2,0)和vec(2,2,-1)如何以相同的屏幕坐标结束:https ://jsfiddle.net/sf4dspng/1/
结果:
vec1: x=2.0000, y=2.0000, z= 0.0000, w=1
proj1: x=0.9474, y=2.0000, z=-0.2002, w=1
norm1: x=0.9474, y=2.0000, z=-0.2002, w=1
view1: x=1.0000, y=0.0000, z= 0.3999, w=1
vec2: x=2.0000, y=2.0000, z=-1.0000, w=1
proj2: x=0.9474, y=2.0000, z= 0.8018, w=1
norm2: x=0.9474, y=2.0000, z= 0.8018, w=1
view2: x=1.0000, y=0.0000, z= 0.9009, w=1
这是为什么?