Я пытаюсь получить рабочий рендеринг OpenGL, но я застрял в странном месте. Я создаю матрицы Model, View и Projection, которые кажутся правильными. GLIntercept дает мне следующий журнал:OpenGL weird rendering
glClear(GL_COLOR_BUFFER_BIT)
glEnableVertexAttribArray(0)
glUniformMatrix4fv(0,1,false,[... see below ...])
glBindBuffer(GL_ARRAY_BUFFER,1)
glVertexAttribPointer(0,3,GL_FLOAT,false,0,0000000000000000)
glDrawArrays(GL_POLYGON,0,3) GLSL=3
glDisableVertexAttribArray(0)
wglSwapBuffers(FFFFFFFF9D011AB3)=true
Мой MVP матрицы следующим образом:
[
0,050000 0,000000 0,000000 0,500000
0,000000 0,050000 0,000000 0,500000
0,000000 0,000000 5,000000 0,000000
0,000000 0,000000 -50,000000 1,000000
]
Вот вершинные шейдеры Я использую:
#version 330
layout (location = 0) in vec3 vertex;
uniform mat4 mvp;
out vec4 color;
void main() {
gl_Position = mvp * vec4(vertex, 0.0);
color = vec4(1, 1, 1, 1);
}
и пиксельный шейдер:
#version 330
in vec4 color;
out vec4 fragColor;
void main() {
fragColor = color;
}
This как рассчитать матрицу проекции, а координаты являются простейшими возможно, сведенное куб:
[
new Vector3f(-1, -1, 0),
new Vector3f(1, -1, 0),
new Vector3f(1, 1, 0),
new Vector3f(-1, 1, 0)
]
Но что оказывает странное дело:
Если я умножить матрицу с те же координаты в приложении, однако, я получаю ожидаемые результаты:
(0,45 0,45 0,00 1,00)
(0,55 0,45 0,00 1,00)
(0,55 0,55 0,00 1,00)
(0,45 0,55 0,00 1,00)
Может кто-то мне точку в направлении, чтобы решить эту проблему?
Вашего матрицы не выглядит правильным. У вас есть строка со всеми нулями. Похоже, что вы tranform 'w' до 0.0, что все испортит. – derhass
@derhass См. Редактирование, я исправил (сделал?) Вычисление матрицы MVP, но результат все еще * точно * тот же ... Кроме того, меня особенно интересует, почему вычисления GLSL и in-app кажутся отличаются. –