我在使用mipmap工作时遇到了很多麻烦.我正在使用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]);
变量:
// data types: unsigned long int *tex[20]; int mipmaps, width, height, w, h; GLuint texname;
tex是一个包含纹理mipmap像素数组列表的数组.mipmap正确处理(我单独测试).mipmaps是将原始图像缩小为1x1像素纹理的mipmap数量(原始纹理为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).所以,我看不出它是如何成为任何其他代码 - 至少我想不出它可能是什么.