我读过一些介绍使用GL_LINEAR进行快速三阶插值的文章。
- [1] http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter20.html (英文)
- [2] http://0xef.wordpress.com/2013/01/12/third-order-texture-filtering-using-linear-interpolation/ (英文)
因为[1]中有很多勘误,如果您想了解公式,我建议阅读[2]。
它们两个都提到了这种方法的限制。对于使用GL_LINEAR进行过滤的纹理,下面的关系成立仅当0 <= b/(a+b) <= 1
a*f(i, j) + b*f(i+1, j) = F(i+b/(a+b), j)
其中f是原始图像数据,F是OpenGL线性插值的纹理。
这里的问题是[1]提到了这种方法也可以应用于Catmull-Rom三次样条。然而,显然用包含负部分的Catmull-Rom加权函数,条件(0 <= b /(a + b)<= 1)无法满足。事实上,我尝试使用相同的逻辑实现Catmull-Rom,但只会产生模糊的图像。是否有一种特殊的方法可以将[1]和[2]中的方法应用于Catmull-Rom插值?还是我必须获取所有16个纹理元素来进行Catmull-Rom插值?