2013-02-13 147 views
0

我想知道如何在OpenGL中的對象上打印部分顏色。我的意思是,我希望能夠編輯該顏色的不透明度,並且我不知道該怎麼做。我所知道的唯一的事情是如何設置整個紋理的不透明度:OpenGL中的顏色不透明度

gl.glColor4f(red, green, blue, **opacity**); 

但與該功能,我開始變得透明的質感,我只是想編輯的色彩層次,我給到它。

任何提示?我在Android上使用OpenGL-ES。

+0

你的問題不是很清楚,你有沒有嘗試過使用glColor3f? – 2013-02-13 15:35:24

+0

雖然一個很酷的想法,但我實際上並沒有(我在這裏喋喋不休)認爲OpenGL ES和一個完整的opengl實現提供了這種類型的操作符/操作。 – trumpetlicks 2013-02-13 15:36:34

+0

您必須在片段着色器中執行此操作:檢查顏色是否與所需顏色相同,然後調整Alpha。 – Kimi 2013-02-13 15:44:01

回答

0

我認爲可以這樣做的一種方式,但是在將紋理傳遞給OpenGL之前,需要在CPU中進行一些預渲染才能獲得32位紋理,然後在您創建的例程中,要設置其不透明度的顏色參數,只需運行一個循環來檢查該特定顏色,並將其alpha組件設置爲任何所需的顏色。

// Algorithm Only 
void setOpacityOfColor(char r, char g, char b, char opacToSet, RGBAType image[][]){ 

    for(int x = 0; x < image.width; x++){ 
     for(int y = 0; y < image.height; y++){ 
      if(image[x][y].r == r && image[x][y].g == g && image[x][y].b == b{ 
       image.alpha = opacToSet; 
      } 
     } 
    } 

} 

我認爲這是正確的,如果我真的明白你的問題。

這件事的好處還在於,如果您以後想要將其設置爲不透明,它會保留原始顏色。如果你真的想徹底改變顏色,你也可以做到這一點,它會看起來更像以下:

// Algorithm Only 
void setOpacityOfColor(char r, char g, char b, char newR, char newG, char newB, RGBAType image[][]){ 

    for(int x = 0; x < image.width; x++){ 
     for(int y = 0; y < image.height; y++){ 
      if(image[x][y].r == r && image[x][y].g == g && image[x][y].b == b{ 
       image.r = newR; 
       image.g = newG; 
       image.b = newB; 
      } 
     } 
    } 

}