アプリケーションの 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 でテストしましたが、どちらも透過性を示していないようです。何故ですか?