2014-12-18 123 views
-1

我想獲得一個工作的OpenGL渲染器,但我卡在一個奇怪的地方。我正在生成一個看起來正確的模型,視圖和投影矩陣。 GLIntercept給了我以下日誌:OpenGL奇怪的渲染

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

你的矩陣看起來不正確。你有一個全零的行。看起來像你將'w'轉換爲0.0,這會搞砸一切。 – derhass 2014-12-19 00:03:19

+0

@derhass查看編輯,我修正了(是嗎?)MVP矩陣計算,但結果仍然*完全相同......另外,我特別感興趣的是爲什麼GLSL和應用內計算似乎不同。 – 2014-12-19 00:41:37

回答

1

的主要問題是在你的頂點着色器:

gl_Position = mvp * vec4(vertex, 0.0); 

在擴展規則的三維座標,齊次座標,您需要將w組件設置爲1.0。因此,聲明應該是這樣的:

gl_Position = mvp * vec4(vertex, 1.0); 

這也是有點奇怪,你有4個頂點,但將3作爲頂點(最後一個參數)的繪圖調用的數量:

glDrawArrays(GL_POLYGON, 0, 3); 
+0

'w'組件解決了它,謝謝! – 2014-12-19 15:36:30