Como faço para obter um pincel de textura colorida para aparecer no Open GL ES sobre fundo branco?

StackOverflow https://stackoverflow.com/questions/1419202

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu quero desenhar com um pincel de textura, em uma cor de minha escolha, sobre um fundo branco usando OpenGLES.

Eu tenho uma imagem bitmap que eu uso CG para carga e se transformar em uma textura. Este bitmap é em sua maioria negros, mas tem um círculo branco no centro que eu quero usar como o "pincel". Em outras palavras, eu quero a parte preta para desaparecer na composição final, mas a parte branca para assumir a cor que eu definir usando glColor.

O melhor que posso chegar é com os parâmetros de mistura (GL_SRC_ALPHA, GL_ONE) Depois de definir alguma cor brilhante opaco é uma linha de cor desbotada em um (fundo branco puro) cinza. Mas quando eu definir o plano de fundo para branco puro, a linha não é visível.

Pelo menos na situação atual, as bordas pretas da textura original não aparecem. A maioria das outras combinações de mistura Eu estou tentando causa quer nada para mostrar-se mesmo em cinza, ou para ver o pincel inteiro, incluindo as bordas pretas, que não é bom.

Há alguém disposto a explicar-me como devo montar o meu textura e / ou GL estados para fazer o show cor brilhante completamente em branco puro, sem mostrar as bordas textura preta em tudo? Esta pode ser uma pergunta novato, mas eu tentei trabalhar com a matemática mistura, e eu ainda só não entendo como as cores estão a ser tidos em conjunto.

Aqui está a imagem que estou usando como o pincel:

alt texto http://www.coldcoffeeandjuice.com/OpaqueBrush.png

Aqui está um pouco de saída resultante, quando o fundo é cinza, e o glColor4f está definido para (1, 0, 0, 1), por exemplo, vermelho puro, eo pincel é usado em um monte de GL_POINTs consecutivos. Note-se que o que é bom sobre isso é que apenas a parte branca da escova imagem mostra o red-- cor que é certo. As partes ruins é que o vermelho que eu quero ser é pura e brilhante pálida devido a ser misturado com o fundo (?) E / ou o branco da escova (?) Para que ele lava para fora por completo, se o fundo é branco puro . Isto usa a mistura params como dadas acima (src_alpha, um).

text alt
(fonte: coldcoffeeandjuice.com )

Aqui está o que eu quero ver, dada a cor vermelha pura (graças Paintbrush):

text alt
(fonte: coldcoffeeandjuice.com )

Alguém pode me ajudar a entender o que estou fazendo de errado?

Obrigado!

Foi útil?

Solução

Ok, então você está tentando "pintar" uma determinada cor (neste caso, "vermelho") para um fundo, usando uma máscara para a forma de pincel.

Você precisa fazer o seguinte antes de começar tornando a "pintar":

  1. Primeiro verifique se o seu pincel tem um canal alfa que corresponde com sua forma -. Que é o canal alfa deve ser semelhante à imagem escova que você posou

  2. Render com esses estados definidos (espaço da nota de contornar wiki markup):

// Make the current material colour track the current color
glEnable( GL_COLOR_MATERIAL );

// Multiply the texture colour by the material colour.
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

// Alpha blend each "dab" of paint onto background
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

Veja também:
http://www.opengl.org/ documentação / especificações / man_pages / impressa / GL / html / gl / colormaterial.html

http://www.khronos.org/opengles/documentation /opengles1_0/html/glTexEnv.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top