cocos2d,将图像分割成单独的R G B通道?

时间:2013-04-05 16:11:56

标签: cocos2d-iphone opengl-es-2.0

我想创建一个效果,在我的角色被杀之后,角色精灵的红色,蓝色,绿色通道分成不同的方向。

类似于此的> http://active.tutsplus.com/tutorials/effects/create-a-retro-crt-distortion-effect-using-rgb-shifting/

我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

在片段着色器中查找单个颜色时,您可以添加不同的偏移量。为了提高效率,您可能应首先渲染到中间缓冲区。

以下是如何操作的示例:

vec4 mainOld( vec2 offset ) {

    ... (gl_FragCoord.xy + offset) ...
}

void main( void ) {
    vec4 foo;
    foo.r = mainOld(vec2(-3.0, 0.0)).r;
    foo.g = mainOld(vec2(0.0, 5.0)).g;
    foo.b = mainOld(vec2(0.0, 0.0)).b;
    foo.a = mainOld(vec2(0.0, 0.0)).a;
    gl_FragColor = foo;
}

基本上,原始着色器现在被调用三次,因此效率有点低,这就是为什么我建议使用缓冲区,但这可能是过早优化。

您可以在此处查看实际着色器中上述代码的结果: http://glsl.heroku.com/e#7971.0(不确定这些链接有多久,抱歉)