谷歌搜索很多,閱讀this very useful article,但仍然想知道我的項目的解決方案。此屏幕快照示出了我的問題完全:XNA/MonoGame:深度排序alpha混合UserPrimitives
有2個對象:紅色物體它由2個四邊形,一個具有-1 z索引,而另一個爲1的z索引。兩個四邊形都有Color.Red * 0.5f
。首先繪製。另一個對象是z-index爲0的玩家。獲取第二個
因爲我想讓玩家在四邊形之間移動,所以我將DepthStencilState
設置爲DepthStencilState.Default;
,但是它提供了以下圖像。玩家的像素被忽略,因爲它前面有一個對象。
我把我所有的原語按照this class分成一個大的DrawUserPrimitive。這個問題的最佳解決方案是什麼?我是否需要根據z-index對三角形進行排序(以及我將如何實現;是否昂貴?)還是有其他解決方案?
謝謝!所以我想我必須對物體進行排序。雖然我認爲使用剔除不會有幫助,因爲我的形狀太基本,並且包含的三角形太少,99%的時間這些三角形只是部分可見。我會去分揀,但我仍然必須找出如何(例如分解紅色對象2),但我會管理。任何提示或文章非常歡迎! – kapser 2013-03-06 15:58:56
即使對於單個半透明模型(因此:與排序或Z緩衝區無關),您需要執行背面剔除以獲得正確的渲染結果。如果你不這樣做,那麼背面可以繪製在正面的頂部(取決於三角形順序和相機方向)。當然,這隻會畫出模型的正面,所以如果你希望正面和背面都可見(這會使它看起來更像一個空心物體而不是堅實的物體),那麼你必須以兩遍(正面撲殺,然後背面撲殺)。 – 2013-03-06 18:02:58
(需要說明的是 - 背面剔除要求適用於3D凸形 - 就像一個立方體或一個球體,而不是四邊形(有點難以分辨您在屏幕截圖中渲染的內容),基本上它是一種廉價的方式以每個模型爲基礎對三角形進行排序,而不實際對它們進行排序。) – 2013-03-06 18:06:50