2012-03-05 76 views
0

我繪製立方體和在3D的線柵格在OpenGL頂部GL_LINES:的OpenGL吸取的GL_QUADS

glBegin(GL_QUADS); 
... 
glEnd(); 

glBegin(GL_LINES); 
... 
glEnd(); 

現在,獨立的順序(如果我繪製第一第一線路或四邊形)和與位置無關,它總是發生線條畫在立方體上。我認爲OpenGL從前到後都是抽象的。

我想什麼是使用:

glEnable(GL_BLEND); 
glBlendFunc (GL_ONE, GL_ONE); 

它的工作,但立方體的一部分,現在是透明的。 我也嘗試glDepthFunc(GL_NEVER)與禁用glEnable (GL_DEPTH_TEST)但我遇到同樣的問題,多維數據集顯示爲透明。

有沒有人有提示要克服這個問題?

+0

你想要的結果是什麼?我不清楚你打算在另一個面前展示什麼。 您需要在繪製立方體時啓用GL_DEPTH_TEST,否則立方體的背面可能會在立方體的可見部分上繪製。 – Tim 2012-03-05 08:59:00

+0

我希望立方體總是在線前畫出。所以線條是一種背景。 – user1235271 2012-03-05 09:11:08

回答

1

如果你想先畫背景的線條,只是吸引他們(和背景的其餘部分),清除深度緩存,然後渲染場景的其餘部分。

或者你可以給線的深度,使得他們永遠是一切落後,但你必須確保你沒有遊戲世界裏的對象去後面。

+0

非常感謝,它的工作原理! – user1235271 2012-03-05 09:37:28

1

現在,與順序無關(如果我先繪製線或首先繪製四邊形)並且與位置無關,則總是會發生這些線繪製在立方體上。

IF你的線條有適當的深度,那麼你忘記了啓用深度緩衝區。如果您啓用了深度緩衝區,那麼您必須確保您的庫用於初始化OpenGL請求的深度緩衝區。

我想OpenGL的繪製前後。

它沒有。 OpenGL按照您指定的順序繪製多邊形。沒有任何類型的自動分類。

有沒有人有一個提示來克服這個問題?

好了,你可以明確深度緩存,但是這將是緩慢和低效。從技術上講,你應該幾乎從不這樣做。

glDepthMask(GL_FALSE)將禁止寫入深度緩衝。即在該調用之後繪製的任何對象都不會更新深度緩衝區,但會使用已存儲的數據。它經常用於粒子系統。所以打電話glDepthMask(GL_FALSE),畫「線」,叫glDepthMask(GL_TRUE),然後畫立方體。

如果您將glDepthMask(GL_FALSE)glDepthFunc(GL_ALWAYS)合併,則始終繪製對象,完全忽略深度緩衝區(但深度緩衝區不會更改)。