写在前面:不要用 +、 -、 *、 / 去操作两个BABYLON.Vector3向量,你会得到一个字符串或者NaN,哈哈,这个巨坑啊。同时,BABYLON.Vector3也不会支持类似 +=、-=、*=、/=甚至负号,因为负号就是减号啊。
Babylon.js提供了强大的`BABYLON.Vector3`类,用于处理三维空间中的向量运算。本文将详细介绍`BABYLON.Vector3`的加法、减法、乘法、除法、点乘、叉乘和投影等操作方法。
const vector1 = new BABYLON.Vector3(1, 2, 3);
const vector2 = new BABYLON.Vector3(4, 5, 6);
const result = vector1.add(vector2); // { x: 5, y: 7, z: 9 }
vector1.addInPlace(vector2); // vector1 现在是 { x: 5, y: 7, z: 9 }
const result = vector1.subtract(vector2); // { x: -3, y: -3, z: -3 }
vector1.subtractInPlace(vector2); // vector1 现在是 { x: -3, y: -3, z: -3 }
const result = vector1.multiply(vector2); // { x: 4, y: 10, z: 18 }
vector1.multiplyInPlace(vector2); // vector1 现在是 { x: 4, y: 10, z: 18 }
const scalar = 2;
const result = vector1.scale(scalar); // { x: 2, y: 4, z: 6 }
vector1.scaleInPlace(scalar); // vector1 现在是 { x: 2, y: 4, z: 6 }
这里需要特别提一下,有些时候我们在需要一个BABYLON.Vector3的负值的时候,习惯性的以为在该值前面添加一个负号就行了,但这是不可行的,像这样下面这样的写法就是错误的:
const v = new BABYLON.Vector3(1, 2, 3);
const oppositeV = -v;//错误的写法,oppositeV的值为NaN,哈哈。
上面的oppositeV的值为NaN,原因就是既然BABYLON.Vector3没有对 +、-、*、/ 的重载,怎么可能支持负号呢,因为负号本身就是个减号啊,所以正确的写法就是利用scale或者scaleInPlace方法,参考下面的写法:
const v = new BABYLON.Vector3(1, 2, 3);
const oppositeV = v.scale(-1); // 计算相反数
console.log("原始向量:", v); // 输出:Vector3 { x: 1, y: 2, z: 3 }
console.log("相反数向量:", oppositeV); // 输出:Vector3 { x: -1, y: -2, z: -3 }
或者下面的写法:
const v = new BABYLON.Vector3(1, 2, 3);
v.scaleInPlace(-1); // 直接修改当前向量
console.log("相反数向量:", v); // 输出:Vector3 { x: -1, y: -2, z: -3 }
const result = vector1.divide(vector2); // { x: 0.25, y: 0.4, z: 0.5 }
vector1.divideInPlace(vector2); // vector1 现在是 { x: 0.25, y: 0.4, z: 0.5 }
const result = vector1.dot(vector2); // 32
const result = vector1.cross(vector2); // { x: -3, y: 6, z: -3 }
const result = vector1.project(vector2); // 返回vector1在vector2上的投影向量
通过掌握`BABYLON.Vector3`的这些数学方法,你可以在Babylon.js中灵活地进行向量的各种运算,从而实现复杂的几何和物理计算。这些基本操作是3D图形编程中的重要基础,能够帮助你更好地理解和实现3D场景中的各种效果和交互。