小编Dro*_*zle的帖子

OpenGL Mipmapping:OpenGL 如何决定贴图级别?

我在 OpenGL 中实现 mipmapping 时遇到问题。我正在使用 OpenFrameworks 并修改了 ofTexture 类以支持 mipmap 的创建和渲染。

以下代码是该类的原始纹理创建代码(为清楚起见略有修改):

  glEnable(texData.textureTarget);
      glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
      glTexSubImage2D(texData.textureTarget, 0, 0, 0, w, h, texData.glType, texData.pixelType, data);
      glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
      glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glDisable(texData.textureTarget);
Run Code Online (Sandbox Code Playgroud)

这是我的带有 mipmap 支持的版本:

  glEnable(texData.textureTarget);
       glBindTexture(texData.textureTarget, (GLuint)texData.textureID);
       gluBuild2DMipmaps(texData.textureTarget, texData.glTypeInternal, w, h, texData.glType, texData.pixelType, data);
       glTexParameteri(texData.textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
       glTexParameteri(texData.textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  glDisable(texData.textureTarget);
Run Code Online (Sandbox Code Playgroud)

该代码不会生成错误(gluBuild2DMipmaps 返回“0”)并且纹理渲染不会出现问题。但是,我没有看到任何区别。

我渲染的场景由 z=0 处的“平坦、方形瓷砖”组成。这基本上是一个 2D 场景。在绘制图块之前,我使用“glScale()”进行放大和缩小。当我缩小时,图块纹理的像素开始“跳舞”,表明(据我所知)未过滤的纹理查找。请参阅:http://www.youtube.com/watch?v =b_As2Np3m8A 25 秒。

我的问题是:由于我不移动相机位置,而仅使用整个场景的缩放,这是否意味着 OpenGL 无法决定适当的 mipmap 级别并使用完整纹理大小(级别 0)?

保罗

opengl textures filter mipmaps

5
推荐指数
1
解决办法
7320
查看次数

标签 统计

filter ×1

mipmaps ×1

opengl ×1

textures ×1