Pergunta

Eu preciso imitar Photoshop modos de mesclagem ( "multiplicar", "tela" etc.) em minha 1,1 código OpenGL ES ( sem shaders).

Há alguns docs sobre como fazer isso com HLSL:

Preciso de pelo menos modo de tela de trabalho.

Existem quaisquer implementações no gasoduto fixo posso olhar?

Foi útil?

Solução

blendmodes maioria photoshop são baseadas nas blendmodes Porter-Duff.

Estas exige que todas as suas imagens (texturas, renderbuffer) estão na cor-espaço premultiplied. Isso geralmente é feito multiplicando todos os valores de pixels com o valor alfa antes de armazená-los em uma textura. Por exemplo. um pixel transparente cheia será semelhante negro no espaço de cor não-premultiplied. Se você não estiver familiarizado com esta cor-space passar uma ou duas horas de leitura sobre ele na web. É um puro e bom conceito e necessário para photoshop-like composições.

De qualquer forma - uma vez que você tem suas imagens nesse formato você pode ativar tela usando:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)

O modo Multiply completo não é possível com o OpenGL | ES gasoduto. Se você só trabalhar com pixels opacos completa você pode fingir usando:

glBlendFunc(GL_ZERO, GL_SRC_COLOR)

Os resultados para pixels transparentes, quer na sua textura e seu framebuffer será embora errado.

Outras dicas

você deve tentar este:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)

Isto parece multiplicar-me sobre o iPhone / OpenGL ES

Seu melhor lugar para começar é pegar uma cópia do Red Book e ler os capítulos sobre em materiais e modos de mistura. Ele tem uma explicação muito abrangente e clara de como o 'clássico' OpenGL funções de mistura de trabalho.

Eu descobri que usando este:

glDepthFun( GL_LEQUAL);

Foi tudo necessidade de obter um efeito de tela, pelo menos, funcionou bem no meu projeto.

Eu não tenho certeza por que isso funciona, mas se alguém sabe share por favor.

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