题
我需要模仿Photoshop的混合模式("倍增"、"屏幕",等等。) 在我的照片ES1.1代码(没有 着色器).
有一些文档,在如何做到这一点 与 HLSL:
- http://www.nathanm.com/photoshop-blending-math/(档案)
- http://mouaif.wordpress.com/2009/01/05/photoshop-math-with-glsl-shaders/
我至少需要工作的屏幕模式。
是否有任何实现上的固定管道我可以看看?
解决方案
最photoshop的混合模式是根据波特-达芙blendmodes.
这些需要所有你的图像(纹理、renderbuffer)在预乘色的空间。这通常是通过乘以所有像素的价值,与α-值之前把它们储存在一个纹理。E.g。一个完全透明像素看起来像黑色在非预乘色的空间。如果你不熟悉这种颜色-空间花一两个小时的阅读关于它在网。这是一个整洁和良好概念和所需photoshop图像组合。
无论如何-一旦你有你的图像,在这种格式可使用:
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)
全乘模式是不可能的照片|ES管道。如果你只与完全不透明像素可以假的使用:
glBlendFunc(GL_ZERO, GL_SRC_COLOR)
结果透明像素无论是在你的纹和你的帧缓冲区将是错误的。
其他提示
你应该试试这个:
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)
这看起来像是乘我的iPhone/ES照片
你最好开始的地方是要挑起的一个副本 红色的书 和读通过的各章的材料和混合模式。它有一个非常全面和明确的解释如何的经典照片混职能的工作。
我们发现,使用这样的:
glDepthFun( GL_LEQUAL);
是所有需要得到一个屏幕的效果,至少它的工作以及对我的项目。
我不知道为什么这个工作的,但是,如果有人知道请分享。
不隶属于 StackOverflow