【问题标题】:FPS camera in c++ maybe using glm:lookatc++ 中的 FPS 相机可能使用 glm:lookat
【发布时间】: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 相机。
  • 非常好,看起来像我错过的教程。完成后会给出一些反馈。谢谢!

标签: c++ opengl glm-math


【解决方案1】:

似乎是我的一个矩阵颠倒了,导致了这个问题。 上面提到的教程对查找很有帮助。因此,如果有人偶然发现这样的问题,这可能是一个简单的数学问题,而 glm::lookAt 确实可以满足我的所有需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多