一、物体变换
所有继承自Object3D类的类都拥有以下这些属性,比如PerspectiveCamera或Mesh。
这些属性将被编译成我们所称的矩阵。矩阵在Three.js、WebGL和GPU内部用于进行变换
1. position 移动物体
mesh.position.x = 0.7
mesh.position.y = - 0.6
mesh.position.z = 1
mesh.position.set(0.7, - 0.6, 1)
位置属性并不是任何对象,它是Vector3类的一个实例。虽然这个类具有x、y和z属性,但它还具有许多有用的方法。
- 向量的长度
mesh.position.length()
- 与另一个Vector3的距离
mesh.position.distanceTo(camera.position)
- 对其值进行归一化(即将向量的长度缩小为1单位,但保持其方向不变
mesh.position.normalize()
2. scale 调整物体大小
scale也是一个Vector3。默认情况下,x, y,z等于1
mesh.scale.x = 2
mesh.scale.y = 0.25
mesh.scale.z = 0.5
3. rotation 旋转物体
rotation属性也有x、y和z属性,但不是Vector3,而是欧拉属性。这些坐标轴的值用弧度表示
- y轴上旋转 旋转木马
- x轴上旋转 旋转你所在的汽车的轮子
- z轴旋转 飞机前面旋转螺旋桨
- x轴和y轴上添加完整旋转的八分之一
mesh.rotation.x = Math.PI * 0.25
mesh.rotation.y = Math.PI * 0.25
当你把这些旋转结合起来,你可能会得到奇怪的结果。为什么?因为在旋转x轴的同时,也改变了其他轴的方向。旋转的顺序如下:x, y,然后z。
我们可以使用reorder(…)方法对象来改变这个顺序。object.rotation.reorder('YXZ')
虽然欧拉更容易理解,但这种顺序问题可能会导致问题。这就是为什么大多数引擎和3D软件使用另一种Quaternion的解决方案。
4. quaternion 也用于旋转物体
当rotation改变时 quaternion也会跟着变化
二、lookAt
Object3D实例有一个的方法, lookAt,这个对象会自动向你提供的目标方向旋转它的-z轴。
camera.lookAt(new THREE.Vector3(0, - 1, 0))
camera.lookAt(mesh.position)