据我所知var point = object.geometry.vertices[i];
将返回对象几何内部的x
,y
和z
的相对位置。
如果物体被移动,旋转或缩放,如何获得绝对位置?
答案 0 :(得分:36)
首先确保对象的矩阵已更新。
object.updateMatrixWorld();
渲染循环通常会为您调用。
然后,执行此操作:
var vector = object.geometry.vertices[i].clone();
vector.applyMatrix4( object.matrixWorld );
矢量现在将包含世界坐标中的位置。
您可能想阅读一些CG参考书。
图形和游戏开发的3D数学入门/ Fletcher Dunn和Ian Parberry
游戏和互动应用的基本数学:程序员指南 James M. Van Verth和Lars M. Bishop
three.js r69
答案 1 :(得分:22)
最新版本的Three.js(v50 +)提供了the THREE.Object3D
class内置的此功能。特别是,要获取名为THREE.Vector3
的本地vector
实例的世界坐标,请使用the localToWorld
method:
object.localToWorld( vector );
类似地,有a worldToLocal
method用于将世界坐标转换为局部坐标,从数学上讲,这稍微复杂一些。要将世界vector
转换为对象本地坐标空间:
object.worldToLocal( vector );