GL_LINEAR を使用した高速な 3 次補間を紹介する記事をいくつか読みました。
- [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 スプラインなどの補間フィルターにも適用できます。
ただし、負の部分を含む Catmull-Rom 重み関数では、条件 (0 <= b/(a+b) <= 1) が満たされないことは明らかです。実際、同じロジックで Catmull-Rom を実装しようとしましたが、ぼやけた画像しか生成しません。
[1] と [2] の方法を Catmull-Rom 補間に適用する特別な方法はありますか? または、Catmull-Rom 用に 16 テクセルすべてを取得する必要がありますか?