反转父的旋转中的孩子,所以孩子出现在世界上不旋转(Invert rotation of parent

2019-08-18 10:46发布

在three.js所的场景,我有一个绕父对象。 这位家长有应位置上锁定到他们的父母的旋转孩子,但自己的旋转需要是独立的,不从父继承。

一个简单的例子是使孩子们总是面对摄像机。

我的尝试是“反转”,在子女的父或母的旋转。 那是:

# render loop
render = ->
  requestAnimationFrame(render)

  # Rotate the parent
  @parent.rotation.x += 0.01
  @parent.rotation.z += 0.02

  # Attempt to invert rotation of the parent, and fail :(
  for child in @children
    child.rotation.x = -@parent.rotation.x
    child.rotation.z = -@parent.rotation.z

这个天真的尝试的结果是在这里。 小黄飞机是灰色的立方体的孩子,他们的方式我不希望绕...

http://jsfiddle.net/b6jgS/

我要的是这些飞机是完美的正方形的全部时间,与立方体的旋转移动,但它们的旋转锁定到世界,而不是父母。

所以,我怎么会撤消在孩子家长的旋转? 什么疯狂的数学这里我错过?

我知道我可以使用点精灵在这个例子中,但我心里有更复杂的需求,最终在那里点精灵也做不了。 所以,我需要找出一个真正的3D对象做到这一点。


编辑:单单每个轴的工作。 如果父母只在X旋转,我能反转,关于孩子的X轴旋转,它就像我想要的。 同一只Z.但是,如果我开始改变,然后双方反转X和Z它,然后得到所有松鼠。

Answer 1:

总有一招。 :-)

你想拥有它的位置是相对父,但其旋转是独立于父的父对象的子女。

要做到这一点,最简单的方法就是让虚拟Object3D对象作为父的孩子,然后孩子们添加到场景中(不是父),让学生从虚拟对象获得他们的世界地位。

parent                 scene
   |                     |
   --- object_1          --- child_1
   |                     |
   --- object_2          --- child_2

child_1.position设置从object_1的世界地位:

child.position.setFromMatrixPosition( parent.children[ idx ].matrixWorld )

作为替代,有一个THREE.Gyroscope ,你可以使用,但它的计算更加密集。



文章来源: Invert rotation of parent in the child, so the child appears unrotated in the world