【发布时间】:2014-08-31 06:49:39
【问题描述】:
我有一个相当简单的设置,0,0,0 的模型,具有:
projection = glm::perspective(fov, aspectRatio, near, far);
model = glm::mat4(1.0);
我想要一个灵活的相机,也就是我读到的最好的 FPS 相机。
现在我有:
glm::mat4 CameraMatrix = glm::lookAt(
glm::vec3(cameraPosition.X,cameraPosition.Y,cameraPosition.Z), // camera, in world space
glm::vec3(cameraTarget.X,cameraTarget.Y,cameraTarget.Z), // direction vector eye + Dir
glm::vec3(upVector.X,upVector.Y,upVector.Z)
);
非常像这里描述的:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-6-keyboard-and-mouse/
这一切正常,除了一件事,鼠标上下按预期进行,但鼠标左右旋转使模型围绕相机位置旋转,而不是相机围绕模型旋转?我是不是做错了什么?
我的印象是,这至少需要一些额外的旋转和平移才能使其正常工作。如果是这样,我想知道为什么这似乎没有被提及。如果我在谷歌搜索时提到“FPS相机”,也有很多使用lookat的教程。这让我有点困惑。
现在 glm::lookat 周围的例子相当糟糕,我读了一些关于 gluLookAt 的东西,其中我听到一些声音至少 gluLookAt 不能解决这样的任务,glm::lookat 也是如此吗?如果是这样,正确的方法是什么?我真的不受 glm:lookat 的约束,只是当我偶然发现它时,我就像“嘿!正是我正在寻找的东西”,这似乎是一个干净而简单的解决方案。 也许有人可以对此有所了解,并为我指明正确的方向或教程。
【问题讨论】:
-
AFAIK glm::lookat 与 gluLookAt 完全相同,只是使用 glm 类型而不是使用 OpenGL 矩阵堆栈。
-
也许这个教程就是你要找的:learnopengl.com/#!Getting-started/Camera。描述了 lookAt 矩阵背后的逻辑,它准确地创建了您正在寻找的 FPS 相机。
-
非常好,看起来像我错过的教程。完成后会给出一些反馈。谢谢!