CPU 上的插值
我希望能够在 CPU 上进行插值。
考虑以下示例:X1 | X2
-------
X3 | X4
X1、X2、X3 和 X4 都是像素(Vector4 格式)。它们都有以下坐标。
现在,我希望能够在给定 Vector2 的像素之间进行插值。
所以假设我想要坐标 {X: 0.348, Y: 0.129} 的颜色。
我将如何在像素之间正确插值?
为什么我要这样做
我知道这听起来很疯狂,但这就是我想做的。我正在尝试在 CPU 上模拟 GPU 着色器算法。它用于 Perlin 噪声发生器。我已经在游戏中通过像素着色器以这种方式生成了 2D 地形,并且我希望能够(在给定的 X、Y 和 Z 坐标处)检查那里是否存在墙,使用确切的CPU上的相同算法。
如果您想了解更多关于我正在尝试做的事情,请参阅这个问题:https://gamedev.stackexchange.com/questions/15667/perlin-noise-copying-the-algorithm-on-the-cpu
编辑
我把这个贴错了地方。它应该在“gamedev.stackexchange.com”中。无论如何,我希望你能得到答案。
最佳答案
您正在寻找的是 双线性插值 ( Wikipedia )。
XNA Lerp
函数执行线性插值 - 即:一个轴。双线性是在两个轴上。幸运的是,这只是在一个轴上线性插值的问题(两次:该轴上的每对输入一次),然后对两个结果进行线性插值。
所以你会做这样的事情:
Vector2 position = new Vector2(0.348f, 0.129f); // <- example data from question
Vector4 result = Vector4.Lerp(Vector4.Lerp(X1, X2, position.X),
Vector4.Lerp(X3, X4, position.X),
position.Y);
关于c# - CPU上的XNA插值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6972652/