0

背景に赤い回転キューブを表示し、テクスチャ付きのクワッドを重ねたプログラムを作成しようとしています。

テクスチャは、白の背景に黒で「Hello World」という言葉が書かれた単純な 24 ビット ビットマップです。オーバーレイの後ろに立方体が見えるように、白い背景を透明にしたいと思います。イメージ ローダーは、各ピクセルの値をチェックし、関連するアルファ値を追加して、イメージを 32 ビット ビットマップに変換します。

現時点では、私のプログラムはオーバーレイを黒いテキストで表示しますが、背景は赤で、立方体と同じ色です。以下は、テクスチャの初期設定に使用されるコードです。

if (bitmap->Load("test.bmp")) {
   glGenTextures(1, &texture);
   glBindTexture(GL_TEXTURE_2D, texture);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
   glTexImage2D(GL_TEXTURE_2D, 0, 3, bitmap->GetWidth(), bitmap->GetHeight(),
      0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap->GetPixelData());
}

そして、何かが他の何かに干渉している場合に備えて、これが私の表示機能の全体です。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40, 1, 0.1, 27.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glTranslatef(0.0, 0.0, -1.1);
glRotatef(angle, 1.0, 1.0, 0.0);
glutSolidCube(0.1);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 640, 480, 0.0, -1.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_CULL_FACE);

glClear(GL_DEPTH_BUFFER_BIT);

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, texture);

glBegin(GL_QUADS);
   glTexCoord2d(0.0, 0.0); glVertex2f(0.0, 0.0);
   glTexCoord2d(1.0, 0.0); glVertex2f(320.0, 0.0);
   glTexCoord2d(1.0, 1.0); glVertex2f(320.0, 240.0);
   glTexCoord2d(0.0, 1.0); glVertex2f(0.0, 240.0);
glEnd();

glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);

glFlush();
glutSwapBuffers();
4

1 に答える 1

0

デフォルトのテクスチャ環境はGL_MODULATE、現在の色(立方体からの赤)と入力テクセル値を混合する環境です。

テキストをレンダリングする前に、に切り替えるGL_DECALか、を実行してください。glColor3ub(255,255,255)

于 2012-11-01T17:53:34.483 に答える