【问题标题】:Z coordinates are flipped when using glm使用 glm 时 Z 坐标翻转
【发布时间】:2015-10-22 14:00:24
【问题描述】:

我正在尝试使用 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;

【问题讨论】:

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


    【解决方案1】:

    当您使用 near = 0.01 和 far = 1000.0 平面调用 perspective() 时,其实际含义是将其切割为 -0.01 到 -1000.0,因此您应该将对象的 z 值放入范围 [-0.01, -1000.0]。

    想象一下右手坐标,并假设您眼睛的 z 值默认为 0.0。

    【讨论】:

    • 是的,事实证明我关于正 z 进入屏幕的假设是错误的。非常感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    相关资源
    最近更新 更多