2013-09-11 186 views
1

我在學習OpenGL,並且出現錯誤渲染的問題。這是我遇到的問題,金字塔的邊緣之間存在差距。OpenGL顯示錯誤 - 顯示不正確

enter image description here

下面是我使用來構建頂點。

// Create Pyramid Vertex Buffer 
FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(3 * 12); 
vertexBuffer.put(new float[] 
{ 
    // Side one 
    0f, 0.8f, 0f, 
    -0.8f, -0.8f, 0.8f, 
    0.8f, -0.8f, 0.8f, 

    // Side two 
    0f, 0.8f, 0f, 
    0.8f, -0.8f, 0.8f, 
    0.8f, -0.8f, -0.8f, 

    // Side three 
    0f, 0.8f, 0f, 
    0.8f, -0.8f, -0.8f, 
    -0.8f, -0.8f, -0.8f, 

    // Side four 
    0f, 0.8f, 0f, 
    -0.8f, -0.8f, -0.8f, 
    -0.8f, -0.8f, 0.8f 
}); 
vertexBuffer.rewind(); 

我認爲這是因爲模型出來的屏幕。所以我想在翻譯的z軸應該是不錯,我打電話glDrawArrays

glTranslatef(0f, 0f, -1f); 

這想出了這個奇怪的行爲前加入這一行,有被吸引更多邊。

enter image description here

三方呈現,但只應該查看只有兩個!我怎麼解決這個問題?我也啓用了深度測試。

下面是如何初始化的OpenGL

// Initialize OpenGL 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-1, 1, -1, 1, 1, -1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glViewport(0, 0, Display.getWidth(), Display.getHeight()); 
+0

你能發佈你的視口創建代碼嗎?我無法判斷三角形是否被你的近平截頭體或者遠截錐體或兩者的組合所切斷。我認爲你在第二張照片中看到了金字塔的內部,而在第一張照片的黑斑中看到了世界的後面。然而,這樣做似乎是反直覺的,因爲走得更遠應該導致你在第一張照片中得到的東西,如果你靠近,你應該看到金字塔的內部。另外,你有其他轉換嗎?哪個vert參數映射到哪個顏色? X->紅色,Y->綠色? – zero298

+0

@ zero298我已經包含了初始化opengl的代碼。另外我沒有任何着色器。我已經改變了glOrtho的功能,但我仍然不明白爲什麼。 –

回答

2

glOrtho設置你的觀看區域。由於你的形狀適合1平方的單位,但你希望能夠看到整個事物,你可以讓你的近,遠集合包圍整個形狀(2,-2),或者你可以設置你的形狀glOrtho與glOrtho(-1,1,-1,1,0,-5)類似;並向後翻譯你的形狀,以便它在視野中。

另一個(壞)選項是改變你的vert的絕對位置,使它們落在近場和遠場內,但我不會推薦這個,因爲這是一般翻譯和變換的要點。

你的意思是把所有東西都放在正確的視角,還是你的意思是有視角?正統觀點是爲什麼翻譯最初沒有幫助。

+0

在旁註中,它看起來像深度測試未啓用。應該可以這樣做;請記住將深度緩衝位添加到glClear,即glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);' – datenwolf