Pregunta

Necesito imitar los modos de fusión de Photoshop (" multiplicar " ;, " pantalla " etc.) en mi código OpenGL ES 1.1 ( sin sombreadores).

Hay algunos documentos sobre cómo hacer esto con HLSL:

Necesito al menos trabajar en el modo de pantalla.

¿Hay alguna implementación en la tubería fija que pueda mirar?

¿Fue útil?

Solución

La mayoría de los modos de mezcla de Photoshop se basan en los modos de mezcla de Porter-Duff.

Esto requiere que todas sus imágenes (texturas, renderbuffer) estén en un espacio de color premultiplicado. Esto generalmente se hace multiplicando todos los valores de píxel con el valor alfa antes de almacenarlos en una textura. P.ej. un píxel transparente completo se verá como negro en un espacio de color no premultiplicado. Si no está familiarizado con este espacio de color, pase una o dos horas leyendo sobre él en la web. Es un concepto ordenado y bueno, y se requiere para composiciones tipo photoshop.

De todos modos, una vez que tenga sus imágenes en ese formato, puede habilitar SCREEN usando:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)

El modo MULTIPLY completo no es posible con la canalización OpenGL | ES. Si solo trabaja con píxeles opacos completos, puede simularlo usando:

glBlendFunc(GL_ZERO, GL_SRC_COLOR)

Sin embargo, los resultados para píxeles transparentes en su textura y en su framebuffer serán incorrectos.

Otros consejos

deberías probar esto:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)

Esto parece multiplicarme en el iPhone / OpenGL ES

Su mejor lugar para comenzar es recoger una copia del Libro Rojo y lea los capítulos sobre materiales y modos de fusión. Tiene una explicación muy completa y clara de cómo funcionan las funciones de combinación OpenGL 'clásicas'.

He encontrado que usando esto:

glDepthFun (GL_LEQUAL);

era todo lo que necesitaba para obtener un efecto de pantalla, al menos funcionó bien en mi proyecto.

No estoy seguro de por qué esto funciona, pero si alguien lo sabe, compártelo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top