在OpenGL中进行Mipmapping
我在使用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)。 所以,我看不出其他代码是什么 - 至少我想不出任何其他的代码。
mipmap的价值是8.您的图像是256x256。 因此,你应该有9级的mipmapping(256,128,64,32,16,8,4,2,1)。 如果有人失踪,你会失去你的纹理。
链接地址: http://www.djcxy.com/p/38535.html上一篇: Mipmapping in OpenGL