6

これは、RGB および RGBA 形式で定義されたプリミティブな 5x2 テクスチャです。

//                       1               2               3                     4               5
unsigned char rgb[]  = { 0, 0, 0,        0, 0, 0,        200, 200, 200,        0, 0, 0,        200, 200, 200,
                         0, 0, 0,        0, 0, 0,        200, 200, 200,        0, 0, 0,        200, 200, 200,       };
unsigned char rgba[] = { 0, 0, 0, 255,   0, 0, 0, 255,   200, 200, 200, 255,   0, 0, 0, 255,   200, 200, 200, 255,
                         0, 0, 0, 255,   0, 0, 0, 255,   200, 200, 200, 255,   0, 0, 0, 255,   200, 200, 200, 255,  };

RGBA バージョンの読み込みは期待どおりに機能します。

glTexImage2D(GL_TEXTURE_2D,
             0,       // mipmap level
             GL_RGB,  // dest format
             5,       // width
             2,       // height
             0,       // deprecated
             GL_RGBA, // source format
             GL_UNSIGNED_BYTE,
             rgba);

ここに画像の説明を入力

RGB テクスチャをロードすると、奇妙なカラー シフトが発生します。

glTexImage2D(GL_TEXTURE_2D,
             0,       // mipmap level
             GL_RGB,  // dest format
             5,       // width
             2,       // height
             0,       // deprecated
             GL_RGB,  // source format
             GL_UNSIGNED_BYTE,
             rgb);

ここに画像の説明を入力

最初のスクリーンショットと 2 番目のスクリーンショットのコードの違いは、glTexImage2D の 2 つの引数だけです。

私は何を間違っていますか?

環境

  • ATI Radeon HD5450、OpenGL 4.2
  • Windows 7、64 ビット
  • ビジュアル スタジオ 2010
4

1 に答える 1

11

ここを参照してください-glPixelStorei(GL_UNPACK_ALIGNMENT, 1)修正する必要があります。

于 2012-06-06T18:32:53.203 に答える