THREE.JS, 忽略父元素的旋转

3
我想让子对象跟随父对象的位置并像普通子对象一样运作,但我希望它保持旋转不变。有没有最好的方法可以做到这一点而不影响性能(我的CPU预算已经很紧张了,正在运行2个工作线程和大量对象)?是否有一种设置可以仅影响子对象的位置?此外,重要的是当父对象被旋转时,子对象的位置应该跟随该旋转。
2个回答

3
你希望在父级旋转时防止子对象旋转。
以下两种模式中的一种可以实现你想要的效果。它们具有不同的行为。
第一个模式:
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


1
这个回答对您有帮助吗? - WestLangley
孩子从哪里来? - jao

2

我建议

child.position.copy(object.position);

与WestLangley的回答所建议的不同,应该这样做:
child.position.setFromMatrixPosition( object.matrixWorld );

我遇到了后者不准确的问题,导致子元素位置抖动。
请注意,这只回答了您问题的第一部分,即如何在保持子元素旋转不变的情况下跟随父元素的位置。
第二部分问题可能值得澄清,因为对我来说并不完全清楚。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接