CPU上的XNA插值?

Mat*_*zen 4 c# xna interpolation

在CPU上插补

我希望能够在CPU上进行插值.

请考虑以下示例:

X1 | X2

-------

X3 | X4

X1,X2,X3和X4都是像素(Vector4格式).它们都有以下坐标.

  • X1:{X:0,Y:0}
  • X2:{X:1,Y:0}
  • X3:{X:0,Y:1}
  • X4:{X:1,Y:1}

现在,我希望能够在给定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"中.无论如何,我希望你有答案.

And*_*ell 6

您正在寻找的是双线性插值(维基百科).

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);
Run Code Online (Sandbox Code Playgroud)