【问题标题】:How do you inherit the world location of a mesh?你如何继承网格的世界位置?
【发布时间】:2012-11-23 14:16:47
【问题描述】:

我有一个 Three.js 场景,其中有几个网格在移动。我想通过在场景中的相同位置和相同旋转中放置一个新的网格实例(具有相同几何形状)来拍摄快照并复制所有网格位置。我不能简单地复制网格的 .position 和 .rotation ,因为网格是其他网格的子对象。我试图 .clone() 网格的 matrixWorld 但这没有用。如何继承网格的世界位置?

这就是我想要做的:

// mesh is an existing mesh loaded into a scene
// geom is an existing geometry definition

var material = new THREE.MeshFaceMaterial();

var newMesh = new THREE.Mesh( geom, material);

newMesh.matrixWorld = mesh.matrixWorld.clone();

scene.add(newMesh);

任何帮助将不胜感激。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    就这么简单:

    newMesh.position.copy( mesh.matrixWorld.getPosition() );
    

    编辑:请参阅 this updated answer

    【讨论】:

    • 感谢您的回复。这适用于网格的初始位置。但正如我之前提到的,位置值与 matrixWorld 值不对应,因为网格是旋转 mash 链的子项。这是我正在谈论的一个示例:dimitriipokrovskii2.appspot.com/robot_arm_joints.html 因此,如果您查看 mesh3,mesh3.matrixWorld.getPosition() 是 x:0 y:750 z:0。如果你用你的键移动机器人并查看 mesh3.matrixWorld.getPosition() 它返回相同的值。如果您查看实际的 worldMatrix,它会存储正确的信息。
    • 您正在使用大约 1 年历史的 three.js 版本。请更新到当前版本 r.53。这一切都应该按预期工作。
    • 啊,明白了。感谢您的帮助。
    • 提醒一下 WestLangley。我用新的 Three.js 库 r53 试了一下,还是不行。当您发出 mesh.matrixWorld.getPosition() 时,它仅返回对该网格所做的任何位置更改。它没有考虑世界空间中的实际位置。
    • mesh.matrixWorld.getPosition() 获取世界空间中的实际位置。每次渲染都会更新,除非您关闭这些更新。如果您仍然遇到问题,请提供一个简单的实时 jsfiddle 示例。
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多