【发布时间】:2013-03-21 23:20:58
【问题描述】:
在 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
这种天真的尝试的结果就在这里。黄色的小平面是灰色立方体的子级,它们以我没想到的方式旋转……
我想要的是那些平面始终是完美的正方形,随着立方体的旋转而移动,但它们的旋转锁定到世界,而不是父级。
那么我将如何撤消父级在子级中的旋转?我在这里错过了什么疯狂的数学?
我知道我可以在这个示例中使用点精灵,但我最终会考虑到更复杂的需求,而点精灵将无法做到这一点。所以我需要想办法用一个真正的 3D 对象来做这个。
编辑:这确实适用于每个轴。如果父母只在 X 上旋转,我可以在孩子的 X 旋转上反转它,就像我想要的那样。只有 Z 相同。但是,如果我开始改变然后反转 X 和 Z,它就会变得很松散。
【问题讨论】:
-
如果您希望子对象面向相机,请查看stackoverflow.com/questions/15603111/…。
-
"如果对象有一个旋转的父对象,
Object.lookAt()将无法正常工作。"这正是这里的情况。所以这没有多大帮助:( -
顺便说一句:这不再是真的了。由于
r96,OrbitControls也支持轮换父母。
标签: 3d coffeescript three.js webgl