我想设置一个简单的函数,这将使我更容易在OpenGL中纹理贴图几何体,但由于某些原因,当我试图制作天空盒时,我得到的是白色方块而不是纹理映射几何。我认为problemed代码位于以下范围内:OpenGL纹理:为什么命令很重要?
void MapTexture (char *File, int TextNum) {
if (!TextureImage[TextNum]){
TextureImage[TextNum]=auxDIBImageLoad(File);
glGenTextures(1, &texture[TextNum]);
glBindTexture(GL_TEXTURE_2D, texture[TextNum]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[TextNum]->sizeX, TextureImage[TextNum]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[TextNum]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
}
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[TextNum]);
//glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[TextNum]->sizeX, TextureImage[TextNum]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[TextNum]->data);
//glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
}
最重要的事情,我不明白的是由于某种原因glBindTexture()
一定要来glGenTextures()
和glTexImage2D
之间。如果我把它放在其他地方,它将所有东西都拧紧。什么可能导致这个问题?对不起,如果它很简单,我是全新的OpenGL。
下面是我说的白牌的截图:
++++++++++++++++++++++++++++ +++ 编辑 +++++++++++++++++++++++++++++++
在代码中多玩一会儿之后,我意识到如果我在最后的glBindTexture()
之后添加glTexImage2D()
和glTexParameteri()
,那么所有纹理都会加载。为什么没有这两行代码就会加载大多数纹理,但是还有一些不会,以及为什么我必须为每一帧调用glTexImage(),但仅限于几个纹理?
“auxDIBImageLoad”请不要使用'GLaux'永远。如果你需要加载图片,那么[很多实际上很好的图书馆](http://www.opengl.org/wiki/Image_Libraries)。 – 2012-03-08 16:25:29
我问这个的原因其实主要是因为我在尝试加载纹理时得到这个白色框,我认为这可能与这些函数的排序有关,但似乎并非如此。还有什么可能导致这个白盒出现? – Sean 2012-03-09 03:00:08
我认为这与订单有关,因为如果我要删除'if(!TextureImage [TextNum])',那么纹理将会出现,但考虑到每当该框架被调用时调用MapTexture呈现,没有'if(!TextureImage [TextNum])'内存泄漏像疯狂,直到程序崩溃。 – Sean 2012-03-09 03:09:41