围绕另一个对象旋转对象

时间:2017-10-31 22:16:25

标签: c++ opengl

所以我的场景图中有一个相机对象,我想围绕另一个物体旋转并仍然看着它。

到目前为止,我试图翻译其位置的代码只是一直向前和向后移动一小部分。

以下是我在游戏更新循环中尝试使用的代码:

//ang is set to 75.0f
camera.position += camera.right * glm::vec3(cos(ang * deltaTime), 1.0f, 1.0f);

我不确定自己哪里出错了。我看过其他代码围绕对象旋转,他们使用cos和正弦,但由于我只是沿x轴平移,我以为我只需要这个。

1 个答案:

答案 0 :(得分:1)

首先,你必须创建一个旋转的矢量。这可以通过glm::rotateZ来完成。注意,由于 glm 版本0.9.6,角度必须以弧度为单位。

float ang            = ....; // angle per second in radians 
float timeSinceStart = ....; // seconds since the start of the animation
float dist           = ....; // distance from the camera to the target

glm::vec3 cameraVec = glm::rotateZ(glm::vec3(dist, 0.0f, 0.0f), ang * timeSinceStart);

此外,您必须知道相机应转动的位置。可能是对象的位置:

glm::vec3 objectPosition = .....; // position of the object where the camera looks to

相机的新位置是物体的位置,由旋转矢量位移:

camera.position = objectPosition + cameraVec;

相机的目标必须是物体位置,因为相机应该看向物体:

camera.front = glm::normalize(objectPosition - camera.position);

摄像机的up矢量应为z轴(旋转轴):

camera.up = glm::vec3(0.0f, 0.0f, 1.0f);