1

OpenGLで立方体のテクスチャとして6枚の画像を単純にロードしようとしています。ブローはロードコードです:

glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

for (int i = 0;i < 6;++i)
{
    int width, height, channel;
    unsigned char* img = SOIL_load_image(skybox[i].c_str(), &width, &height, &channel, SOIL_LOAD_AUTO);
    glTexImage2D(cubeTarget[i], 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img);
    delete img;
}

glEnable(GL_TEXTURE_CUBE_MAP_ARB);

レンダリングコードが渡されます。奇妙なことに、レンダリングされた立方体は白です。テクスチャがまったくロードされていないようです。ロードコードを変更して、2Dテクスチャが機能するかどうかを確認します。

glGenTextures(1, texture);
glBindTexture(GL_TEXTURE_2D, texture[0]);
int width, height, channel;
unsigned char* img = SOIL_load_image(skybox[0].c_str(), &width, &height, &channel, SOIL_LOAD_AUTO);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img);
delete img;

if(texture[0] == 0) return false;

glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glEnable(GL_TEXTURE_2D);

その結果、テクスチャ座標によって引き起こされる分布がどれほど奇妙であっても、結局のところテクスチャを見ることができます。次の情報を収集しました。

  1. 画像の読み込みに使用するlibはうまく機能します。

  2. キューブマップの設定はSuperBibbleの第9章からのものです。本のコードをコンパイルするとき、ほぼ同じコードがうまく機能します。

ところで、画像ライブラリのロードについて誰か提案がありますか?私が使っているものは本当に長い間更新を停止しているようです...

追加:スカイボックスのすべての面のテクスチャとして1つのimgのみをロードしようとすると、表示されることがわかりました。変数を使用して特定の値を置き換える限り、何も表示されません。

4

1 に答える 1

0

最後に私はそれを理解します。最後の画像の解像度が他の画像と異なるためです。

本当に多くの時間を無駄にしています。

于 2013-03-27T03:11:49.720 に答える