Я пытаюсь реализовать камеру, которая следует за движущимся объектом. Я реализовал эти функции:
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 = center движущегося объекта. Затем используйте gluLookAt со значениями view, eyes и up моей камеры (и lookAt, которые будут глазами + view).