2014-03-01 122 views
0

我有疤痕紋理,我想通過使用alpha混合擺脫背景的膚色。但是,我改變特定紋理的單個像素的不透明度存在問題。具有透明背景紋理的最簡單方法是什麼?我正在使用C++和OpenGL。使用alpha混合透明背景紋理opengl

我正在使用BMP圖片格式,我試圖將疤痕紋理映射到臉上,但疤痕紋理的背景顏色似乎在臉上很難看,所以我想除去該部分並只將疤痕紋理映射到面對。我也需要使用alpha混合來做到這一點。我知道我需要使用混合函數:

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

我如何改變每個紋理的透明度?

+2

如果您需要幫助,您將必須更具體。如果你無法用單詞來描述你的問題,你總是可以包含你的結果圖和預期結果的描述。但就目前而言,這主要是猜測工作。 –

回答

0

這聽起來像你想從精靈中移除背景。如果是這種情況,那麼使用一個名爲gimp的程序,然後模糊地選擇背景並刪除然後導出並關閉它,但是當它在導出時要求保存時說不。谷歌gimp和背景編輯,你會看到所需的信息和工具。

glBlendFunc (GL_ONE, GL_ONE); 

您可能想要使用混合函數中紋理映射產生的alpha值。如果是這樣,(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)始終是一個很好的功能。但是,如果要在基元被紋理映射時發生混合(即,希望紋理映射的某些部分允許基元的基礎顏色顯示),則不要使用OpenGL混合。相反,您可以使用glTexEnv(),並將紋理環境模式設置爲GL_BLEND。在這種情況下,您希望將紋理環境顏色保留爲默認值(0,0,0,0)。

將顏色設置爲(1,1,1,1)並使用默認的GL_MODULATE會更容易。你也只允許在glBegin()和glEnd之間使用某些命令,所以只能使用glTexCoord glColor glVertex和其他類似的命令。因此,使用一個glBegin()/ glEnd()組合作爲背景,然後更改設置,然後使用另一個glBegin()/ glEnd()繪製精靈。

+0

嘿謝謝你的回答。這是我想要的,但我使用BMP圖片格式,並且此格式不允許透明背景,所以照片編輯工具在我的情況下不起作用。無論如何,在openGL中使用alpha混合來實現這一點? – user3369407