【问题标题】:Three.js Rotate objects inside of moving Object3D to always face the cameraThree.js 在移动的 Object3D 内旋转对象以始终面向相机
【发布时间】:2013-03-14 05:51:14
【问题描述】:

我对 Threejs 有点陌生,只是想知道如何让移动网格在场景中始终面向相机。我在一个容器 Object3D 中有 100 个网格,并且正在 x 和 y 轴上旋转这个容器。有什么方法可以强制容器内的网格始终面向相机?

这是一些示例代码,我还在http://jsfiddle.net/nickelWeb/rZtJX/4/ 设置了一个jsFiddle

for(var k = 0; k<numMeshes; k++){
     meshes[k].lookAt( camera.position );   
}

我试过只使用 .lookAt() 方法,但它似乎不起作用。我知道必须有一种方法可以做到这一点,我只是不知道在哪里看。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: matrix camera rotation three.js


    【解决方案1】:

    如果对象有一个旋转的父对象,Object.lookAt() 将无法正常工作。

    解决您的问题最简单的方法是固定父对象并围绕该对象旋转相机。

    这样,Object.lookAt() 将按预期工作。

    更新小提琴:http://jsfiddle.net/rZtJX/5/

    three.js r.57

    【讨论】:

    • 有什么方法可以在不移动相机的情况下做到这一点?像某种 globalToLocal 转换?
    • 理论上是的,但是“up-ness”的感觉会改变。所以物体会看着相机,但不会是正面朝上的。您可以尝试THREE.SceneUtils.detach(),然后是lookAt(),然后是THREE.SceneUtils.attach(),用于每个对象,但这非常低效,我不建议这样做。
    • 好的,谢谢!我会尝试你的第一个建议。
    • 我认为@WestLangley 的解决方案(分离、查看、附加)实际上是一个非常好的解决方案,特别是如果您不必在每个渲染/更新周期都这样做。要记住的一件事:您必须在附加之前更新对象的矩阵,如下所示:1)分离 2)lookAt 3)updateMatrix 4)附加
    • @ViktorBenei 正确。三.js r.61
    猜你喜欢
    • 2011-07-24
    • 2013-01-27
    • 2012-02-20
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2013-11-04
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多