玩家opengl后面的相机

时间:2012-11-16 13:38:45

标签: c++ opengl camera rotation glm-math

我一直在研究这个问题一段时间,但我找不到解决方案。 现在我的相机正确跟随玩家的位置,但相机的旋转出错了。如果我只使用一次旋转它会正确,例如我只沿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。

1 个答案:

答案 0 :(得分:3)

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

看到您使用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
);

摘自opengl tutorials上的此网站。