【问题标题】:Why does OpenGL provide support for mipmaps but not integral images?为什么 OpenGL 支持 mipmaps 而不是积分图像?
【发布时间】:2012-01-11 17:56:32
【问题描述】:

我意识到 mipmap 和积分图像都存在这样的问题,即生成的像素值不是原始纹理空间中任意多边形的积分。使用积分图像在纹理坐标中对轴对齐的矩形进行积分需要 4 次纹理查找。使用 mipmap,opengl 在 mipmap 中的 4 个相邻像素值之间进行插值,因此也进行了 4 次内存查找。使用积分图像,您需要更少的内存(没有额外的预调整大小的图像,只需要一个积分图像而不是原始图像)并且不需要级别确定。当然这可以通过着色器来实现,但为什么(现在已弃用)固定功能管道设计时支持 mipmap 而没有完整的图像支持?

【问题讨论】:

    标签: math opengl architecture


    【解决方案1】:

    使用积分图像需要更少的内存

    我非常怀疑这个说法是否属实

    据我了解,整数图像的值可能会变得非常大,因此需要浮点表示,这将比典型的 24 位 mipmap 使用更多的空间(mipmap 仅是图像大小的两倍)和/或更少精确并在插值过程中产生噪音。此外,浮点图像并没有真正用于固定功能管道,GPU 使用浮点图像可能会慢很多。

    如果您对图片使用整数,则整数图像所需的位深度会上升到不合理的高度(对于白色图像,位深度 = 范围 + 8,这意味着 256x256 的图像需要每种颜色 264 位的位深度通道)具有更高分辨率的图像。

    【讨论】:

    • cough Mipmaps 添加了第三个。他们不加倍。您必须存储 1 + 1/4 + 1/16 + ... 。使用算术级数公式或应用你的二元算术本能(想想:设置每隔一个但低于 2 的幂)。
    【解决方案2】:

    但为什么(现在已弃用)固定功能管道设计时支持 mipmap 而没有完整的图像支持?

    因为 mipmap 的访问和插值可以构建为相当简单的硬连线电路。有没有想过,为什么纹理尺寸必须是 2 的幂?将 mipmaping 计算实现为一系列位移和加法。与评估积分相比,访问高斯金字塔中的相邻元素需要更少的内存访问。你的主要问题是:Fillrate,即显存带宽,一直是 GPU 的瓶颈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2023-03-11
      • 2017-10-18
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多