ビットマップをOpenGLテクスチャに読み込んで画面に表示しようとしていますが、そうすると赤と青の値が切り替わるように見えます(例:青いイメージはオレンジ色、緑色画像は変わらない、等)。この問題は、ビットマップを読み込むときにのみ発生し、.pngを比較的エラーフリーで読み込むことができます。OpenGLテクスチャにBMPを読み込むと、赤と青の色が切り替わります。 (C++/Windows)
これはビットマップを読み込んでテクスチャを設定するコードです。私は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)
の両方が、プログラムの中で、より関連性の低い機能の中で、より早く呼び出されます。問題の原因を見つけ出すのに役立つ(そしてうまくいけば)問題を解決することは大いに感謝しています。
ありがとうございました。 GL_BGRを試しましたが、存在しないというエラーが表示されます。私はまた、ビットマップがBGRデータと共に最初に格納される理由を見ませんか? –
@ Keand64:BMPファイル、または正確には実際にはBGRの順序で格納されています。実際に現代のシステムでも、フレームバッファのビットプレーンはBGR(A)の順番になっているため、BGR形式のテクスチャの供給は通常RGB形式より高速です。 GL_BGRはOpenGLバージョン1.1以上のトークンですが、WindowsプラットフォームSDKにはOpenGL-1.1のヘッダーのみが付属しています。拡張機能を介してアクセスする必要があります。ちょうどGLEW http://glew.sourceforge.netまたはGLeeを入手し、それらからヘッダを使用してください。 – datenwolf
また、 "#012lu"を試してみることもできますが、http://www.opengl.org/registry/api/glext.hからglext.hの最新バージョンを取得する必要があります。 – Alink