【问题标题】:glFog causing transparent png to lose transparencyglFog导致透明png失去透明度
【发布时间】:2010-05-09 07:40:10
【问题描述】:

没有 glFog,我的透明 png 显示正常,但使用它你可以看到矩形背景和其他颜色的条带(注意其他污垢材料按预期工作,但不使用 png 或透明度)。

alt text http://img203.imageshack.us/img203/4466/screenshot20100509at528.pngalt text http://img69.imageshack.us/img69/3131/screenshot20100509at456.png

这是我的雾代码:

GLfloat colour[4]={0.8f,0.8f,1.0f, 1.0f};
glFogi(GL_FOG_MODE, GL_EXP);
glFogfv(GL_FOG_COLOR, colour);
glFogf(GL_FOG_DENSITY, 0.1);
glHint(GL_FOG_HINT, GL_NICEST);
glFogf(GL_FOG_START, 1.0);
glFogf(GL_FOG_END, 5.0);
glEnable(GL_FOG);   
glClearColor(0.8f,0.8f,1.0f,1.0f);

还有我的 png 代码:

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    GLfloat myAmbient[] = {0.7,0.7,0.7,1.0};
    glMaterialfv(GL_FRONT, GL_AMBIENT, myAmbient);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, plantTexture);
    glColor3f(0.5,0.5,0.2);

    glPushMatrix();
        glTranslated(-1,-14,10);
        glScaled(10,10,10);
        glBegin(GL_QUADS);
            glNormal3f(0,0,1);
            glTexCoord2f(0,1); glVertex2i(1,0);
            glNormal3f(0,0,1);
            glTexCoord2f(0,0); glVertex2i(1,1);
            glNormal3f(0,0,1);
            glTexCoord2f(1,0); glVertex2i(0,1);
            glNormal3f(0,0,1);
            glTexCoord2f(1,1); glVertex2i(0,0);
        glEnd();
    glPopMatrix();
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_BLEND);

我完全迷失了这个。有什么想法吗?

【问题讨论】:

  • 一些问题:你画东西的顺序是什么?你使用 alpha-test 吗? png 透明部分的颜色是什么样的?如果你使用 alpha = 0 作为雾色会发生什么?

标签: c++ opengl


【解决方案1】:

由于您的四边形是半透明的,您应该在绘制之前使用 glDepthMask(false) 禁用对深度缓冲区的写入(假设启用了 GL_DEPTH_TEST)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2010-10-16
    • 2012-02-23
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多