0

以下:

glActiveTexture(GL_TEXTURE0 + 0);

unsigned i, w;
unsigned tex_test = Memento::_LoadImageIntoTexture("ground.png", i, w);

glBindTexture(GL_TEXTURE_2D, tex_test);
glUniform1ui(program.GetUniformLocation("tex"), 0);

正常に動作し、期待する画像が適切に表示されます。でも...

glActiveTexture(GL_TEXTURE0 + 1);

unsigned i, w;
unsigned tex_test = Memento::_LoadImageIntoTexture("ground.png", i, w);

glBindTexture(GL_TEXTURE_2D, tex_test);
glUniform1ui(program.GetUniformLocation("tex"), 1);

アクティブ テクスチャを 0 以外に変更しようとすると、何も表示されません。解決策が見つからず、意味がないので、これは私を夢中にさせています。ヘルプ?

4

2 に答える 2

0

私の推測では、テクスチャロード機能がアクティブなテクスチャユニットをいじっています。個人的には、スマッピングソースとしては使用できないが、画像データのロードには使用できる新しい「プロキシ」テクスチャユニットを導入する必要があると思います。これにより、テクスチャユニットの状態をいじることなく、テクスチャの読み込みを実行できます。

とにかく、コードをこれに変更するとどうなりますか?

unsigned i, w;
unsigned tex_test = Memento::_LoadImageIntoTexture("ground.png", i, w);

unsigned int texture_unit = 1;
glActiveTexture(GL_TEXTURE0 + texture_unit);
glBindTexture(GL_TEXTURE_2D, tex_test);
glUniform1ui(program.GetUniformLocation("tex"), texture_unit);
于 2012-12-09T12:20:55.723 に答える
0

のOpenGL仕様からglActiveTexture

テクスチャ ユニットは、テクスチャ有効状態、テクスチャ マトリックス スタック、テクスチャ環境、および現在バインドされているテクスチャで構成されます。これらの状態の変更は、アクティブなテクスチャ ユニットにのみ影響します。

を呼び出すのを忘れた可能性がglEnable(GL_TEXTURE_2D)あります。またglTexEnv(...)、デフォルト以外の値を使用している場合もあります。

于 2012-12-09T06:36:50.803 に答える