我正在从这个scratchpixel学习openGL,这里是透视项目矩阵章节的引用:
相机指向世界坐标系负z轴,以便当一个点从世界空间转换到相机空间(然后从相机空间转换到屏幕空间)时,如果该点位于世界坐标系的左侧在y轴上,它也会映射到摄像机坐标系y轴的左侧。换句话说,当世界坐标系x轴也指向右边时,我们需要摄像机坐标系的x轴指向右边;并且唯一可以获得该配置的方法是让相机向下看负z轴。
我认为它与镜像图像有关?但是这个解释让我很困惑...为什么默认情况下相机的坐标与世界坐标不一致(就像我们在openGL中创建的每个其他3D对象一样)?我的意思是,我们需要使用变换矩阵来转换相机坐标(无论我们想要什么,负z设置,我们都可以模拟它)...为什么要这么麻烦?
答案 0 :(得分:5)
选择z方向是完全随意的。
但你的选择有很大的影响。
坚持GL-z方式的一个原因是面部的剔除将匹配GL常量名称,如GL_FRONT。我建议只使用教程。
仅在一个轴上翻转符号也会翻转“奇偶校验”。所以正面变成了背面。 znear深度测试变为zfar。因此,选择一个并坚持下去是明智的。
答案 1 :(得分:2)
默认情况下,是的,它是“右手”系统(例如在物理中使用)。你的拇指是X轴,食指Y轴,当你做那些向右方向,Z点(中指)给你。为什么选择Z轴指向屏幕内/外?因为然后X轴和Y轴进入屏幕,就像2D图形一样。
但实际上,OpenGL没有首选的坐标系。您可以随意调整它。例如,如果您正在制作迷宫游戏,您可能希望Y在屏幕外部/内部(以及Z向上),以便您可以在XY平面上很好地移动。您可以修改视图/透视矩阵,然后就可以了。
答案 2 :(得分:0)
你在谈论这个“相机”是什么?在OpenGL中没有“相机”这样的东西。你所拥有的只是一个两阶段的转型链:
要知道为什么默认OpenGL是“向下看”-z,我们必须看看如果两个转换步骤都“无”,即完全身份转换会发生什么。
在这种情况下,传递给OpenGL的所有顶点位置都保持不变。 X映射到窗口宽度,Y映射到窗口高度。默认情况下,您可以选择OpenGL中的所有计算(您可以更改),遵循右手坐标系的规则,因此如果+ X指向右边,+ Y指向上,那么Z +必须指向“屏幕外”为右手规则要一致。
这就是它的全部内容。没有相机。只是线性变换和使用右手坐标的选择。