2016-01-13 100 views
-1

所以我正在爲我的大學任務做一個簡單的opengl/SDL項目。紋理和背景混合一點

基本上是一個非常簡單的遊戲,角色在屏幕上移動。

我快完成了,但我遇到了一個問題。

所以,當我加載紋理等,他們混合在一起,「發光」通過對方。

下面是一個例子:

enter image description here

左 - 紅色背景顏色glClearColor(1.0F,0.0F,0.0F,0.0F); 中東 - 綠色的背景顏色
右鍵 - 黑色背景

正如你所看到的,背景的影響在它前面的紋理,我真的不喜歡。

黑色背景是好的(使我的紋理有點暗),我可以忍受它,但正如你所看到的,黑色背景下,我們可以看到vader背後的一些紋理。

這是他的肩膀上最引人注目的。而是保持紋理完全不透明並保持原有顏色。

要刪除Alpha通道,我使用

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

,但我覺得這並不是因爲它融合了所有的紋理在一起,很好地做到這一點的最好辦法。

有沒有辦法保持圖像完全不透明,同時保持alpha通道,所以周圍沒有東西?

+2

你是什麼意思「刪除alpha通道」和「同時保持alpha通道」?目前還不清楚你想要做什麼。 – comingstorm

+0

確保你背部的地形有1的阿爾法。 – dari

+0

我的意思是我不希望它是透明的,只是100%不透明,但同時沒有任何圖像的區域(如他的腿之間)應該看到通過這樣我可以看到背景。 – Macko

回答

-1

好的,我修好了。 事實證明,我在着色器中有一段代碼可以混合所有東西。

+1

歡迎與我們分享引起碎片混合的着色器代碼片段。這樣,其他遇到您的問題的人可以避免潛在的常見問題:) – Snps

+0

這是導致問題的代碼片段:http://pastebin.com/UbFPdpYN 我已通過更改行編號3到: color = textureColor; – Macko