Version: 2019.2
从一个对象到另一个对象的方向和距离
一个矢量的大小位于另一个矢量方向上的量

计算法向/垂直矢量

在网格生成期间经常需要法向矢量(即,垂直于平面的矢量),此外,法向矢量还可能用于路径跟踪和其他情况。在平面中给定三个点(比如网格三角形的角点),就很容易找到法线。选择三个点中的任意一个点,然后分别从其他两个点减去这个点,即可得到两个矢量:

var a: Vector3;
var b: Vector3;
var c: Vector3;

var side1: Vector3 = b - a;
var side2: Vector3 = c - a;

这两个矢量的差积将得出垂直于表面的第三矢量。使用“左手规则”可确定将这两个矢量传递到叉积函数的顺序。在表面上方从上往下看(法线将指向外部)时,第一个矢量应顺时针扫过第二个矢量:

 var perp: Vector3 = Vector3.Cross(side1, side2);

如果输入矢量的顺序颠倒,结果将指向完全相反的方向。

对于网格,法向矢量也必须归一化。可通过归一化属性来实现此目的,但是还有另一个偶尔有用的技巧。还可以将垂直矢量除以其大小,从而将其归一化:

var perpLength = perp.magnitude;
perp /= perpLength;

事实证明,三角形的面积等于 perpLength / 2。如果需要得出整个网格的表面积,或者想要根据相对面积随机选择三角形,这会很有用。

从一个对象到另一个对象的方向和距离
一个矢量的大小位于另一个矢量方向上的量