【问题标题】:How to get the absolute position of a vertex in three.js?如何在three.js中获取顶点的绝对位置?
【发布时间】:2012-07-14 18:09:22
【问题描述】:

据我所知var point = object.geometry.vertices[i]; 将返回对象几何内部点的xyz 的相对位置。

如果对象被移动、旋转或缩放,如何获得绝对位置?

【问题讨论】:

    标签: javascript webgl three.js


    【解决方案1】:

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

    object.updateMatrixWorld();
    

    渲染循环通常会为你调用这个。

    然后,这样做:

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

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

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

    1. 图形和游戏开发的 3D 数学入门 / Fletcher Dunn 和 Ian Parberry 着

    2. 游戏和交互式应用程序的基本数学:程序员指南 James M. Van Verth 和 Lars M. Bishop

    三个.js r69

    【讨论】:

    • 较新的threejs版本有时可能会使用buffergeometry来获得更好的性能,但没有verticies属性
    • 如果网格被骨架变换,则该值是错误的。
    【解决方案2】:

    Three.js (v50+) 的最新版本在 the THREE.Object3D class 中提供了此功能。特别是,要获取名为vector 的本地THREE.Vector3 实例的世界坐标,请使用the localToWorld method

    object.localToWorld( vector );
    

    同样,有a worldToLocal method 用于将世界坐标转换为局部坐标,从数学上讲稍微复杂一些。将世界vector 转换为对象局部坐标空间:

    object.worldToLocal( vector );
    

    【讨论】:

    • ...别忘了运行 object.updateMatrixWorld();在我尝试之前,我已经摸不着头脑了。
    • 试过这样做...仍然得到 0, 0, 0 :(
    • 我也完全被这个困住了!!花了 5 小时在这里以不同的方式尝试所有的东西……什么都没有,错误,未定义……非常令人沮丧!!!
    最近更新 更多