Когда я пытаюсь использовать свою орфографическую проекцию, я не получаю требуемый результат.
У меня есть VBO, содержащий следующие 2D вершины и texcoords (каждая вторая строка):
0, 0,
0.0, 0.0,
512, 0,
1.0, 0.0,
512, 512,
1.0, 1.0,
0, 512,
0.0, 1.0
На данный момент я рисую их, используя glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
Кажется, с VBO проблем не возникает (я проверял это в gDEBugger), вместо этого проблема, похоже, заключается в вершинном шейдере.
Это шейдер-нарушитель:
#version 420
uniform mat4 projection;
uniform mat4 modelview;
layout(location = 0) in vec2 vertex;
layout(location = 1) in vec2 texcoord;
out vec2 f_texcoord;
void main() {
const float right = 800.0;
const float bottom = 600.0;
const float left = 0.0;
const float top = 0.0;
const float far = 1.0;
const float near = -1.0;
mat4 testmat = mat4(
vec4(2.0 / (right - left), 0, 0, -(right + left) / (right - left)),
vec4(0, 2.0 / (top - bottom), 0, -(top + bottom) / (top - bottom)),
vec4(0, 0, -2.0 / (far - near), -(far + near) / (far - near)),
vec4(0, 0, 0, 1)
);
gl_Position = testmat * vec4(vertex, 0.0, 1.0);
f_texcoord = texcoord;
}
Я не слишком знаком с матрицами преобразований, поэтому я учусь прямо сейчас, и из того, что я прочитал, приведенная выше матрица верна, если я хочу ортографическую проекцию, которая меня очень смущает, поскольку я не могу ее получить работа.
Вот изображение, иллюстрирующее проблему: (Обратите внимание, что текстура имеет прозрачные части.)
EDIT:
Вот как это выглядит с измененными значениями: