2015-09-06 73 views
0

在這個即時編寫的遊戲中,我嘗試渲染透明度的冰。冰下有一塊堅硬的塊(灰色塊)。你可以看到的淺藍色的飛機是你可以透過石頭看到的天空球體。你也可以看到它只在一個方向上不起作用。我的問題是爲什麼這些飛機出現。我沒有在那裏畫任何道路。唯一正在繪製的(冰塊)是面向空中的。和下面的石頭。透明度頂點順序

我檢查,如果臉繪製這樣的:檢查鄰居立方體是透明的,而不是同一個作爲面應繪製本身

最後一次檢查是爲了防止冰塊看到每個立方體其他如空氣,並畫出所有透明的面。

我在網上看了一些關於透明度順序的東西,但我不明白這裏的問題究竟是什麼。

enter image description here

回答

2

如果您使用的透明度,你必須要對繪畫對象的順序照顧。如果你不關心順序,以下可能發生:

  1. 天空遠渲染和緩衝區現在包含了天空的每一個片段
  2. 透明冰被渲染,深度信息是深度信息更新,因爲冰比天空更接近相機
  3. 嘗試繪製岩石:深度信息在某些碎片的冰塊後面。由於渲染者不知道透明度,它「假定」你無法看透冰。所以不需要渲染岩石。

您可以通過排序對象避免在對象基礎上。首先從前向後繪製固體物體。之後,繪製透明的。但是,如果透明對象彼此靠近或堆疊在一起,則需要更復雜的算法(例如,順序無關的透明度)以避免僞像。

+0

對不起再次打擾你,但你可能有一個實現例子,以訂購獨立的透明度算法? – user3088126

+0

好吧,這是一個艱難的話題,我不知道你的OpenGL着色器的經驗水平(我猜你正在使用Java?)。儘管如此,我認爲提供一些東西進一步閱讀可能是有幫助的: http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/#Order_Independent_Transparency(底部有一個提示) http://on-demand.gputechconf.com/gtc/2014/presentations/S4385-order-independent-transparency-opengl.pdf http://www.openglsuperbible.com/2013/08/20/is-order -independent-transparency-really-necessary/ 希望它能幫助你一點 –