Я пытаюсь визуализировать воду, используя отражение. Я пытаюсь добиться отражения, переворачивая матрицу вида вокруг оси 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 частью. Любые предложения приветствуются.