0

オブジェクトにテクスチャを表示しようとすると機能しますが、無効になっている場合にのみ機能しGL_BLENDます。ブレンドを有効にすると:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

テクスチャはもう見えません。黒いスクリーン。何が起こっているのか本当にわかりません。JPG とアルファチャンネル付きの PNG の場合も同じです。

編集(詳細):

まあ、コードを貼り付けるのは難しいですが(オブジェクト、オブジェクトはどこにでもあり、巨大です)、次のようになります。

//初期化 - 私は他のすべてをコメントしました

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

//テクスチャの準備

glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);

int Mode = GL_BGR;

int nOfColors = image->format->BytesPerPixel;
if (nOfColors == 4) {
    if (image->format->Rmask == 0x000000ff)
        Mode = GL_RGBA;
    else
        Mode = GL_BGRA;
} else if (nOfColors == 3) {
    if (image->format->Rmask == 0x000000ff)
        Mode = GL_RGB;
    else
        Mode = GL_BGR;
}

// glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

glTexImage2D(GL_TEXTURE_2D, 0, nOfColors, image->w, image->h, 0, Mode, GL_UNSIGNED_BYTE, image->pixels);
glDisable(GL_TEXTURE_2D);

//図

glColor4f(1.0f,1.0f,1.0f,1.0f);
glEnable(GL_TEXTURE_2D);
glBindTexture( GL_TEXTURE_2D, _i );

glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(x, y);
glTexCoord2f(1, 0);
glVertex2f(x + width, y);
glTexCoord2f(1, 1);
glVertex2f(x + width, y + height);
glTexCoord2f(0, 1);
glVertex2f(x, y + height);
glEnd();

glBindTexture( GL_TEXTURE_2D, NULL );
glDisable(GL_TEXTURE_2D);

EDIT2

「黒い画面」は少し混乱するかもしれません-何も表示されないことを意味しました(私の背景は黒ですが、それは問題ではありません)-ブレンディングをオフにすると、画面に素敵なテクスチャが表示されます-背景色だけをブレンディングします

4

3 に答える 3

1

glTexEnvf を呼び出そうとしましたか?

glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

例を次に示します: http://unick-soft.ru/art/files/basicBlend.zip

あなたの場合、このコードを見る必要があります:

//draw texture
glPushMatrix();
glColor4f(1.0, 1.0, 0.0, 1.0);
texture.switchOffTexture();
Sphere.drawObject();  
glTranslatef(0.0, 0.0, 7.0);
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
texture.bindTexture();
glBegin(GL_POLYGON);
  glTexCoord2f(0.0, 0.0);
  glVertex3f(-1.0, -1.0, 0.0);  
  glTexCoord2f(1.0, 0.0);
  glVertex3f(1.0, -1.0, 0.0);
  glTexCoord2f(1.0, 1.0);
  glVertex3f(1.0, 1.0, 0.0);
  glTexCoord2f(0.0, 1.0);
  glVertex3f(-1.0, 1.0, 0.0);
glEnd();
glPopMatrix();

コンパイルに問題がある場合は、include にコメントを付けてください: #include < gl\glaux.h >

1、2、3 を押して混合タイプを選択します。ケース 3 では、この結果が表示されますhttp://unick-soft.ru/art/img/blend/text_blend.png

于 2013-01-10T22:24:23.943 に答える
0

アルファ チャネルがすべて 0 のようです。テクスチャを正しく (アルファ チャネルを使用して) 読み取っていると確信していますか? 手で塗りつぶしてみるか、ファイルをピクセル単位で読み取るために使用しているソフトウェアによって実際に塗りつぶされているかどうかを確認してください。

于 2013-01-10T21:57:35.473 に答える
0

そのため、画像読み込みライブラリを DevIL に変更した後、ようやく機能し始めました。以前はアルファチャンネルに問題があったようです。

ご協力ありがとうございます

于 2013-01-11T11:52:12.243 に答える