OpenGL + GLM: рендеринг отражения воды - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь визуализировать воду, используя отражение. Я пытаюсь добиться отражения, переворачивая матрицу вида вокруг оси X, но не могу понять, как это сделать с GLM, и мне нужен какой-то совет.

Мой код для вычисления матрицы нормального видавыглядит следующим образом:

// This is called every frame to calculate orientation (front facing vector)
void Camera::UpdateVectors()
{
    glm::vec3 front;
    front.x = cos(glm::radians(m_yaw)) * cos(glm::radians(m_pitch));
    front.y = sin(glm::radians(m_pitch));
    front.z = sin(glm::radians(m_yaw)) * cos(glm::radians(m_pitch));
    m_front = glm::normalize(front);

    m_right = glm::normalize(glm::cross(m_front, WORLD_UP));
    m_up = glm::normalize(glm::cross(m_right, m_front));
}

// And to get the view matrix
glm::mat4 Camera::GetView() const
{
    return glm::lookAt(
        m_position, 
        m_position + m_front, 
        m_up);
}

Это моя попытка сделать матрицу вида отражения:

glm::mat4 Camera::GetInvertedView() const
{
    glm::vec3 front;
    front.x = cos(glm::radians(m_yaw)) * cos(glm::radians(m_pitch));
    front.y = sin(glm::radians(m_pitch));
    front.z = sin(glm::radians(m_yaw)) * cos(glm::radians(m_pitch));
    auto normFront = glm::normalize(front);
    auto invPos = glm::vec3(m_position.x, -m_position.y, m_position.z);

    return glm::rotate(glm::lookAt(
        invPos,
        normFront,
        m_up),
        glm::radians(180.0f),
        glm::vec3(-1.0f, 0.0f, 0.0f));
}

Я смотрел учебники DirectX11 по этому вопросу (не нашел ни одного современного OpenGL,который использовал соответствующие математические математические библиотеки, такие как GLM), но способ сделать математическую математику в OpenGL и DirectX значительно отличается. Хотя концепция остается прежней. В этом уроке высота (вращение оси X) была инвертирована в отрицательную, как и позиция Y (как я это сделал). Но я не могу понять, как сделать вращение оси X частью. Любые предложения приветствуются.

...