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

FPS camera in c++ maybe using glm:lookat

本文关键字:glm lookat 中的 FPS 相机 c++      更新时间:2023-10-16

我有一个相当简单的设置,一个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的约束:不管怎么看,只是当我偶然发现它时,我想"嘿!这正是我想要的",这似乎是一个干净简单的解决方案。也许有人可以阐明这一点,并为我指明正确的方向或教程。

似乎是我的一个矩阵颠倒了,导致了这个问题。上面提到的教程非常有助于找到答案。因此,如果有人偶然发现这样一个问题,它可能是一道简单的数学题,实际上glm::lookAt就满足了我的所有需求。