2013-02-13 3 views
0

Я хотел бы знать, как печатать частичный цвет объекта в OpenGL. Я имею в виду, я хочу иметь возможность редактировать уровень непрозрачности этого цвета, и я не знаю, как это сделать. Единственное, что я знаю, как установить непрозрачность всей текстуры:Непрозрачность цвета в OpenGL

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

Но с этой функцией, я превращаюсь прозрачной текстура, и я хотел бы, чтобы изменить уровень цвета Я дающий к нему.

Любые советы? Я использую OpenGL-ES на Android.

+0

Ваш вопрос не очень ясен, вы пробовали использовать glColor3f? –

+0

В то время как классная идея, я на самом деле не нахожу (я spitballing здесь) думаю, что OpenGL ES и полная реализация opengl обеспечивают этот тип оператора/операции. – trumpetlicks

+0

Вам нужно будет сделать это в шейдере фрагмента: проверьте, равен ли цвет нужного цвета, а затем отрегулируйте альфа. – Kimi

ответ

0

Один из способов, я могу подумать об этом, но для передачи текстуры в процессор требуется предварительная рендеринга до того, как передать текстуру в OpenGL будет иметь 32-битные текстуры, а затем в рутине, которую вы создаете, когда вы вводите параметр цвета, который вы хотите установить в Opacity, вы просто запускаете цикл, который проверяет этот конкретный цвет, и устанавливает его альфа-компонент во все, что вы хотите.

// 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; 
      } 
     } 
    } 

} 
Смежные вопросы