2012-04-16 50 views
1

我有一些幾何圖形,它具有一個三角形的單個圖元集。圖元中的一些三角形重疊,所以當我使用alpha值向幾何圖形添加材質時,我會看到重疊(如預期的那樣)。我想在不改變幾何圖形的情況下襬脫這種效果 - 我嘗試過使用不同的混合模式(glBlendFunc()),但是我無法使它工作。我得到了一些有趣的結果,但沒有任何東西能夠消除三角條基元內的不透明效應,並保留整個對象的不透明度。我使用的是OpenSceneGraph,但它提供了一種方法來爲所討論的幾何體調用glBlendFunc()。OpenGL混合函數消除原始重疊但保持整體不透明度

enter image description here

所以從圖像中,假設粉道路,紫色道路和黃色道路構成三個獨立的對象,每個創建的使用單個三帶(有多個條帶,但爲了討論,假裝有這裏只有三種不同的彩色三色條)。我基本上不想看到相同顏色的自我交集

此外,我的問題幾乎與這一個:OpenGL, primitives with opacity without visible overlap相同,但我應該注意,當我嘗試在接受的答案混合模式爲問題,這些條紋根本不在場景中渲染。

回答

3

我在以前的項目中遇到同樣的問題。下面是我如何解決它:

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA) 

,並繪製矩形。這背後的想法是,你繪製一個 矩形與所需的透明度,這是從 幀緩衝取自,但在進程掩碼你已經繪製的區域,以便您的後續矩形將被屏蔽在那裏。

來源:Stackoverflow : Overlapping rectangles

+0

我提到我在我原來的帖子中試過這個,但結果是這些對象根本沒有渲染。 – Prismatic 2012-04-17 00:48:07

+0

@Pris:你是否實施了所有的步驟?包括將alpha寫入framebuffer * first *? – 2012-04-17 00:58:30

+0

感謝您的回覆。經過大量搜索後,我無法弄清楚如何使用OpenSceneGraph完成此操作。也許我的問題的標題是誤導性的 - 我試圖用OSG來實現這個目標......我以爲這只是一個我應該傳遞給glBlendFunc()的參數的問題。 – Prismatic 2012-04-17 01:40:41

1

一種方式做,這是呈現每個組路徑到紋理,然後繪製紋理上具有α的窗口。您可以爲每種顏色的路徑執行此操作。

This概述了大致的想法。