如何在three.js中获取顶点的绝对位置?

17
据我所知,var point = object.geometry.vertices [i];将返回对象几何图形内点的相对位置,包括xyz坐标。
如果对象已移动、旋转或缩放,如何获取绝对位置呢?
2个回答

46

您可以这样获取顶点的世界位置:

const vertex = new THREE.Vector3(); // create once and reuse

const attribute = object.geometry.getAttribute( 'position' );

vertex.fromBufferAttribute( attribute, index );

object.localToWorld( vertex );

three.js r151


较新版本的threejs有时会使用BufferGeometry以提高性能,该类不具备vertices属性。 - Raymond
1
如果网格被骨骼变换,则该值将是错误的。 - Fei Sun

26

最新的Three.js版本(v50+)将此功能内置到THREE.Object3D中。特别是,要获取名为vector的本地THREE.Vector3实例的世界坐标,请使用localToWorld方法

object.localToWorld( vector );

同样地,有一个 worldToLocal 方法 可以将世界坐标转换为本地坐标,从数学角度来说会稍微更复杂一些。要将世界 向量 转换为对象的本地坐标空间:

object.worldToLocal( vector );

不要忘记运行 object.updateMatrixWorld(); 在我尝试之前,我想了很久。 - arpo
1
尝试过了...仍然得到0,0,0 :( - James Heald
我也完全卡在这里了!!花了5个小时以不同的方式尝试所有东西...什么都没有,错误,未定义...真的很令人沮丧!!! - Josh Bowman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接