0

下の画像のように、テクスチャを別のテクスチャの上にレンダリングしようとしています。

  望ましい

ただし、その画像のみが適切にレンダリングされます。私の他の画像は文字化けして「ねじれ」ます。よく見ると、行がずれているように見えます。

  実際

上記の例では、背景にまったく同じ猫の写真を使用しました。この猫の写真と私が作成した他のすべての画像は、何らかの理由で 1 つの特別な画像を除いて文字化けしてしまいます。EXIF データを見てみましたが、sRGB を使用していないことを除けば、他のデータとまったく同じ形式です。アルファチャンネルとすべてがあります。

行がどのようにシフトされるかを考えると、ピクセルの配置と関係があると思いますが、文字通りすべての可能な配置の組み合わせを試しましたが、これまでのところ何も機能していません。これが私のコードです:

int height, width = 512;
m_pSubImage = SOIL_load_image("sample.png", &width, &height, 0, SOIL_LOAD_RGBA);

glGenTextures(1, &m_textureObj);
glBindTexture(m_textureTarget, m_textureObj);
...
glActiveTexture(TextureUnit);
glBindTexture(m_textureTarget, m_textureObj);
glTexSubImage2D(GL_TEXTURE_2D, 0, 20, 10, 100, 100, GL_RGBA, GL_UNSIGNED_BYTE, m_pSubImage);

背景画像をロードするコードは、glTexSubImage2D の代わりにこの呼び出しを使用することを除いて、似ています。

glTexImage2D(m_textureTarget, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_pImage);
4

2 に答える 2

1

に幅と高さを正しく渡していないようglTexSubImage2Dです。スキャンラインごとに保存されるピクセル数が必要であることに注意してください。これは、多くの場合、画像の「論理的な」幅と正確に一致しませんが、4 の倍数に切り上げられます。

「論理」幅と「ストレージ」幅の違いにより、各スキ​​ャン ラインにいくつかのパディング ピクセルが残ります。これは、次のスキャンラインの左端のピクセルとして解釈され、画像を下に移動するにつれて蓄積されます。これにより、観察する傾斜効果が作成されます。

于 2014-04-25T17:40:17.270 に答える