如何创建重力网格?

时间:2012-04-08 02:37:08

标签: math opengl

我想在这张图片中创建一个“重力网格”:

img

我在创建此网格时最接近的位置如下图所示:

img2

我只是扭曲与Y轴平行的线,直到我能解决这个问题。但正如你在图片中看到的那样,这些线条似乎正在绕过我的“星球”。

以下是我现在感兴趣的代码:

for (each point on a line parallel to the y-axis) {
    if (planetPosition.x > currrentPoint.x) {
        warpedXPos = currrentPoint.x + (1 / (distance*1000));
    }
    else {
        warpedXPos = currrentPoint.x - (1 / (distance*1000));
    }
}

1 个答案:

答案 0 :(得分:5)

这个想法是将每个点朝向行星拉出一个与1 / R成比例的量,其中R是从行星到点的距离。

在你的代码中,currentPoint.x等是绝对位置,但你需要扭曲相对于行星的位置。因此,您的等式应如下所示:

warped.x = currrentPoint.x + (planetPosition.x-currrentPoint.x)/(1000*distance)

+之后的部分是相对距离的缩放,基本上是你的扭曲,然后你将这个偏差添加到原始的绝对值。您可能也不想使用1000因子,但这只是与您的示例保持一致。另外,请注意,不需要使用>将其分解为案例,减法的符号应该在适当的方向上进行调整。

(顺便说一句,这种类型的操作是超级常见的......首先你减去一个绝对因子,然后你缩放,然后你重新添加原始因子。这是一个值得记忆的技巧,可用于许多应用程序。 )