2011-09-01 56 views
4

我有一些四邊形紋理具有透明度和這些四邊形背後的一些對象。但是,這些似乎並沒有顯示出來。我知道這是關於GL_BLEND的東西,但我無法設法讓背後的對象顯示。OpenglES - 透明紋理阻止背後的對象

我已經試過:

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND);

但仍然無法正常工作。我基本上已經是:

// I paint the object 
draw_ac3d_file([actualObject getCurrentObject3d]); 

// I paint the quad 
paintQuadWithAlphaTexture(); 

回答

4

有跡象表明,創建這種情況下兩種常見情況,這是很難說哪一個你的程序在做,如果有一個在所有。

繪製順序

首先,確保你畫你的對象以正確的順序。您必須從抽取,否則模型將無法正確混合。

http://www.opengl.org/wiki/Transparency_Sorting

作爲阿恩Bergene Fossaa指出,從前到後是使那些不從性能的立場來看透明物體的正確方法。因此,大多數渲染器首先繪製所有沒有透明度的模型,然後返回並渲染具有透明度的所有模型。這在大多數3D圖形文本中都有介紹。

回至前

enter image description here

前到後

enter image description here

圖像信用傑夫·利奇在墨爾本皇家理工大學

照明

第二個最常見的問題是不正確使用照明。通常,如果您是使用固定功能管線這種情況下,人們會建議你只需撥打glDisable(GL_LIGHTING);

現在這個應該工作(如果是事業可言),但如果你想要什麼樣的照明?然後,您將不得不使用自定義着色器或爲模型設置適當的材質設置。

使用材料性能的討論可以在http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=285889

+0

嚴正找到,所以是的,我可能繪製前至後...謝謝。 –

+0

是的,就是這樣。我排序我的對象,它的工作:) –

+0

很高興它的工作!我記得這個問題讓我過去和完全沮喪 – ssell