2011-07-04 76 views
1

我想在一個不透明的籠子裏畫一個透明的物體,但是我似乎試過的東西我無法弄清楚。在不透明的一個裏面繪製透明物體

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

glDisable(GL_BLEND); 

glEnable(GL_DEPTH_TEST); 

glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK); 

glColor4f(1.0, 1.0, 1.0, 1.0); 
drawCage(); 

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

glColor4f(0.0, 0.0, 0.0, 0.5); 
drawObject(); 

glPopAttrib(); 

這使透明物體出現在它的前面,儘管它在裏面。

我在做什麼錯了,也可能是一些做的着色器,我使用

+0

如果這是C代碼,添加適當的標籤。 – karlphillip

+0

一張照片確實不錯。 – Wroclai

+0

「不透明的一個*內部的透明物體」讓我走了* Wha ...?*直到我看到不透明的物體是籠子。 :) –

回答

1

有幾件事。

  1. 檢查您的初始化和您的像素格式深度緩衝深度功能。
  2. 先用標準gouraud着色器嘗試一下。
  3. 三重檢查透明物體的所有頂點是否在籠內。
  4. 每幀使用某種相機旋轉,以便您可以從各個角度看到渲染的場景。 (這樣,你可以檢查,如果你不小心渲染的對象由內而外[經常發生在我身上時,我回去3D是離開一段時間後])

希望幫助

+0

我正在做一些離屏渲染,我沒有在我的原始問題中提及,因爲我沒有給這個FBO附加深度緩衝區這是造成問題。我已經給出了答案,因爲你的調試技巧似乎是一個好主意。 – henryprescott

0

那你沒有與您的透明度問題。如果您已經啓用了深度測試,並且您的對象出現在另一個之前,則您的幾何圖形或繪圖例程中都有問題。可能是一百萬件事情,請嘗試先關閉淘汰賽,看看會發生什麼。

另一方面,您試圖呈現一個具有1.0f alpha的常量顏色的透明對象。這意味着完全不透明。你確定嗎?

+0

對不起,我應該留下的顏色,因爲它正在改變這些方法。幾何圖形肯定沒有問題,禁用背面剔除似乎沒有效果。 – henryprescott

+0

你的着色器是什麼樣的?也許你可以發佈截圖? –