碰到一个项目需求是导入一整个模型,然后在模型中的灯的位置手动打光,可是获取到的位置信息是0,0,0,那么想要实现这个需求,首先我们得知道灯的位置在哪里。 根据打印信息,发现Mesh的position值为{x,y,z},也不知道为什么不把值赋给它,但是大佬肯定有大佬的想法,我们老实改就行了。

去看官方文档发现,通过computeBoundingBox(),computeBoundingSphere()这两个方法都可以计算出物体的外框属性,有点像我们二维的getBoundingClientRect()都是来计算长宽等属性的函数。

这个值是不会被默认计算的,如果我们需要计算它,那么就需要我们手动调用,否则会一直保持默认的值null。

下面附上计算转换的方法:

// 方法一:根据当前 Geometry 的外边界矩形计算

//这里的myModel是指你要获取的那个模型的名字,我以这个模型的第一个子部件为例

let obj=this.scene.getObjectByName("myModel").children[0].object;

obj.geometry.computeBoundingBox();

let objPosition=new THREE.Vector3();

objPosition.addVectors(obj.geometry.boundingBox.min,obj.geometry.boundingBox.max);

objPosition.multiplyScalar(0.5);

objPosition.applyMatrix4(obj.matrixWorld);

两个方法计算出来的值是一样的,可以任意使用其中一个。

// 方法二:根据当前 Geometry 的外边界球形计算

let obj=this.scene.getObjectByName("myModel").children[0].object;

obj.geometry.computeBoundingSphere();

let objPosition=new THREE Vector3();

objPosition=obj.geometry.boundingSphere.center;

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。