Я пытаюсь добавить эффект паралакса к существующему движку. Пока двигатель работал с ортогональной проекцией. Объекты размещаются в пиксельных координатах на экране. Проблема в том, что я не могу понять, как повторить ту же проекцию с матричной проекцией и т. Д. что я могу добавить координату Z для глубины.
Я уже пробовал различные комбинации матриц и координат z, и результатом всегда был черный экран.
Матрица, которую я пытаюсь заменить:
glm::mat4 projection = glm::ortho(0.0f, static_cast<GLfloat>(1280.0f), static_cast<GLfloat>(720.0f), 0.0f, 0.0f, -100.0f);
Вершинный шейдер:
// Shader code (I tested this while having identity matrices for view and model
#version 330 core
layout (location = 0) in vec2 vertex;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
void main() {
gl_Position = projection * view * model * vec4(vertex.xy, 1.0f, 1.0f);
}
Код проекции, который, как я думал, может работать:
glm::mat4 model = glm::mat4(1.0f);
model = glm::translate(model, glm::vec3(-640, -310.0f, 0.0f));
model = glm::scale(model, glm::vec3(1.0f / 1280.0f, 1.0f / 720.0f, 1.0f));
glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 0.0f);
glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);
glm::vec3 cameraUp = glm::vec3(0.0f, 1.0f, 0.0f);
glm::mat4 view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
glm::mat4 projection = glm::perspective(glm::radians(45.0f), 1.0f, 0.1f, -100.0f);
Ожидается, что прямоугольник все еще отображается в аналогичной позиции (Я могу исправить детали, если что-то работает) без черного экрана.