【发布时间】:2015-06-17 15:32:40
【问题描述】:
我试图让子对象跟随父对象的位置并表现得像一个正常的孩子,但是我希望它保持旋转不变。
在不影响性能的情况下最好的方法是什么(我的 CPU 预算很紧,已经运行 2 个工作人员并且有很多对象)? 是否有设置只允许影响孩子的位置?
还有一件重要的事情是,当父级旋转时,子级的位置应该跟随旋转。
【问题讨论】:
标签: javascript matrix three.js position
我试图让子对象跟随父对象的位置并表现得像一个正常的孩子,但是我希望它保持旋转不变。
在不影响性能的情况下最好的方法是什么(我的 CPU 预算很紧,已经运行 2 个工作人员并且有很多对象)? 是否有设置只允许影响孩子的位置?
还有一件重要的事情是,当父级旋转时,子级的位置应该跟随旋转。
【问题讨论】:
标签: javascript matrix three.js position
您想阻止子对象在子对象的父对象旋转时旋转。
这两种模式中的一种应该可以满足您的需求。它们的行为略有不同。
第一种模式:
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
【讨论】:
我建议
child.position.copy(object.position);
而不是 WestLangley 的回答中建议的内容:
child.position.setFromMatrixPosition( object.matrixWorld );
我遇到了后者不准确的问题,导致孩子的位置抖动。
请注意,这仅回答了您问题的第一部分,即如何跟随父母的位置保持孩子的旋转不变。
可能值得澄清你问题的第二部分,因为我并不完全清楚。
【讨论】: