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”中。无论如何,我希望你能得到答案。

    最佳答案

    您正在寻找的是 双线性插值 ( 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/

    10-13 02:34
    查看更多