2012-12-09 126 views
0

我在iOS上遇到了使用OpenGL ES 2.0的半透明問題。我的場景很簡單。它由一個立方體網格組成,其中一些應該顯示爲固體,而另一些應該呈現半透明。我開始使用下面的代碼來設置OpenGL。OpenGL ES 2.0中的半透明

glEnable(GL_CULL_FACE); 
glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 

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

由於深度測試和剔除,這會導致某些角度的透明度不正確。見下面

Correct transparency/Culling and depth testing enabled

Incorrect transparency/Culling and depth testing enabled

我試圖禁用冰壺和深度測試和啓用阿爾法測試的兩個圖像。結果是正確的透明度,但沒有紋理(見下圖)。

//glEnable(GL_CULL_FACE); 
//glEnable(GL_DEPTH_TEST); 
//glDepthFunc(GL_LEQUAL); 


glAlphaFunc(GL_GREATER, 0.5); 
glEnable(GL_ALPHA_TEST); 


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

enter image description here

我使用GLKit加載紋理和GLKBaseEffect渲染場景。是否有人提示如何在第一張圖片中獲得與所有透視圖相同的正確透明度?謝謝:)

回答

3

你的主要有兩個選項:

  1. 排序的所有場景中的多邊形,並確保沒有任何多邊形相交的任何其他(因爲那時你不能命令他們)

  2. 改爲使用與排序無關的混合模式,例如添加劑或減法混合。

如果你確實只想立方體的網格,改變呈現,以適合任何角度來看應該不會太棘手,因爲你只需要遍歷立方體以不同的順序,而不是實際排序。

+0

謝謝你的提示。解決方案很簡單,首先繪製堅實的立方體做了訣竅。 – Christoph