2012-11-18 107 views
1

從下面的圖片可以看到,我有兩個並排的三角形(從正面看)。但是當我從右側看時,黃色三角形顯示出它好像位於綠色三角形前面,因爲它位於綠色三角形的後面(見右圖),爲什麼會發生這種情況?從左邊看它很好(見左視圖)。謝謝。Opengl奇怪的觀看

的FrontView:

Front View

右視圖(爲什麼是黃色三角形仍清晰可見?):

enter image description here

左視圖(從這裏看是好的):

enter image description here

這是我的渲染方法。即使我不使用glColor4f並以現代的方式進行着色,我仍然有同樣的結果。我也設置了glEnable(GL_DEPTH);和 glDepthFunc(GL_LESS);

void display(){ 
glClear(GL_COLOR_BUFFER_BIT); 

control(0.2, 0.2, mi); 
view = updateCam(); 

glEnableVertexAttribArray(0); 
glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); 
glEnableClientState(GL_VERTEX_ARRAY); 

model = glm::rotate(glm::mat4(1.0), 45, glm::vec3(0, 1, 0)); 
glColor4f(0, 1, 0, 1); 
glDrawArrays(GL_TRIANGLES, 0, 3); 
resetMatrix(); 

model = glm::translate(glm::mat4(1.0), glm::vec3(5, 0, 0)); 
model = glm::rotate(model, 45, glm::vec3(0, 1, 0)); 
glColor4f(1, 1, 0, 1); 
glDrawArrays(GL_TRIANGLES, 0, 3); 

glDisableVertexAttribArray(0); 
resetMatrix(); 
SDL_GL_SwapBuffers(); 

}

回答

1

你只是清除顏色緩衝區。深度緩衝區仍包含前一幀的深度值,因此您的Z測試無法按預期工作。

清除他們兩個:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
+0

爲了解釋,這增加了一個「z索引」,其計算該元件是在前面/後面 – tobspr

+0

噢..我忘了。謝謝。 – tambalolo