所以我的场景图中有一个相机对象,我想围绕另一个物体旋转并仍然看着它。
到目前为止,我试图翻译其位置的代码只是一直向前和向后移动一小部分。
以下是我在游戏更新循环中尝试使用的代码:
//ang is set to 75.0f
camera.position += camera.right * glm::vec3(cos(ang * deltaTime), 1.0f, 1.0f);
我不确定自己哪里出错了。我看过其他代码围绕对象旋转,他们使用cos和正弦,但由于我只是沿x轴平移,我以为我只需要这个。
答案 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);