[英]Mipmapping in OpenGL
使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)。 因此,我看不到其他任何代码-至少我想不到其他任何代码。
mipmaps的值为8。您的图像为256x256。 因此,您应该具有9个级别的mipmapping(256、128、64、32、16、8、4、2、1)。 如果丢失了,您将失去质感。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.