【问题标题】:Mipmapping in OpenGLOpenGL 中的 Mipmap
【发布时间】: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)。 widthheight 是原始纹理的尺寸 (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的数据类型是什么?

标签: c++ opengl mipmaps


【解决方案1】:

mipmaps 的值为 8。您的图像是 256x256。因此,您应该有 9 个级别的 mipmapping (256,128,64,32,16,8,4,2,1)。如果缺少一个,你就会失去你的质感。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2011-06-30
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多