1

我正在尝试将我们的一个应用程序从托管 DirectX 转换为 C# 中的 OpenGL,因此它将与 Windows 8 兼容。我们需要的一个关键功能是透明度,为了实践,我尝试使用创建一些透明形状NeHe 第 2 课C# 项目。似乎即使我添加glEnable(GL_BLEND)and glColor4ub(255, 255, 255, 128),我也没有任何透明度。

对于这个测试项目,我只是复制了上面链接的 C# 项目,并更改了 2 个函数。对于InitGL(),我添加了必要的行(或者我被告知)以使 alpha 混合工作。

private bool InitGL()
{
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

    // These are the lines I've added
    glEnable(GL_BLEND);                                         // Add alpha blending
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);          // Use this alpha function
    glEnable(GL_CULL_FACE);                                     // Don't render the backface
    return true;                                                // Initialization Went OK
}

对于DrawGLScene(),我为每个顶点绘制带有颜色的三角形和四边形。

public bool DrawGLScene()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(-1.5f,0.0f,-6.0f);
    glBegin(GL_TRIANGLES);
        glColor4ub(255, 0, 0, 128);                     // Transparent red
        glVertex3f( 0.0f, 1.0f, 0.0f);                  // Top
        glColor4ub(0, 255, 0, 128);                     // Transparent green
        glVertex3f(-1.0f,-1.0f, 0.0f);                  // Bottom Left
        glColor4ub(0, 0, 255, 128);                     // Transparent blue
        glVertex3f( 1.0f,-1.0f, 0.0f);                  // Bottom Right

        glColor4ub(0, 0, 255, 128);                     // Transparent red
        glVertex3f(1.0f, 1.0f, 1.0f);                   // Bottom Right
        glColor4ub(0, 255, 0, 128);                     // Transparent green
        glVertex3f(-1.0f, 1.0f, 1.0f);                  // Bottom Left
        glColor4ub(255, 0, 0, 128);                     // Transparent blue
        glVertex3f(0.0f, -1.0f, 1.0f);                  // Top
    glEnd();
    glTranslatef(3.0f,0.0f,0.0f);
    glBegin(GL_QUADS);
        glColor4ub(0, 255, 255, 128);                   // Transparent Cyan
        glVertex3f(1.0f, 1.0f, 0.0f);                   // Top Right
        glColor4ub(255, 255, 0, 128);                   // Transparent Yellow
        glVertex3f(-1.0f, 1.0f, 0.0f);                  // Top Left
        glColor4ub(255, 255, 255, 128);                 // Transparent White
        glVertex3f(-1.0f, -1.0f, 0.0f);                 // Bottom Left
        glColor4ub(255, 0, 255, 128);                   // Transparent Magenta
        glVertex3f( 1.0f,-1.0f, 0.0f);                  // Bottom Right
    glEnd();
    return true;
}

我已经在 Windows 8 和 7 上对此进行了测试,但两者似乎都没有表现出任何透明度。这是为什么?

4

0 回答 0