ThreeJs从另一个对象创建对象

时间:2018-05-21 21:07:47

标签: javascript three.js

我有一个通过导入.obj创建的对象 我想克隆这个对象并给它自己的坐标。 更确切地说,我有一堵墙,为了孩子,我附上了另一个物体(窗户)。沿着墙壁拖动窗口时,一切正常。现在,当我想要克隆墙壁并将其旋转180度时,沿着它的父项拖动子项与鼠标移动完全相反。 我想在我的建筑物的所有侧面重复使用相同的obj墙。

1 个答案:

答案 0 :(得分:1)

您正在描述两个问题。

一个是如何克隆一个对象并给它一个不同的位置:

var wallCopy = wall.clone();
scene.add(wallCopy);
wallCopy.position.set( 10,20,30 );

另一个问题是在对象空间而不是世界空间中移动对象。 即如果更改作为旋转对象的子对象的对象(窗口)的position.x,则对象将相对于其旋转的父对象移动。

如果您正在构建某种编辑器,可以使用SceneUtils使这更容易......

https://threejs.org/docs/#examples/utils/SceneUtils

在编辑开始时,您将使用SceneUtils.detach分离窗口并将其附加到场景...然后应用您的编辑动作,当移动完成后,使用SceneUtils将其附加回墙壁.attach。

SceneUtils负责保持场景层次结构中不同位置之间的分离和附加操作之间的视觉变换一致。

编辑:因此,处理您在评论中描述的案例,而不做任何繁琐的工作,就是使用更多的中间节点。您可以随时在子节点上设置缩放和填充(您可以随时更新其矩阵,然后设置其matrixAutoUpdate = false;如果您对性能影响感到偏执。}

这就是我的意思:

{" root&#34 ;, scale:1,children:[anchor1,anchor2]} {" anchor1"比例:1,孩子:[wall]} {" anchor2"比例:1,孩子:[wall2]}

然后你可以操纵锚或根来移动东西,以及"墙"将被隔离到它自己的小子树。