0
我有FBO,我只是將它加載到紋理和正交(2D)網格。 我如何灰度下我的FBO紋理?Opengl-es 1.1灰度FBO
我有FBO,我只是將它加載到紋理和正交(2D)網格。 我如何灰度下我的FBO紋理?Opengl-es 1.1灰度FBO
蘋果使用下面的OpenGL ES 1.1代碼轉換的圖像中的灰度其GLImageProcessing sample:
static void greyscale(V2fT2f *quad, float t) // t = 1 for standard perceptual weighting
{
GLfloat lerp[4] = { 1.0, 1.0, 1.0, 0.5 };
GLfloat avrg[4] = { .667, .667, .667, 0.5 }; // average
GLfloat prcp[4] = { .646, .794, .557, 0.5 }; // perceptual NTSC
GLfloat dot3[4] = { prcp[0]*t+avrg[0]*(1-t), prcp[1]*t+avrg[1]*(1-t), prcp[2]*t+avrg[2]*(1-t), 0.5 };
// One pass using two units:
// Unit 0 scales and biases into [0.5..1.0]
// Unit 1 dot products with perceptual weights
glVertexPointer (2, GL_FLOAT, sizeof(V2fT2f), &quad[0].x);
glTexCoordPointer(2, GL_FLOAT, sizeof(V2fT2f), &quad[0].s);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glTexEnvfv(GL_TEXTURE_ENV,GL_TEXTURE_ENV_COLOR, lerp);
// Note: we prefer to dot product with primary color, because
// the constant color is stored in limited precision on MBX
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
glColor4f(dot3[0], dot3[1], dot3[2], dot3[3]);
validateTexEnv();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// Restore state
glDisable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
}
我已經完全現在放棄了1.1,特別是用於圖像處理,但灰度轉換的一個很少有效果可以在1.1中使用。