Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glFog导致透明png失去透明度_C++_Opengl - Fatal编程技术网

C++ glFog导致透明png失去透明度

C++ glFog导致透明png失去透明度,c++,opengl,C++,Opengl,如果没有glFog,“我的透明png”显示得很好,但使用它,您可以看到矩形背景和其他颜色的条带(请注意,其他污垢材质按预期工作,但不使用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);

如果没有glFog,“我的透明png”显示得很好,但使用它,您可以看到矩形背景和其他颜色的条带(请注意,其他污垢材质按预期工作,但不使用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);

我对这件事完全迷茫了。有什么想法吗?

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

一些问题:您以什么顺序绘制东西?你用阿尔法测试吗?png透明部分的颜色是什么样的?如果对雾颜色使用alpha=0,会发生什么情况?