2016-05-14 19 views
0

我試圖讓我的GUI可以在遊戲中更改顏色,而無需加載新紋理。這是我現在如何實施的。在片段着色器中更改OpenGL中紋理的顏色並不起作用

我得到的片段着色器使用Sampler2D,然後用一些統一的變量的幫助紋理的顏色,

uniform int maxSwapColors; 
uniform bool colorSwap; 
uniform vec3 textureColors[3]; 
uniform vec3 toBeColors[3]; 

我檢查,看看是否片段的顏色應該改變,即它是等於textureColors中的顏色。其中,textureColor是從Sampler2D收集的實際預加載紋理的顏色。

for(int i = 0; i < maxSwapColors; i++) { 
     if(textureColor.xyz == textureColors[i]) { 
      textureColor.xyz = toBeColors[i]; 
     } 
    } 

這個工程除了一個問題。

enter image description here

顏色幾乎完全切換,除了4個頻帶的顏色,其中它融合出於某種原因。實際紋理由兩種顏色全紅和全綠組成。在這些樂隊中,您可以看到預加載紋理的顏色。

enter image description here

我認爲混合在一些點,因爲OpenGL技術存在的,但我不知道在哪裏,或者爲什麼。即使我發生這種情況,我也嘗試使用glsl的greaterThan()和lessThan()方法爲textureColors創建一個範圍。這使得樂隊更小,但不會完全刪除它們,所以我正在尋找更全面的解決方案。

謝謝你,任何幫助表示讚賞!

回答

1

混合發生是因爲您的紋理使用線性過濾。改爲使用最近的過濾。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
+0

謝謝!我應該在渲染之前放置這個嗎? –

+0

在生成並綁定紋理後,您可以在開始時只放置一次。 – MarGenDo

相關問題