我有一个能够以第一人称走动的虚拟景观。如果它是45度或更小,我希望能够向上走任何坡度。据我所知,这涉及将当前位置转换为x个单位,然后找到转换点与地面之间的距离。如果该距离是x单位或更多,则用户可以在那里行走。如果没有,用户不能。我不知道如何找到一个点与负y方向上最近点之间的距离。我在Java3D中对此进行了编程,但我不知道如何在OpenGL中编程。
答案 0 :(得分:2)
在OpenGL中抨击这个问题正在咆哮错误的树:OpenGL的唯一目的是将漂亮的图片绘制到屏幕上。这不是一个数学库!
根据您的要求,有几种解决方案。这就是我解决这个问题的方法:你为正确着色计算的法线给出了每个点的斜率。假设你的高度图(= terrain)在XY平面和你的引力向量g = -Z
,那么法向力是terrain_normal(x,y) · g
。正常的力量是什么“将你的脚”推向地面。如果没有足够的法向力,就没有足够的摩擦力将肌肉力传递到垂直于地面的运动中。如果你看一下法向力公式,你会发现g
和terrain_normal(x,y)
之间的角度偏离越大,法向力就越小。
因此,在您的程序中,您可以简单地测试法向力是否超过某个阈值;正确地,你将超出的摩擦力投射到地形上,并将其用作加速度矢量。
答案 1 :(得分:0)
如果你只有一个普通的三角形hightmap,你可以使用barycentric coordinates来插入给定(X,Y)位置的Z值。