C++ 摄像机跟踪播放器opengl

C++ 摄像机跟踪播放器opengl,c++,opengl,camera,rotation,glm-math,C++,Opengl,Camera,Rotation,Glm Math,我已经研究这个问题有一段时间了,但我找不到解决办法。 现在我的相机正确地跟随球员的位置,但是相机的旋转出现了错误。如果我只使用了一次旋转,它就正确了,比如说我只沿着x轴旋转,那么它就可以正常工作。但第二次我加上另一个旋转,说“y”的东西出了问题,相机开始朝着错误的方向看 现在我的相机只有一个位置和一个旋转 下面是一些代码 glm::vec4 cameraPosition; //This gives the camera the distance it keaps from the player

我已经研究这个问题有一段时间了,但我找不到解决办法。 现在我的相机正确地跟随球员的位置,但是相机的旋转出现了错误。如果我只使用了一次旋转,它就正确了,比如说我只沿着x轴旋转,那么它就可以正常工作。但第二次我加上另一个旋转,说“y”的东西出了问题,相机开始朝着错误的方向看

现在我的相机只有一个位置和一个旋转

下面是一些代码

glm::vec4 cameraPosition;

//This gives the camera the distance it keaps from the player.
cameraPosition.x = 0.0;
cameraPosition.y = 0.0;
cameraPosition.z = 20.0;
cameraPosition.w = 0.0;

// mStartingModel is the rotation matrix of the player.
glm::vec4 result = mStartingModel * cameraPosition;

//here I set the camera's position and rotation. The z rotation is given a extra 180 degrees so the camera is behind the player.
CameraHandler::getSingleton().getDefaultCamera()->setPosition(Vector3f(-player->mPosition.x + result.x, -player->mPosition.y + result.y, -player->mPosition.z + result.z), Vector3f(-(player->mRotation.x + 180), -player->mRotation.y, -player->mRotation.z) );

也知道我使用OpenGL、C++和GLM。< /P> < P>如果你想要一个简单的行为,使用<代码> GuloOkaT//C>可能是最简单的选择!更多信息

参见使用<代码> GLM<代码>,考虑一些类似

glm::mat4 CameraMatrix = glm::LookAt(
    cameraPosition, // the position of your camera, in world space
    cameraTarget,   // where you want to look at, in world space
    upVector        // probably glm::vec3(0,1,0), but (0,-1,0) would make you looking upside-down, which can be great too
);

如本网站所示。

如果您想要一个简单的行为,使用
gluLookAt
可能是最简单的选择!更多信息

参见使用<代码> GLM<代码>,考虑一些类似

glm::mat4 CameraMatrix = glm::LookAt(
    cameraPosition, // the position of your camera, in world space
    cameraTarget,   // where you want to look at, in world space
    upVector        // probably glm::vec3(0,1,0), but (0,-1,0) would make you looking upside-down, which can be great too
);

从本网站上拍摄。

嘿,谢谢你的回答,但由于某种原因,我的相机无法使用,我想我的相机和这台相机不兼容。我想我可以把我的相机从代码中删掉,然后用这个,但是如果有一个更简单的方法,我可以把我的相机放大,那就太好了。也许你应该定义一下“你的相机”是什么?我不熟悉这个引擎,但我以前写过相机系统,所以我现在可能可以很好地帮助你。它是一个简单的类,只保存相机的位置和旋转,并且有一些设置功能。现在就是这样。老实说,这部分是一个朋友给我的,我现在怀疑我是否应该把它拿走。如果它所做的只是保持位置和旋转,你也许可以摆脱它:)是的,我想是的。DX现在可能不得不重写很多东西。谢谢。嘿,谢谢你的回答,但是由于某种原因,我的相机和我的相机不兼容。我想我可以把我的相机从代码中删掉,然后用这个,但是如果有一个更简单的方法,我可以把我的相机放大,那就太好了。也许你应该定义一下“你的相机”是什么?我不熟悉这个引擎,但我以前写过相机系统,所以我现在可能可以很好地帮助你。它是一个简单的类,只保存相机的位置和旋转,并且有一些设置功能。现在就是这样。老实说,这部分是一个朋友给我的,我现在怀疑我是否应该把它拿走。如果它所做的只是保持位置和旋转,你也许可以摆脱它:)是的,我想是的。DX现在可能不得不重写很多东西。谢谢