使用 glm 时翻转 Z 坐标
Z coordinates are flipped when using glm
我正在尝试使用 OpenGL 渲染 3D 模型。对于投影和变换矩阵,我使用的是 glm。我已经在屏幕上显示了我的模型,它就像我想要的那样工作;除了一个小问题。
我将模型的平移矩阵设置为
glm::translate(glm::vec3(0, 0, 4)
将模型向前移动一点,以便我能看到它。由于在 OpenGL 中,默认情况下,负 z 朝向 'camera' 并且正 z 向前,我希望这可以工作但它没有。它只有在我将它设置为
时才有效
glm::translate(glm::vec3(0, 0, -4)
但这对我来说似乎很奇怪,因为我将 zNear
设置为 0.01 并将 zFar
设置为 1000。glm 的 z 值是否翻转了或者我在这里做错了什么?
这是我的代码:
glm::mat4 rotation = glm::mat4(1.0f);
glm::mat4 translation = glm::translate(glm::vec3(0, 0, -4));
glm::mat4 scale = glm::mat4(1.0f);
glm::mat4 modelMatrix = translation * rotation * scale;
glm::mat4 projectionMatrix = glm::perspective(70.0f, aspectRatio, 0.01f, 1000.0f);
glm::mat4 transformationMatrix = projectionMatrix * modelMatrix;
当你用 near = 0.01 和 far = 1000.0 平面调用 perspective() 时,它的实际含义是你将它切割为 -0.01 到 -1000.0 所以你应该把对象的 z 值放在范围 [- 0.01,-1000.0]。
想象一下右手坐标并假设您眼睛的 z 值默认为 0.0。
我正在尝试使用 OpenGL 渲染 3D 模型。对于投影和变换矩阵,我使用的是 glm。我已经在屏幕上显示了我的模型,它就像我想要的那样工作;除了一个小问题。
我将模型的平移矩阵设置为
glm::translate(glm::vec3(0, 0, 4)
将模型向前移动一点,以便我能看到它。由于在 OpenGL 中,默认情况下,负 z 朝向 'camera' 并且正 z 向前,我希望这可以工作但它没有。它只有在我将它设置为
时才有效glm::translate(glm::vec3(0, 0, -4)
但这对我来说似乎很奇怪,因为我将 zNear
设置为 0.01 并将 zFar
设置为 1000。glm 的 z 值是否翻转了或者我在这里做错了什么?
这是我的代码:
glm::mat4 rotation = glm::mat4(1.0f);
glm::mat4 translation = glm::translate(glm::vec3(0, 0, -4));
glm::mat4 scale = glm::mat4(1.0f);
glm::mat4 modelMatrix = translation * rotation * scale;
glm::mat4 projectionMatrix = glm::perspective(70.0f, aspectRatio, 0.01f, 1000.0f);
glm::mat4 transformationMatrix = projectionMatrix * modelMatrix;
当你用 near = 0.01 和 far = 1000.0 平面调用 perspective() 时,它的实际含义是你将它切割为 -0.01 到 -1000.0 所以你应该把对象的 z 值放在范围 [- 0.01,-1000.0]。
想象一下右手坐标并假设您眼睛的 z 值默认为 0.0。