我正在尝试实现一个跟随移动物体的相机。我已经实现了这些功能:
void Camera::espheric_yaw(float degrees, glm::vec3 center_point)
{
float lim_yaw = glm::radians(89.0f);
float radians = glm::radians(degrees);
absoluteYaw += radians;
... clamp absoluteYaw
float radius = 10.0f;
float camX = cos(absoluteYaw) * cos(absoluteRoll) * radius;
float camY = sin(absoluteRoll)* radius;
float camZ = sin(absoluteYaw) * cos(absoluteRoll) * radius;
eyes.x = camX;
eyes.y = camY;
eyes.z = camZ;
lookAt = center_point;
view = glm::normalize(lookAt - eyes);
up = glm::vec3(0, 1, 0);
right = glm::normalize(glm::cross(view, up));
}
我想将此功能(和音高版本)用于跟随移动 3d 模型的相机。现在,它在 center_point 为 (0,1,0) 时有效。我认为我的位置正确,但向上向量显然并不总是(0,1,0)。
我怎样才能让我的相机起立、查看和正确的矢量?然后,如果我以这种方式更新相机的眼睛位置,当另一个对象(以 center_position 参数为中心)移动时,我的相机将如何移动?
这个想法是每次我用 centered_value = 移动对象的中心输入鼠标时更新它。然后将 gluLookAt 与我的相机的视图、眼睛和向上值一起使用(以及将是眼睛+视图的 lookAt)。