我想在运行时制作灰度滤镜我成功通过此代码
制作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值
答案 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)。它允许您将场景渲染到图像,然后您可以反馈到着色器以执行任何您想要的操作,然后您可以将其渲染为最终输出。