2011-10-05 76 views
3

透明物體蔭試圖渲染使用OpenGL的一些3D對象。要求是我需要隱藏所有透明對象,它們是在另一個透明對象後面的z。所有三角形都在單個三角形緩衝區中,並且會立即繪製。請拋出一些光。呈現在OpenGL

+0

你能對你的對象是如何透明意見和OpenGL的是什麼版本的()你正在處理? – masebase

+0

我正在處理opengl 1.1 ..例如有一個玻璃花瓶裏面有玻璃門的房間。用戶應該只能通過玻璃門看到房間內的不透明物體,如木製傢俱,而不能看到房間內的玻璃花瓶。 – user942502

回答

3

您可以通過排序場景,這是你必須做的反正拿到透明度正常工作是什麼做到這一點。

這裏就是你需要做的:

  1. 啓用Z緩衝區寫入並測試
  2. 渲染所有不透明的物體
  3. 渲染的所有透明物體從前向後。 z緩衝區將防止透明對象顯示在其他透明對象後面。 ()
+0

感謝您的回覆。是的,我可以通過排序透明三角形(從前到後)來實現此目的。但透明物體的所有三角形都是一次繪製的。當我旋轉場景時,效果應該保留。不幸的是,我的任務中不允許排序,因爲我正在處理場景中的三十萬個三角形。你認爲我可以使用一些混合函數的combimation來達到這個目的。 – user942502

+0

我不確定這是可能的,至少在OpenGL 1.1的功能。你可以分成2個緩衝區嗎? – geofftnz

+0

不,我不能分裂,2個緩衝區,因爲我沒有分類,其中三角形形狀的花瓶和三角形形態門在我的三角緩衝。 – user942502

5

嘗試使用glDepthMask:

//Render all opaque objects 
    glDepthMask(false); //disable z-testing 
    //Render all transparent objects* 
    glDepthMask(true); //enable z-testing (for the next frame) 

*技術上講,你應該渲染從後到前的透明物體,但如果你不這樣做很少是明顯的。