首页 > 解决方案 > 为什么OpenGL使用float来定义各向异性过滤的级别?

问题描述

整个问题都在标题中。

我真的很想知道为什么这个扩展使用浮点类型而不是 int。我知道如果你使用任意值,它会一直工作到你没有通过最高级别。但我一直认为这个值应该是2的倍数的整数。

标签: opengltypesfiltering

解决方案


因为没有理由不使用浮点数。各向异性或多或少代表了纹理空间中像素(或过滤器)足迹的纵横比。(在透视投影的最一般情况下,像素足迹将是纹理空间中的梯形,并且单个纵横比将只是一个近似值,就好像它是平行四边形一样,但在实践中已经足够了。)所以各向异性值的非整数值在数学上是完全合理的。

完全将GL_EXT_texutre_filter_anisotropic实际的实现细节留给实现者:

各向异性纹理过滤的特定方案取决于实现。此外,实现可以自由地考虑当前的纹理缩小和放大模式,以控制所使用的各向异性过滤方案的细节。

因此,实际上可以提出一种实现,其中分数 aniso 设置可以产生影响。

但我一直认为这个值应该是2的倍数的整数。

在实践中,大多数 GPU 确实使用某种方案,其中限制实际上是 2 的。如果您有 aniso factorx=2^i并且可以访问 mipmap level m,则过滤器基本上可以x从(更高分辨率)mipmap level 中获取样本m-i

另请注意,明确允许通过 设置或查询 aniso 设置gl[Get]TexParameteri*(),因此您实际上可以在代码中使用完全基于整数的设置,并假装 float 参数根本不存在。


推荐阅读