OpenGL中的CubeMap根本不显示

时间:2013-03-26 08:09:08

标签: opengl textures

我试图在OpenGL中简单地加载6张图片作为立方体纹理。 Blow是加载代码:

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章。在编写本书代码时,几乎相同的代码都能正常工作。

  3. 顺便说一下,有没有人对加载图片库有什么建议?我使用的那个似乎停止更新很长一段时间......

    追加:我现在发现的是,如果我尝试只加载一个img作为所有天空盒面的纹理,它将会显示出来。只要使用变量替换特定值,就不会显示任何内容。

1 个答案:

答案 0 :(得分:0)

最后我弄清楚了。这是因为最后一张图片的分辨率与其他图片不同。

真的浪费了很多时间。