正如你可以从告诉这张截图 ,我试图做一个平台游戏,我的工作在物理引擎,但我已经遇到了一定的问题:我需要能够找到的任何一个角度你可以看到三角形弥补这个网,这样我就可以工作了旋转和上三角形的球员,因此角加速度。
我可以用我创建找到任何三角玩家所接触的所有3个点的位置的算法,但我不知道如何使用这些点来制定出三角形的旋转。
通过旋转,我指的是正常的,从脸的中心离开的方向,即在该角度的人会倾向,如果他们站在那个表面上。 有人能拿出一系列方程,将允许这个问题要解决?
正如你可以从告诉这张截图 ,我试图做一个平台游戏,我的工作在物理引擎,但我已经遇到了一定的问题:我需要能够找到的任何一个角度你可以看到三角形弥补这个网,这样我就可以工作了旋转和上三角形的球员,因此角加速度。
我可以用我创建找到任何三角玩家所接触的所有3个点的位置的算法,但我不知道如何使用这些点来制定出三角形的旋转。
通过旋转,我指的是正常的,从脸的中心离开的方向,即在该角度的人会倾向,如果他们站在那个表面上。 有人能拿出一系列方程,将允许这个问题要解决?
如果你把两个向量的叉积:
p1 - p0
和
p2 - p0
其中, p0
, p1
和p2
是三角形的三个顶点,你会得到正常的。 三角形被认为是对你指指点点,如果顶点相对于它的正常向外顺时针排序。 这就是所谓的左手定则。 想象一下,牵着你的左手,用手指从卷曲p0
到p1
,拇指在面对正常的方向伸出:
交叉产品是正确的答案。 不要忘了正常化的结果,并且不要忘记,如果三角形具有零区域,其结果是无效的,因为没有明确的标准。 基本上,如果你的三个顶点为P0,P1和P2:
vector temp = cross(p1 - p0, p2 - p0);
if (length(temp) < epsilon) then
Degenerate_triangle_error;
else
return normalize(temp);
此外,由于对方回答说,不管你得到“起来面对”或“向下面临”正常将取决于你的顶点的顺序。
要完成回答你的问题,一旦你有你的三角形的单位法向量可以用点积计算出的角度。
两个单位向量的点积等于它们之间的夹角的余弦值,因此,如果您计算单位法向量和你的单位向上向量的点积的反余弦你会得到你的三角形的倾斜角(角程从水平)。
另外,还要注意OpenGL的传统使用右手坐标系,因此,如果您使用的是那么你的三角形顶点将有一个逆时针的顺序。
有2点法线三角形(当然),并从标准算法得到一个取决于疗法顶点的顺序。 引用维基
“对于一个多边形(如三角形),表面法线可被计算为的多边形的两个(非平行)的边缘向量的叉积。”
但是,正常的方向取决于点的选择顺序上,就可以计算出它并使用一些其他启发式反矢量是否是正常的,你有兴趣的决定。