Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何创建重力栅格?_Math_Opengl - Fatal编程技术网

Math 如何创建重力栅格?

Math 如何创建重力栅格?,math,opengl,Math,Opengl,我想创建一个“重力栅格”,如下图所示: 我在创建此网格时所做的最接近的工作如下图所示: 在解决这个问题之前,我只会扭曲平行于Y轴的线。但正如你在图片中所看到的,这些线似乎已经扭曲过我的“星球” 以下是我目前的兴趣代码: for (each point on a line parallel to the y-axis) { if (planetPosition.x > currrentPoint.x) { warpedXPos = currrentPoint.x

我想创建一个“重力栅格”,如下图所示:

我在创建此网格时所做的最接近的工作如下图所示:

在解决这个问题之前,我只会扭曲平行于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/R成比例,其中R是行星到该点的距离

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

warped.x = currrentPoint.x + (planetPosition.x-currrentPoint.x)/(1000*distance)
+
后面的部分是相对距离(基本上是扭曲)的缩放,然后将此偏转添加到原始绝对值。您可能也不想使用1000因子,但这与您的示例保持一致。另外,请注意,无需使用
将其拆分为不同的情况,减法符号应在适当的方向上进行调整


(顺便说一句,这种操作非常常见……首先减去一个绝对因子,然后进行缩放,然后再将原始因子加进去。这是一个值得记住的技巧,可用于许多应用程序。)

谢谢,它奏效了。我花了几个小时试图弄明白这个问题。提示,用1/R^2代替它,因为这是真正的重力,它看起来更好。@Stephan:扭曲的空间图显示了重力势,它是1/R。力是另一回事,它是1/R^2,但它没有任何意义(反正我知道)将力显示为空间的扭曲@汤姆10:你完全正确。我在模拟中用来计算作用在演员身上的力的方程和势线的实际扭曲之间混淆了。谢谢你帮我澄清!