2011-10-27 16 views
1

enter image description here可以將對象「看穿」在OpenGL

我不知道爲什麼發生這種情況,我只是呈現一些簡單原始的四邊形。 紅色的意思是在黃色的前面。

黃色總是在紅色的前面,即使它在它後面。

這是一個錯誤還是僅僅是我錯誤地看到魔方?

+0

正如Chen所說 - 默認情況下最後呈現的是先前呈現的頂部。 – Kromster

回答

8

打開深度緩衝區和深度測試,或OpenGL將繪製頂部的後者。

你的應用程序需要至少做到以下獲得深度緩衝的工作:

詢問,當你創建你的窗口深度緩衝。

在上下文創建並通電後,在程序的初始化例程中調用glEnable(GL_DEPTH_TEST)。

確保您的zNear和zFar剪切平面設置正確,並且提供足夠的深度緩衝精度。

通行證GL_DEPTH_BUFFER_BIT作爲參數來glClear,典型地按位或運算與諸如GL_COLOR_BUFFER_BIT其他值。

看到這裏http://www.opengl.org/resources/faq/technical/depthbuffer.htm

+0

謝謝,它工作。我只需要在初始化中使用它:glEnable(GL_DEPTH_TEST); – Derek

+1

@Deza:這不是一個初始化。這是一個正在設置的狀態。跟我說話:OpenGL狀態不是一次初始化的,你總是按照你需要的方式設置每一次繪圖迭代。 – datenwolf

+0

@Deza同意@datenwolf。如果您有空閒時間,請閱讀「OpenGL編程指南」一書。在第1章中,它介紹了「OpenGL作爲狀態機」的概念。 – starrify

0

我有同樣的問題,但它是無關的深度緩存,雖然我沒有看到好轉的一些變化,當我啓用了。它與渲染最後一步中使用的混合函數有關,這些函數結合了像素強度。所以我不得不關閉glBlendFunc()