Как добавить рулон в класс камеры - PullRequest
1 голос
/ 21 июня 2020

Я создаю класс камеры и воспользовался помощью онлайн-руководств по созданию этого класса.

Теперь я хочу добавить ролик в камеру и не могу найти никаких материалов для чтения, которые объясняли бы, как добавить Roll in camera.

Camera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 500.0f), glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f), float yaw = YAW, float pitch = PITCH) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), Zoom(ZOOM)
    {
        Position = position;
        WorldUp = up;
        Yaw = yaw;
        Pitch = pitch;
        updateCameraVectors();
    }

glm::mat4 GetViewMatrix()
    {
        return glm::lookAt(Position, Position + Front , Up);
    }

void updateCameraVectors()
    {
        
        glm::vec3 front;
        front.x = cos(glm::radians(Yaw - 90)) * cos(glm::radians(Pitch));
        front.y = sin(glm::radians(Pitch));
        front.z = sin(glm::radians(Yaw - 90)) * cos(glm::radians(Pitch)) ;
        Front = glm::normalize(front);
        Right = glm::normalize(glm::cross(Front, WorldUp));
        Up = glm::normalize(glm::cross(Right, Front));
    }

Я был бы благодарен, если бы кто-нибудь объяснил, как добавить ROll в этот класс, или направил меня к некоторым материалам для чтения.

1 Ответ

1 голос
/ 21 июня 2020

Чтобы свернуть вид, вы должны повернуть вектор вверх (Up) вокруг линии обзора (Front).

Определите матрицу вращения вокруг Front by Roll:

glm::mat4 roll_mat = glm::rotate(glm::mat4(1.0f), glm::radians(Roll), Front);

Преобразовать вектор Up по матрице:

Up = glm::mat3(roll_mat) * Up;
...