2013-03-26 214 views
1

我试图在OpenGL中简单地加载6张图片作为立方体纹理。 Blow是加载代码:OpenGL中的立方体贴图根本不显示

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章。当我编译本书的代码时,几乎相同的代码将很好地工作。

顺便说一句,有没有人有关于加载图像库的一些建议?我使用的一个似乎停止更新很长一段时间...

附加:我现在发现是,如果我尝试只加载一个IMG作为所有天空盒面'纹理,它会显示。只要使用一个变量来替换一个特定的值,什么都不会显示。

+0

你在哪里设置mipmap? (如果你不这样做,为什么你启用它们?) – JasonD 2013-03-26 08:13:53

+0

@JasonD你的意思是缩小过滤器?我其实并没有建立mipmap。当我将其更改为GL_LINEAR时,它仍然不起作用。所以我想这不是问题。 – Narusaki 2013-03-26 08:23:19

+0

“*我使用的似乎停止更新很长一段时间...... *”土壤?土壤是*完整*;它拥有所有者想要赋予的所有功能。在这一点上,没有必要更新它。 – 2013-03-26 09:06:30

回答

0

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

真是种浪费了很多时间。

相关问题