THREE.Vector3
是 Three.js 中的一个重要类,用于表示三维空间中的一个点或向量。它是 Three.js 中用于处理三维空间几何运算和计算的基础类之一。
参数
THREE.Vector3
是 Three.js 中表示三维向量或点的类,它有以下构造函数:
constructor(x?: number, y?: number, z?: number)
构造函数接受三个可选参数 x
、y
和 z
,它们分别代表向量或点在三维空间中的 x、y 和 z 分量。这些参数可以是数字类型,也可以是可以转换为数字的其他类型,如字符串。
如果不传入任何参数,默认创建一个所有分量都为 0 的三维向量。
以下是几个使用 THREE.Vector3
构造函数的示例:
const vec1 = new THREE.Vector3(); // 创建一个三维向量,默认 x、y、z 分量都为 0
console.log(vec1); // Vector3 { x: 0, y: 0, z: 0 }
const vec2 = new THREE.Vector3(1, 2, 3); // 创建一个三维向量,x 分量为 1,y 分量为 2,z 分量为 3
console.log(vec2); // Vector3 { x: 1, y: 2, z: 3 }
const vec3 = new THREE.Vector3('1', '2', '3'); // 创建一个三维向量,参数可以是字符串
console.log(vec3); // Vector3 { x: 1, y: 2, z: 3 }
const vec4 = new THREE.Vector3(1.5, 2.7, -3.2); // 创建一个三维向量,参数可以是小数
console.log(vec4); // Vector3 { x: 1.5, y: 2.7, z: -3.2 }
通过构造函数传入合适的参数,你可以创建不同分量值的三维向量或表示三维空间中的点。在 Three.js 中,THREE.Vector3
类的实例可以用于进行各种几何计算和图形渲染操作。
作用
THREE.Vector3
的作用包括但不限于以下几个方面:
-
表示三维坐标:
THREE.Vector3
可以用来表示三维空间中的一个点或位置。它使用 x、y 和 z 三个分量来描述点在三维坐标系中的位置。 -
表示方向和向量:
THREE.Vector3
还可以用来表示一个方向或一个向量,即具有大小和方向的量。例如,你可以用它表示物体的运动方向、法线向量等。 -
几何运算:
Three.js 中的很多几何运算都涉及到向量的操作,例如计算两点之间的距离、向量加法、向量减法、向量缩放等。THREE.Vector3
提供了一系列的方法来执行这些几何运算。 -
相机和视图变换:
在 Three.js 中,相机是一个重要的概念,用来控制场景的视角和投影。在相机的视图变换中,常常需要用到向量。例如,相机的位置、视点方向、上方向等都是用THREE.Vector3
来表示的。 -
光照计算:
在 Three.js 中进行光照计算时,经常会用到法线向量、光源方向等。THREE.Vector3
提供了计算这些向量的方法,方便进行光照效果的计算。
总的来说,THREE.Vector3
是 Three.js 中用于表示三维空间中点和向量的基础类,它在 Three.js 的几乎所有场景中都有广泛的应用,是进行三维空间计算和几何操作的重要工具之一。
使用实例
以下是使用 THREE.Vector3
的几个常见实例,包括创建向量、向量运算和坐标变换:
创建向量:
const vec1 = new THREE.Vector3(); // 创建一个三维向量,默认 x、y、z 分量都为 0
const vec2 = new THREE.Vector3(1, 2, 3); // 创建一个三维向量,x 分量为 1,y 分量为 2,z 分量为 3
const vec3 = new THREE.Vector3(1.5, 2.7, -3.2); // 创建一个三维向量,参数可以是小数
向量运算:
const vec1 = new THREE.Vector3(1, 2, 3);
const vec2 = new THREE.Vector3(2, 4, 6);
const resultAdd = vec1.clone().add(vec2); // 向量加法
console.log(resultAdd); // Vector3 { x: 3, y: 6, z: 9 }
const resultSubtract = vec1.clone().sub(vec2); // 向量减法
console.log(resultSubtract); // Vector3 { x: -1, y: -2, z: -3 }
const resultMultiplyScalar = vec1.clone().multiplyScalar(2); // 向量标量乘法
console.log(resultMultiplyScalar); // Vector3 { x: 2, y: 4, z: 6 }
const resultDot = vec1.clone().dot(vec2); // 向量点积
console.log(resultDot); // 28
const resultCross = vec1.clone().cross(vec2); // 向量叉积
console.log(resultCross); // Vector3 { x: 0, y: 0, z: 0 }
坐标变换:
const position = new THREE.Vector3(1, 2, 3);
const quaternion = new THREE.Quaternion().setFromEuler(new THREE.Euler(0, Math.PI / 4, 0));
const scale = new THREE.Vector3(2, 2, 2);
const transformedPosition = position.clone().applyQuaternion(quaternion).multiply(scale);
console.log(transformedPosition); // Vector3 { x: 2.828427, y: 4, z: 0 }
在这个例子中,我们首先创建了一个原始的三维向量 position
,然后通过 setFromEuler
方法创建一个四元数 quaternion
,并通过 applyQuaternion
方法将向量 position
进行旋转变换。最后,我们再通过 multiply
方法对变换后的向量进行缩放。这个过程将 position
向量进行旋转和缩放,并将结果存储在 transformedPosition
中。
这些是使用 THREE.Vector3
类的一些基本实例,你可以根据你的项目需求进一步探索 Three.js 中的向量运算和坐标变换功能。
与THREE.Vector2的不同点
THREE.Vector3与THREE.Vector2的相同和不同