c++ - C++ 中的 FPS 相机可能使用 glm :lookat

标签 c++ opengl glm-math

我有一个相当简单的设置,模型位于 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/

这一切都很好,除了一件事,鼠标上下按预期工作,但是左右旋转鼠标使模型围绕相机位置旋转,而不是相机围绕模型旋转?我是不是做错了什么?

我的印象是,这至少需要一些额外的旋转,也许还需要翻译才能使其正常工作。如果是这样,我想知道为什么这似乎没有被提及。当我用 Google 搜索“FPS 相机”时,也有很多使用 Lookat 的教程。这让我有点困惑。

现在围绕 glm::lookat 的例子相当糟糕,我读了一些关于 gluLookAt 的东西,其中我听到一些声音,至少 gluLookAt 不能解决这样的任务,这同样适用于 glm::lookat 吗?如果是这样,正确的方法是什么?我真的没有以任何方式绑定(bind)到 glm:lookat ,只是当我偶然发现它时,我就像“嘿!正是我正在寻找的”,这似乎是一个干净而简单的解决方案。 也许有人可以阐明这一点,并指出我正确的方向或教程。

最佳答案

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

关于c++ - C++ 中的 FPS 相机可能使用 glm :lookat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25589615/

相关文章:

c++ - 为什么 virtual 关键字会增加派生类的大小?

c++ - 需要帮助理解 "rand() % 67 < 10"

c++ - OpenGL绘制一个矩形填充窗口

c++ - 如何在glm中创建广告牌矩阵

c++ - OpenGL如何用GLM正确计算相机矩阵

c++ - Boost Asio 始终返回 0.0.0.0 IP

C++ gdi::Bitmap 到内存中的 PNG 图像

c++ - 如何检测与 C++、OpenGL 和 freeglut 的冲突?

java - LWJGL 使用 Jframe 和 Canvas 实现时显示崩溃

c++ - Qt 中的 OpenGL 不绘制红色方 block