2012-07-15 278 views

回答

33

首先确保对象的矩阵已更新。

object.updateMatrixWorld(); 

渲染循环通常会为您调用此函数。

然后,这样做:

var vector = object.geometry.vertices[i].clone(); 

vector.applyMatrix4(object.matrixWorld); 

矢量现在将包含位置世界坐标。

您可能想阅读一些CG参考书。

  1. 3D数学底漆图形和游戏开发/弗莱彻Dunn和伊恩·帕伯里

  2. 基本数学游戏和交互式应用程序:一个程序员指南 詹姆斯·M·范·Verth和Lars M.主教

three.js所R69

21

three.js所(V50 +)的最近版本提供此功能BUI lt到the THREE.Object3D class。特别是,要获得名为vector本地THREE.Vector3实例的世界坐标,使用the localToWorld method

object.localToWorld(vector); 

同样,也a worldToLocal method转换世界坐标为局部坐标,这是稍微复杂一些,从数学上讲。要翻译世界vector到物体局部坐标空间:

object.worldToLocal(vector); 
+0

...不要忘了运行object.updateMatrixWorld();在我尝试之前,我一直在挠头。 – arpo 2017-04-22 14:11:45

+0

试过这样做...仍然得到0,0,0 :( – 2017-05-03 18:32:03