Вы не указываете, хотите ли вы сделать это в OpenGL ES 1.1 или 2.0, поэтому я предполагаю, что вы имеете в виду более новую версию 2.0.Если 1.1 действительно является вашей целью, вам нужно поиграть с режимами наложения, как Apple в их примере GLImageProcessing .
Для OpenGL ES 2.0 вы можете использовать фрагментные шейдеры для достижения каждого изэти эффекты.Для версии изображения в градациях серого вы можете извлечь только яркость, используя следующий фрагментный шейдер:
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);
}
Для тона сепии вы можете использовать шейдер манипуляции с цветовой матрицей, который я демонстрирую в этого ответа:
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform lowp mat4 colorMatrix;
uniform lowp float intensity;
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
lowp vec4 outputColor = textureColor * colorMatrix;
gl_FragColor = (intensity * outputColor) + ((1.0 - intensity) * textureColor);
}
с матрицей
self.colorMatrix = (GPUMatrix4x4){
{0.3588, 0.7044, 0.1368, 0},
{0.2990, 0.5870, 0.1140, 0},
{0.2392, 0.4696, 0.0912 ,0},
{0,0,0,0},
};
Понятия не имею, что вы подразумеваете под «эффектом RGB».Возможно, вы имеете в виду манипулирование с цветовой матрицей, и в этом случае вышеприведенное будет работать и для вас.
Все это встроенные фильтры в моей открытой структуре GPUImage (см.GPUImageBrightnessFilter, GPUImageContrastFilter, GPUImageSaturationFilter, GPUImageSepiaFilter и GPUImageColorMatrixFilter).Если вы действительно новичок в OpenGL ES, вам понадобится совсем немного кода, чтобы настроить сцену, использовать UIImage в качестве текстуры, запустить вершинный и фрагментный шейдер, извлечь это изображение и сохранить его.вернуться как UIImage.GPUImage сделает все это за вас с помощью нескольких строк кода Objective-C.