0

このチュートリアルで見たコードから、バンプマップを2Dテクスチャに適用しようとしています:http://www.paulsprojects.net/tutorials/simplebump/simplebump.html

セットアップで機能するようにコードを変更しました(クライアントの状態を使用せず、glDrawElementsの代わりにglVertexを使用して頂点を描画するなど)が、プログラムを実行すると、次の出力が得られます。

http://www.tiikoni.com/tis/view/?id=cf02ea7

これはコードです:(x、y、z、w、h、stはすべて有効な値です)

//Bind normal map to texture unit 0
glBindTexture(GL_TEXTURE_2D, bump->texnum);
glEnable(GL_TEXTURE_2D);

//Bind normalisation cube map to texture unit 1
glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, draw_ncm);
glEnable(GL_TEXTURE_CUBE_MAP_ARB);
glActiveTextureARB(GL_TEXTURE0_ARB);

//Set up texture environment to do (tex0 dot tex1)*color
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);

glActiveTextureARB(GL_TEXTURE1_ARB);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_DOT3_RGB_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);

glActiveTextureARB(GL_TEXTURE0_ARB);

glBegin( GL_QUADS );
glTexCoord2f( st[0], st[1] );
glVertex3f( x, y, z );
glTexCoord2f( st[0], st[3] );
glVertex3f( x, y+h, z );
glTexCoord2f( st[2], st[3] );
glVertex3f( x+w, y+h, z );
glTexCoord2f( st[2], st[1] );
glVertex3f( x+w, y, z );
glEnd();

// texture pass
glBindTexture (GL_TEXTURE_2D, pic->texnum);
glBegin( GL_QUADS );
glTexCoord2f( st[0], st[1] );
glVertex3f( x, y, z );
glTexCoord2f( st[0], st[3] );
glVertex3f( x, y+h, z );
glTexCoord2f( st[2], st[3] );
glVertex3f( x+w, y+h, z );
glTexCoord2f( st[2], st[1] );
glVertex3f( x+w, y, z );
glEnd();
4

1 に答える 1

1

使用しているシェーダーに接線ベクトルを提供していますか? これが正しく機能するためには、接線ベクトル アトリビュートへのアクセスをシェーダに与える必要があります。また、法線マップのユニフォームを定義する必要があります。家に帰ったら、これに完全に答えることができますが、ここに投稿したものよりも複雑です. また、どの OpenGL コアに準拠しようとしていますか? 1.x? 2.x? 3.x/4.x?

于 2012-10-02T21:00:50.737 に答える