使用 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。