2017-12-14 27 views
0

OpenGLで複数のテクスチャを使用する際に問題があります。私は2つの正方形を描画するテストプログラムを書いています。私はちょうど1、その後のtexturizeすると、すべてが正常に動作しますが、私は両方をテクスチャとき、結果のthats:ザッツOpenGLのテクスチャマッピングのバグ(複数のテクスチャを含む)

unsigned int grass_height, grass_width, wall_height, wall_width; 
unsigned char *grass = loadBMP("./minegrama.bmp", &grass_height, &grass_width); 
unsigned char *wall = loadBMP("./mineleaves.bmp", &wall_height, &wall_width); 

glShadeModel(GL_SMOOTH); 
glPixelStorei(GL_UNPACK_ALIGNMENT, 4); 

glGenTextures(2, tex); 

glBindTexture(GL_TEXTURE_2D, tex[0]); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, grass_width, grass_height, 0, GL_BGR, GL_UNSIGNED_BYTE, grass); 
gluBuild2DMipmaps(tex[0], GL_RGB, grass_width, grass_height, GL_RGB, GL_UNSIGNED_BYTE, grass); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

glBindTexture(GL_TEXTURE_2D, tex[1]); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, wall_width, wall_height, 0, GL_BGR, GL_UNSIGNED_BYTE, wall); 
gluBuild2DMipmaps(tex[1], GL_RGB, grass_width, grass_height, GL_RGB, GL_UNSIGNED_BYTE, wall); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

:私はテクスチャを初期化するために使用したコードザッツ

The underlying square is too big to be fully displayed

を図面コード:

//Seta o MatrixMode pra usar texturas 
glMatrixMode(GL_TEXTURE); 
//INICIO DO CHAO 
glPushMatrix(); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, tex[0]); 
//Desenhar o chao; 
glColor3f(0, 0.39, 0); 
glBegin(GL_QUADS); 
glVertex3f(-30, -30, -0.001); 
glTexCoord3f(-30, -30, -0.001); 

glVertex3f(30, -30, -0.001); 
glTexCoord3f(30, -30, -0.001); 

glVertex3f(30, 30, -0.001); 
glTexCoord3f(30, 30, -0.001); 

glVertex3f(-30, 30, -0.001); 
glTexCoord3f(-30, 30, -0.001); 
glEnd(); 
glDisable(GL_TEXTURE_2D); 
glPopMatrix(); 
//FIM DO CHAO 


glPushMatrix(); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, tex[1]); 
glTranslatef(0, 0, 10); 
glBegin(GL_QUADS); 
glVertex3f(-1, -1, 0); glTexCoord3f(-1, -1, 0); //Especifica cada vértice 
glVertex3f(1, -1, 0); glTexCoord3f(1, -1, 0); 
glVertex3f(1, 1, 0); glTexCoord3f(1, 1, 0); 
glVertex3f(-1, 1, 0); glTexCoord3f(-1, 1, 0); 
glDisable(GL_TEXTURE_2D); 
glEnd(); 
glPopMatrix(); 
+1

テクスチャの座標がちょっと変わっています。その場合、あなたはこれを見ることができます:[SO:どのようにOpenGLテクスチャ座標が働くのですか?](https://stackoverflow.com/q/5532595/7478597)。 (イメージが通常2Dであるので、私は 'glTexCoord3'を使用しませんでした。);-) – Scheff

答えて

0

gluBuild2DMipmapsの最初のパラメータは間違っています。 documentationtargetパラメタの状態:

ターゲットテクスチャを指定します。 GLU_TEXTURE_2Dである必要があります。

さらに、テクスチャの座標がよく見えません。現在の値では、大きな四角形のテクスチャが60回繰り返されます。さらに、テクスチャ座標のz値は0.01ではなく0でなければなりません。さらに良い点:2次元のテクスチャにはglTexCoord2fを使用します。

+0

確かに、ありがとう! –

関連する問題