2013-03-14 25 views
4

我已經成功在OpenGL中繪製了兩個光滑形狀,使用生成三角形條的例程,其最外邊緣線的所有頂點都在alpha 0處。現在我想要將它們相交,但我似乎總是失去一個形狀的平滑邊緣。下面是我使用的代碼:如何在OpenGL中交叉兩個平滑的形狀?

// Draw: smooth black shape as normal 

glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); 
// Draw: smooth black shape into alpha channel 

glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 
glBlendFunc(GL_DST_ALPHA, GL_SRC_ALPHA); 
// Draw: Yellow overlay shape with black shape's alpha 

// Reset blending modes for rest of program 

Combined Shapes http://img268.imageshack.us/img268/1000/combineshapes.jpg

而這裏的結果(在底部) - 黃色形狀失去了流暢的右手邊,因爲在那些像素的阿爾法現在是1.如何我可以獲得平滑的相交形狀嗎?

回答

0

我在這個問題上苦苦掙扎了很長時間,並且嘗試了每個繪圖順序和glColorMaskglBlendEquation的組合。最後我意識到有一個非常簡單的解決方案 - 預乘alpha。

在我的'光滑形狀'繪製例程中,我只是將外部平滑邊緣繪製爲相同顏色,我允許指定外部平滑顏色。對於黃色形狀,我指定了黑色,並且在整個形狀的邊緣光滑的同時,給了我一個光滑的邊緣 - 儘管黃色形狀的右側邊緣沒有被alpha通道掩蓋。

0

你需要這樣的片段:

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

我認爲,一個關鍵因素是glEnable(GL_BLEND)。

+0

感謝'glBlendEquation'提示。不幸的是,我仍然無法使用GL_FUNC_ADD,GL_FUNC_SUBTRACT或GL_FUNC_REVERSE_SUBTRACT。 – 2013-03-15 07:20:27