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