1

アプリケーションの 1 つを Managed DirectX から C# の OpenGL に変換しようとしているので、Windows 8 と互換性があります。必要な重要な機能の 1 つは透明性です。練習のために、いくつかの透明な形状を作成しようとしました。NeHe レッスン 2 C# プロジェクト。と を追加しても、glEnable(GL_BLEND)まったくglColor4ub(255, 255, 255, 128)透過性が得られないようです。

このテスト プロジェクトでは、上記のリンク先の C# プロジェクトを単純にコピーし、2 つの関数を変更しました。の場合InitGL()、アルファブレンディングを機能させるために必要な行を追加しました (または、通知を受けました)。

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