我知道OpenGL在用户空间中以右手模式运行(事实上,它不关心我们在哪个系统中工作),只有在每个用户阶段完成后才转为左手模式。learnopengl说(强调我的)
请注意,在标准化设备坐标中,OpenGL实际上使用左手系统(投影矩阵切换手性)。
然而,我看不出这句话怎么可能是真的。举个简单的例子:假设ModelViewProjection = Identity,则投影矩阵不执行任何操作,因此最终顶点仍为右手顶点。
如果我们进行测试,我们可以看到,在z = -0.5处渲染的对象将被在z = -0.1处的另一个对象隐藏,这应该意味着剪辑空间仍然是右手的,对吗?
1条答案
按热度按时间8yparm6h1#
归一化的设备空间和裁剪空间是左手的,裁剪规则是 -w ≤ x,y,z〈= w。模型和视图坐标系通常为右手坐标系只是常见的对流。但“OpenGL”既不是左手坐标系,也不是右手坐标系(除了传统的OpenGL矩阵函数产生右手矩阵)。甚至OpenGL也不会改变系统。使用
glm::ortho
或glm::perspective
生成的常用正射或透视投影矩阵(或glOrtho
,glFrustum
)会反转z轴。也就是说,它将右手系统转变为左手系统,并将左手系统转变为右手系统。使用投影矩阵的单位矩阵不会反转z轴,也不会改变系统。然而,一个对象是否被另一个对象遮挡取决于Depth Test和深度函数。