为什么OpenGL提供对mipmap的支持,但不支持整体图像?

时间:2012-01-11 07:29:28

标签: math opengl architecture

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

2 个答案:

答案 0 :(得分:2)

  

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

我非常怀疑这句话是真的

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

如果你对图片使用整数那么积分图像所需的位深度会不合理地增加(bitdepth =白色图像的范围+8,这意味着256x256图像需要每个颜色264位的位深度通道)具有更高分辨率的图像。

答案 1 :(得分:1)

  

但是为什么(现在已被弃用)固定功能管道设计有mipmap支持且没有整体图像支持?

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