前言
最开始文章讲解了坐标轴,后续的例子中也都有坐标轴的存在。前两节我们了解到层级模型,知道了组对象,坐标的表述也不单单只能用刚开始用的坐标轴去表示了,本节我们就来介绍下本地坐标系与世界坐标系。
本地与世界坐标
本地坐标非常容易理解,就是本身设定的坐标,那么世界坐标呢?数组当中有一个扁平化处理,把嵌套数组最终变为一维数组,而世界坐标也可以看到把层级模型拉平去看,此时坐标都是相对于根节点Scene而言,子对象有父对象,父对象也有自身的坐标,依次往上找,直到Scene。总结来说:
- 世界坐标是以整个Scene建立坐标系,子对象的世界坐标就是本身坐标与父对象坐标的叠加。要想获取模型对象的世界坐标直接用.getWorldPosition()方法即可。我们需要一个三维向量当作入参去保存世界坐标。
- 本地坐标就是以原点(0,0,0)的偏移量,参照物就是模型的父对象。
const box2 = new THREE.Mesh(box1Geometry, box2Material);
box2.position.set(0, 2, 0);
//创建组对象
const group = new THREE.Group();
group.add( box2);
group.position.set(0,2,1)
scene.add(group);
// 用三维向量保存
const groupWorldPosition = new THREE.Vector3();
const boxWorldPosition = new THREE.Vector3();
console.log(group.getWorldPosition(groupWorldPosition))
console.log(box2.getWorldPosition(boxWorldPosition))
从图上很明显看出box2的世界坐标是box本身position与group的position叠加。
缩放与矩阵
除了坐标,缩放与矩阵也是有本地与世界之分,本质跟坐标是一样的。
- 缩放。获取本地缩放系数是用.scale属性,而获取世界缩放系数用的是.getWorldScale()方法,用法跟.getWorldPosition()一样。
- 矩阵。矩阵是用来表示物体平移、缩放、旋转三个变换属性的属性值,就是用线代矩阵表示。获取本地矩阵用materix,世界矩阵用matrixWorld。
总结
以上就是模型对象本地与世界相关属性的表示方法,我们要理解世界的概念。