【问题标题】:Disable mipmapping in OpenGL ES 2.0在 OpenGL ES 2.0 中禁用 mipmapping
【发布时间】:2013-02-04 10:58:25
【问题描述】:

我想在屏幕上绘制一些相同的图形(具有相同的纹理)(OpenGL ES 2.0)。这些数字在放大和缩小过滤器中会有所不同。以及不同状态的mipmapping。 问题是:如果我在绘制任何图形时使用 mipmapping(如果我调用 glGenerateMipmap() 函数)我无法关闭 mipmapping 模式。 如果我至少调用一次 glGenerateMipmap() 是否可以关闭 mipmapping 模式?

【问题讨论】:

  • 嗯?我不完全理解你的问题。你想在没有 mipmapping 的情况下渲染纹理吗?只是使用非 mipmapped 过滤模式,与glGenerateMipmap 没有任何关系。
  • 抱歉,我是 OpenGL ES 2.0 的新手,可能在术语上不太准确。如果我调用 glGenerateMipmap() 函数,我可以在进一步的代码中关闭吗?例如:void Draw(Context *context) { ... for (t = 0; t<context->numberShapes; t++) { DrawShape(userData->shapePositionX[t], userData->shapePositionY[t], userData->shapePositionZ[t], t); } ... } void DrawShape(GLfloat offsetX, GLfloat offsetY, GLfloat offsetZ, int t) { ... glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,tHandle); if (shapeConfig[t].boolMipMap) { glGenerateMipmap(GL_TEXTURE_2D); } ... glDrawArrays(...);
  • 如果在循环中我调用 `glGenerateMipmap(GL_TEXTURE_2D);` 一次,我该如何关闭它们?
  • glGenerateMipmap 仅生成较小的 mipmap 图像(基于顶级图像)。如果您不使用适当的 mipmapping 过滤器模式(通过glTexParamteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ...)),则不会使用这些 mipmap。同样,您不应该在渲染之前每帧调用glGenerateMipmap。设置纹理的基础图像后调用一次。就像说它生成 mipmap 图像一样,它们在生成后不会消失。决定是否实际使用 mipmapping 的是纹理对象的过滤器模式。
  • @ChristianRau 实际上,您的评论是一个格式正确的答案:)

标签: opengl-es-2.0 mipmaps


【解决方案1】:

glGenerateMipmap 仅生成较小的 mipmap 图像(基于顶级图像)。但是,如果您不使用适当的 mipmap 过滤器模式(通过glTexParamteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_..._MIPMAP_...)),这些 mipmap 不会用于过滤。因此,如果您不想过滤纹理 mipmap,只需将 GL_NEARESTGL_LINEAR 设置为缩小过滤器即可针对此特定纹理禁用它。同样 not 调用 glGenerateMipmap 并不意味着没有 mipmapping 正在进行。仍将使用可能的 mipmap 过滤器模式(这也是新创建纹理的默认值),只是 mipmap 图像包含垃圾(或纹理实际上不完整,导致实现定义的行为,但通常是黑色纹理) .

同样,您不应该在渲染之前每帧调用glGenerateMipmap。设置纹理的基础图像后调用一次。就像说它生成 mipmap 图像一样,它们在生成后不会消失。决定是否实际使用 mipmapping 的是纹理对象的过滤器模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多