Opengl es GPUImage将颜色替换为纹理中的颜色

Opengl es GPUImage将颜色替换为纹理中的颜色,opengl-es,gpuimage,cgcontextref,glteximage2d,Opengl Es,Gpuimage,Cgcontextref,Glteximage2d,看看GPUImagePosterizeFilter,用纹理中的像素替换颜色似乎是一种简单的调整。假设我有一张由10种灰度组成的图像。我想用10个不同纹理样本的像素替换10种颜色的每个像素范围 创建纹理的正确方法是什么?我正在使用下面的代码,我不确定发送到CGBitmapContextCreate的alpha参数 将纹理传递到过滤器的正确方法是什么?我在主要发言中补充说: uniform sampler2D fill0Texture; 在下面的代码中,纹理是从上面的函数传递的内容 glActiv

看看GPUImagePosterizeFilter,用纹理中的像素替换颜色似乎是一种简单的调整。假设我有一张由10种灰度组成的图像。我想用10个不同纹理样本的像素替换10种颜色的每个像素范围

创建纹理的正确方法是什么?我正在使用下面的代码,我不确定发送到CGBitmapContextCreate的alpha参数

将纹理传递到过滤器的正确方法是什么?我在主要发言中补充说:

uniform sampler2D fill0Texture;
在下面的代码中,纹理是从上面的函数传递的内容

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture);
glUniform1i(fill0Uniform, 1);

当我尝试从spriteContext中获取图像时,它为零,当我尝试使用fill0Texture中的像素时,它们总是黑色的。我曾考虑过用10次色度键迭代来实现这一点,但我认为替换修改后的GPUImagePosterizeFilter中的所有像素是一个不错的选择。

为了将颜色与PosterizeFilter的输出进行匹配,我使用了以下代码

float testValue = 1.0 - (float(idx) / float(colorLevels));
vec4 keyColor = vec4(testValue, testValue, testValue, 1.0);

vec4 replacementColor = texture2D( tx0, textureCoord(idx));

float select = step(distance(keyColor,srcColor),.1);
return select * replacementColor;

如果传入的颜色已经过后处理,则返回替换颜色。TextureCordDX调用从gltexture中查找替换颜色

您可能需要将其设置为双输入过滤器,并将图像作为GPUImagePicture作为第二个输入传入。不过,与其这样做,不如考虑使用GPUImageLookupFilter,作为后期处理后的第二步:我用一个版本的PosterizeFilter完成了所有工作。但现在我将研究LookupFilter。
float testValue = 1.0 - (float(idx) / float(colorLevels));
vec4 keyColor = vec4(testValue, testValue, testValue, 1.0);

vec4 replacementColor = texture2D( tx0, textureCoord(idx));

float select = step(distance(keyColor,srcColor),.1);
return select * replacementColor;