我在使用OpenGL 1.1时遇到了很多问题,无法正常工作。我没有glu,所以正在使用以下纹理启动代码,并且需要帮助让它正常工作:
glGenTextures(1,&texname); glBindTexture(GL_TEXTURE_2D,texname); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST); w=width;h=height; for(int i=0;i<mipmaps;i++,w/=2,h/=2) glTexImage2D(GL_TEXTURE_2D,i,GL_RGBA8,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,tex[i]);
变量:
// 数据类型: unsigned long int *tex[20]; int mipmaps, width, height, w, h; GLuint texname;
tex
是一个数组,保存纹理mipmap像素数组的列表。mipmaps已经正确处理(我单独测试过它们)。mipmaps
是减少原始图像为1x1像素纹理的mipmaps数量(原始纹理为256x256 - 因此在代码中此时为8)。width
和height
是原始纹理的尺寸(256x256)。
结果是它甚至没有使用纹理。一切都是灰色的(由于光照而变成灰色)。
我有什么遗漏的吗?我已经检查过这个参考,但找不到任何冲突。
其他细节:总的来说,我启用了GL_DEPTH_TEST、GL_TEXTURE_2D、GL_LIGHTING、GL_CULL_FACE、GL_FOG(以及可能没有影响的GL_LIGHT0、GL_LIGHT1)。此外,我正在使用Mesa 3D对OpenGL的实现(Mesa版本4.0,对应OpenGL版本1.3),如果这可能与其有关。
编辑:
问题在于,只要将GL_NEAREST_MIPMAP_NEAREST更改为GL_NEAREST,纹理就可以正常工作(不使用mipmap)。所以,我看不出这可能是其他任何代码 - 至少我想不到还有其他原因。