代码之家  ›  专栏  ›  技术社区  ›  Jichael

3.js包含相同对象的多个组

  •  0
  • Jichael  · 技术社区  · 6 年前

    我现在正在学习three.js并尝试制作一个可玩的魔方。

    我希望能够将一个面作为一个整体旋转,而不是一次移动一个立方体,我可以通过创建一个3.组并在其中添加立方体来实现。问题是一个立方体包含在多个面中,我找不到解决方案。如果创建对象,将其添加到第一个组,然后将其添加到第二个组,则该对象将从第一个组中删除。

    我很确定有一个解决办法,但找不到,因为我对three.js和3d编程很陌生(我只上了一门基础课 https://www.udemy.com/3d-programming-with-javascript-and-the-threejs-3d-library/ )

    这是我的代码,但我认为它不会很有用。

    https://pastebin.com/Hq66UvBU

    Thanks
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   TheJim01    6 年前

    欢迎使用堆栈溢出。请记住编辑您的问题以包含您的代码,因为当Pastebin链接终止时,您的问题将失去重要的上下文。

    将对象添加到 THREE.Group 是通过的 the add function ,就像你一样。但是添加到多个组中的对象将仅是 最后 添加到的组。这是因为 添加 查看对象是否已定义 parent ,并在设置新父对象之前从该父对象中移除该对象。( r97 code )

    例子:

    let obj = new THREE.Object3D()
    let p1 = new THREE.Group()
    let p2 = new THREE.Group()
    
    p1.add(obj) // obj.parent == p1
    p2.add(obj) // 1. three.js calls p1.remove(obj) 2. obj.parent == p2
    

    除此之外,正如@mugen87所提到的,你的立方体不仅需要拥有多个成员身份,而且还需要能够在面部组的位置发生变化时进入和离开面部组。对我来说这说明你几乎 需要 分别变换立方体。你可以用一个 三组 为了使概念化更容易,但是这样实际实现会有额外的开销。