【发布时间】:2018-12-20 04:13:15
【问题描述】:
大家好,
我将相机眼睛设置在正 z 轴 (0, 0, 10) 上,向上指向正 y (0, 1, 0),中心指向正 x (2, 0, 0)。如果 y 向上,并且相机正向下注视负 z 轴,则 x 指向屏幕坐标左侧,右手 OpenGL 世界坐标。
我还有一个以世界原点为中心的对象。由于相机看起来更向左(正 x 方向),我希望我的以原点为中心的对象在生成的屏幕投影中向右移动。但我看到的情况恰恰相反。
我缺乏基本的理解吗?如果是这样,是什么?如果没有,任何人都可以解释如何正确使用 glm 生成视图和投影矩阵,在默认的 OpenGL 右手世界模型中,它们被发送到着色器?
glm::vec3 _eye(0, 0, 10), _center(2, 0, 0), _up(0, 1, 0);
viewMatrix = glm::lookAt(_eye, _center, _up);
projectionMatrix = glm::perspective(glm::radians(45), 6./8., 0.1, 200.);
我觉得有趣的另一件事是图像中的红线指向正 x 方向。它实际上是场景中另一个摄像机的 [eye -> (forward + eye)] 向量,我从 viewMatrix 的倒数中提取。让我大吃一惊的是,当我使用该相机的 VP 矩阵时,它指向的方向与从viewMatrix 的逆向中提取的相同正向方向相反。我也非常感谢对这种差异的任何见解。
另外值得注意的是:我通过 cmake 构建了 glm 0.9.9。我验证了它使用了右手的 [-1, 1] 变体的lookat和perspective。
【问题讨论】:
标签: c++ opengl perspective glm-math