使用glm时,Z坐标被翻转

时间:2015-07-31 01:46:31

标签: c++ opengl 3d transformation glm-math

我正在尝试使用OpenGL渲染3D模型。对于投影和变换矩阵,我使用的是glm。我在屏幕上有我的模型,它就像我想要的那样工作;除了一个小问题。

我将模型的翻译矩阵设置为

glm::translate(glm::vec3(0, 0, 4)

向前移动模型,以便我可以看到它。因为在OpenGL中,默认情况下,负z朝向'相机',正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;

1 个答案:

答案 0 :(得分:2)

当你使用near = 0.01和far = 1000.0平面调用perspective()时,它的实际含义是你将它切割为-0.01到-1000.0所以你应该把对象的z值放到范围内[-0.01,-1000.0]。

想象一下右手坐标并假设你的眼睛的z值默认为0.0。 enter image description here