我有一个能够以第一人称四处走动的虚拟景观。如果它是 45 度或更小,我希望能够爬上任何斜坡。据我所知,这涉及将您当前的位置转换为 x 个单位,然后找到转换点与地面之间的距离。如果该距离为 x 个单位或更多,则用户可以步行到那里。如果不是,则用户不能。我不知道如何在负 y 方向上找到一点与最近点之间的距离。我已经在 Java3D 中对此进行了编程,但我不知道如何在 OpenGL 中进行编程。
问问题
611 次
2 回答
2
在 OpenGL 上讨论这个问题是在挑错树:OpenGL 的唯一目的是在屏幕上绘制漂亮的图片。这不是数学图书馆!
根据您的需求,有多种解决方案。这就是我解决这个问题的方法:为正确着色计算的法线为您提供每个点的斜率。假设您的高度图(=地形)在 XY 平面中并且您的重力矢量g = -Z
为 ,那么法向力为terrain_normal(x,y) · g
。正常的力量是什么将你的脚“推”到地面上。没有足够的法向力,就没有足够的摩擦力将你的肌肉力量传递到垂直于地面的运动中。如果您查看法向力公式,您会发现两者之间的角度越大g
,terrain_normal(x,y)
偏离的角度越大,法向力越小。
因此,在您的程序中,您可以简单地测试法向力是否超过某个阈值;正确地,您将施加的摩擦力投射到地形上,并将其用作加速度矢量。
于 2011-05-11T07:41:16.337 回答
0
如果您只有一个常规的三角形高度图,您可以使用重心坐标从给定的 (X,Y) 位置插入 Z 值。
于 2011-05-11T02:05:26.087 回答