Alphablending不会产生所需的图像

时间:2013-01-22 09:55:07

标签: c++ opengl

我从两个摄像头(每个图像8位灰度)抓取图像,并将这些图像上传到纹理。然后我想要绘制叠加的纹理,从一个图像中获得50%,从另一个图像中获得50%,但我不知道为什么它不会产生我需要的效果。

以下是我对Alpha混合的设置:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);  // Alpha Blending

更新我的纹理:

glTexImage2D(GL_TEXTURE_2D, 0, GL_INTENSITY, g_Image[g_iCounter].GetCols(), g_Image[g_iCounter].GetRows(), 0, GL_RED, GL_UNSIGNED_BYTE, g_Image[g_iCounter].GetData()); 

g_Image是一个FlyCapture2图像(Point Grey SDK),GetCols() / GetRows()返回图像的大小,GetData()原始数据指针。这很好,如果我想并排显示图像,这正是我想要的。

我的绘图代码:

glBindTexture(GL_TEXTURE_2D, texture2);
        glBegin(GL_QUADS);
        // Front Face
        glTexCoord2f(left, bottom);     glVertex3f(-1.0f, -1.0f,  0.5f);
        glTexCoord2f(right, bottom);    glVertex3f( 0.0f, -1.0f,  0.5f);
        glTexCoord2f(right, top);       glVertex3f( 0.0f,  1.0f,  0.5f);
        glTexCoord2f(left, top);        glVertex3f(-1.0f,  1.0f,  0.5f);
        glEnd();

        if(interleaved)
        {
            top = 0.0f;
            bottom = 1.0f;
            left = 0.0f;
            right = 1.0f;

            glColor4f(1.0, 1.0, 1.0, 0.5);
            switch(flags1)
            {
                case 0: break;
                case 1: left = 1.0f; right = 0.0f; break;
                case 2: top = 1.0f; bottom = 0.0f; break;
                case 3: top = 1.0f; bottom = 0.0f; left = 1.0f; right = 0.0f; break;
                default: break;
            }
            glEnable(GL_BLEND);
            glBindTexture(GL_TEXTURE_2D, texture);
            glBegin(GL_QUADS);
            // Front Face
            glTexCoord2f(left, bottom);     glVertex3f(-1.0f, -1.0f,  0.5f);
            glTexCoord2f(right, bottom);    glVertex3f( 0.0f, -1.0f,  0.5f);
            glTexCoord2f(right, top);       glVertex3f( 0.0f,  1.0f,  0.5f);
            glTexCoord2f(left, top);        glVertex3f(-1.0f,  1.0f,  0.5f);
            glEnd();
            glDisable(GL_BLEND);
        }
    }

虽然这总会导致我看到两个图像,但是第一个绘制的图像总是更好看的图像,并且它不是50/50混合。我需要改变什么才能让它达到50/50?

1 个答案:

答案 0 :(得分:0)

不要将它们叠在一起。将第二个稍微移近相机,只需靠一个胡须。大约0.000001的差异应该是这样做的。