改变opengles中一个点的rgb值

时间:2012-08-23 14:12:39

标签: iphone ios opengl-es

我想在运行时制作灰度滤镜我成功通过此代码

制作
NSString *const kGPUImageLuminanceFragmentShaderString = SHADER_STRING
(
  precision highp float;

   varying vec2 textureCoordinate;

    uniform sampler2D inputImageTexture;

    const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);
   void main()
  {     
   float luminance = dot(texture2D(inputImageTexture, textureCoordinate).rgb, W);
    gl_FragColor = vec4(vec3(luminance), 1.0);
  }
 );

我现在想要的是访问每个点的rgb值并在其上应用我的算法然后根据我的算法更改点rgb值

我的问题换句话说

我想访问一个点的rgb值并设置相同点的rgb值

2 个答案:

答案 0 :(得分:1)

vec3 pixel =  texture2D(inputImageTexture, textureCoordinate).rgb;
 float red = pixel.r;
 float green = pixel.g;
 float blue = pixel.b;


    .
    . manipulate the values as needed
    .

    gl_FragColor = vec4(red, green, blue, 1.0); 

或者这是为了保持原始像素的alpha值:

vec4 pixel =  texture2D(inputImageTexture, textureCoordinate).rgba;
.
.
.

    gl_FragColor = vec4(red, green, blue, pixel.a); 

答案 1 :(得分:0)

如果你的意思是像素,那么我认为你要找的是一个帧缓冲对象(FBO)。它允许您将场景渲染到图像,然后您可以反馈到着色器以执行任何您想要的操作,然后您可以将其渲染为最终输出。