2014-12-18 3 views
-1

Я пытаюсь получить рабочий рендеринг 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) 
] 

Но что оказывает странное дело: rendering screenshot

Если я умножить матрицу с те же координаты в приложении, однако, я получаю ожидаемые результаты:

(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) 

Может кто-то мне точку в направлении, чтобы решить эту проблему?

+0

Вашего матрицы не выглядит правильным. У вас есть строка со всеми нулями. Похоже, что вы tranform 'w' до 0.0, что все испортит. – derhass

+0

@derhass См. Редактирование, я исправил (сделал?) Вычисление матрицы MVP, но результат все еще * точно * тот же ... Кроме того, меня особенно интересует, почему вычисления GLSL и in-app кажутся отличаются. –

ответ

1

Основная проблема заключается в вашем вершинном шейдере:

gl_Position = mvp * vec4(vertex, 0.0); 

При расширении регулярного 3D координаты однородных координат, вам необходимо установить w составляющей 1,0. Таким образом, заявление должно выглядеть следующим образом:

gl_Position = mvp * vec4(vertex, 1.0); 

Это также немного странно, что у вас есть 4 вершины, но проходит 3 как число вершин (последний аргумент) жеребьевка вызова:

glDrawArrays(GL_POLYGON, 0, 3); 
+0

Эта часть 'w' решила ее, спасибо! –