7

ビットマップをOpenGLテクスチャにロードして画面に表示しようとしていますが、そうすると、赤と青の値が切り替わったように見えます(たとえば、青の画像がオレンジ色で表示され、緑の画像が変更されないなど)。 )。この問題は、ビットマップをロードするときにのみ発生します。.pngを比較的エラーなしでロードできます。

これは、ビットマップをロードしてテクスチャを設定するために使用しているコードです。私はDevIlを使用していますが、別のシステムを使用したときに問題が発生したため、それがどれほど関連性があるかはわかりません(何を使用したかはよく覚えていませんが、window.hの関数だったと思います)。

ilOriginFunc(IL_ORIGIN_LOWER_LEFT);
ilEnable(IL_ORIGIN_SET);
ILuint image;
ilGenImages(1, &image);
ilBindImage(image);
ilLoad(IL_BMP, "Data/NeHe.bmp"); // Incidentally, loading a png, although it fixes the problem,
                                 // rotates the image 180 degrees.  Not sure if that's important or not,
                                 // But it's why I added the first line of code

glGenTextures(3, &_texture[0]);
glBindTexture(GL_TEXTURE_2D, _texture[0]);
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, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \
    0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData());

ilInit()glEnable(GL_TEXTURE_2D)は、他のあまり関連性のない機能の中でも、プログラムの早い段階で呼び出されます。問題の原因を見つける(そしてうまくいけば修正する)助けをいただければ幸いです。

4

5 に答える 5

10

RGB と BGR が逆になっています。

glTexImage2D(GL_TEXTURE_2D, 0, 3, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \
    0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData());

GL_BGRの代わりに 2 行目に指定できるa はありますGL_RGBか? それはそれを修正する必要があります。

PNG によって画像が反転する理由は、BMP の保存方法によるものです。BMP は下から上に保存され、ファイルの最初のピクセルは画像の一番下の行になります。

于 2011-02-25T22:32:04.610 に答える
2

に切り替えることができGL_RGBますGL_BGR_EXT。場合によってGL_BGRは認識されません。

于 2014-03-22T22:07:02.730 に答える
1

私はしばらく前に同様の問題を抱えていました。に設定GL_RBGglTexImage2DてみてくださいGL_BGR

于 2011-02-25T22:30:36.433 に答える
0

通常、ピクセルの外部フォーマットを指定する glTexImage2D を呼び出します。音から、それを確認して、GL_RGB から GL_BGR に切り替える必要があります。

于 2011-02-25T22:31:54.883 に答える