【问题标题】:THREE.JS, ignore parent's rotation三.JS,忽略父级的旋转
【发布时间】:2015-06-17 15:32:40
【问题描述】:

我试图让子对象跟随父对象的位置并表现得像一个正常的孩子,但是我希望它保持旋转不变。

在不影响性能的情况下最好的方法是什么(我的 CPU 预算很紧,已经运行 2 个工作人员并且有很多对象)? 是否有设置只允许影响孩子的位置?

还有一件重要的事情是,当父级旋转时,子级的位置应该跟随旋转。

【问题讨论】:

    标签: javascript matrix three.js position


    【解决方案1】:

    您想阻止子对象在子对象的父对象旋转时旋转。

    这两种模式中的一种应该可以满足您的需求。它们的行为略有不同。

    第一种模式:

    var gyro = new THREE.Gyroscope();
    
    scene.add( parent );
    parent.add( gyro );
    gyro.add( child ); // add child to gyroscope
    
    child.position.set( x, y, z );
    

    第二种模式:

    object = new THREE.Object3D();
    object.position.set( x, y, z ); // child's desired position relative to parent
    
    scene.add( parent );
    parent.add( object ); // add object to parent
    scene.add( child ); // add child to scene
    

    在第二种情况下,您必须在渲染循环中手动更新孩子的位置,如下所示:

    child.position.setFromMatrixPosition( object.matrixWorld );
    

    three.js r.71

    【讨论】:

    • 这个答案对你有帮助吗?
    • 孩子从哪里来?
    【解决方案2】:

    我建议

    child.position.copy(object.position);
    

    而不是 WestLangley 的回答中建议的内容:

    child.position.setFromMatrixPosition( object.matrixWorld );
    

    我遇到了后者不准确的问题,导致孩子的位置抖动。

    请注意,这仅回答了您问题的第一部分,即如何跟随父母的位置保持孩子的旋转不变。

    可能值得澄清你问题的第二部分,因为我并不完全清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 2013-11-12
      相关资源
      最近更新 更多