【发布时间】:2013-04-05 15:34:51
【问题描述】:
我在让 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=宽度;h=高度; for(int i=0;i变量:
// 数据类型: 无符号长整数 *tex[20]; int mipmaps,宽度,高度,w,h; GLuint texname;tex 是一个包含纹理 mipmap 像素数组列表的数组。 mipmap 被正确处理(我单独测试了它们)。 mipmaps 是将原始图像缩小为 1x1 像素纹理的 mipmap 的数量(原始纹理为 256x256 - 因此在代码中的这一点为 8)。 width 和 height 是原始纹理的尺寸 (256x256)。
结果是它甚至不使用纹理。一切都只显示为纯灰色(由于光线而呈灰色)。
有什么我忘记了吗?我检查了this reference,没有发现任何冲突。
其他详细信息:总的来说,我启用了 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)。所以,我看不出它怎么可能是任何其他代码——至少我想不出它可能是什么。
【问题讨论】:
-
glGenerateMipmap 在 1.1 中可用吗?
-
不 - 我研究过,我认为它是在 3.0 中添加的
-
不尝试生成mipmaps有什么问题吗?
-
嘿,不!这就是为什么它如此奇怪。事实上,为了让它工作,我只是将 GL_NEAREST_MIPMAP_NEAREST 更改为 GL_NEAREST,突然它工作了,但不使用 mipmap。
-
mipmaps的值和tex的数据类型是什么?