首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opengl-es 1.1灰度FBO

Opengl-es 1.1灰度FBO
EN

Stack Overflow用户
提问于 2012-08-02 22:21:02
回答 1查看 681关注 0票数 0

我有FBO,我只是加载它到一个纹理和一个正交(2D)网格。我怎样才能灰度缩小我的FBO纹理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 22:46:28

苹果使用以下OpenGL ES 1.1代码在其GLImageProcessing sample中将图像转换为灰度

代码语言:javascript
复制
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中为数不多的几个效果之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11779440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档