Photoshop混合模式到没有着色器的OpenGL ES

Ale*_*ysh 16 photoshop opengl-es

我需要在我的OpenGL ES 1.1代码中模仿Photoshop混合模式("乘法","屏幕"等)(没有着色器).

有一些关于如何使用 HLSL 执行此操作的文档:

我至少需要工作屏幕模式.

我可能会看到固定管道上的任何实现吗?

Nil*_*nck 15

大多数photoshop混合模式都基于Porter-Duff混合模式.

这些要求所有图像(纹理,渲染缓冲区)都在预乘颜色空间中.这通常通过在将所有像素值存储在纹理中之前将其与alpha值相乘来完成.例如,完全透明的像素在非预乘色彩空间中看起来像黑色.如果你不熟悉这个色彩空间花一两个小时在网上阅读它.这是一个整洁和良好的概念,需要类似Photoshop的作品.

无论如何 - 一旦你以这种格式获得图像,你可以使用以下方式启用屏幕:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)
Run Code Online (Sandbox Code Playgroud)

OpenGL | ES管道无法实现完整的MULTIPLY模式.如果您只使用完全不透明像素,则可以使用以下方法伪造它:

glBlendFunc(GL_ZERO, GL_SRC_COLOR)
Run Code Online (Sandbox Code Playgroud)

然而,纹理和帧缓冲区中透明像素的结果将是错误的.


Vla*_*ego 10

你应该试试这个:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)
Run Code Online (Sandbox Code Playgroud)

这看起来像是在iPhone/OpenGL ES上与我相乘