【问题标题】:Set the rotation of an object at its axis three js设置对象在其轴三处的旋转js
【发布时间】:2015-09-10 10:44:00
【问题描述】:

我尝试使用以下方法设置对象在它自己的轴上的旋转:

object.rotateOnAxis(new THREE.Vector3(1,0,0) , Math.PI)

在渲染函数中,但对象在每次渲染中都在旋转。有没有办法像使用时一样在自己的轴上设置旋转:

object.rotation.x = Math.PI

object.rotation.set(Math.PI,0,0)

在世界轴上设置旋转?

【问题讨论】:

    标签: object rotation three.js


    【解决方案1】:

    只需从render 方法中删除以下代码即可。

    object.rotateOnAxis(new THREE.Vector3(1,0,0) , Math.PI)
    

    你可以把它放到object的声明中。当然,您也可以在那里设置旋转(在render 中),但这会不必要地降低性能。

    只需将其放在渲染函数之外。

    编辑:您可以简单地使用

    object.rotation.x += rotationSpeed; 
    

    render 方法中让它旋转。

    【讨论】:

    • 我需要在每次渲染中更改旋转,因为模型在不同海拔的地形模型上移动。我找到了解决方案,我会发布它:)
    • sry,我误解了这个问题。我编辑了我的答案。
    • object.rotation.x 的问题是我的模型改变了方向。想象一辆汽车在 3d 空间中移动。如果汽车与 z 轴平行移动,并且我进行了 rotation.x ++,汽车将像在山上一样旋转。现在,如果模型与 x 轴平行移动并且我进行了 rotation.x 模型将在世界轴 x 而不是它自己的轴上旋转,因此汽车的一侧(左侧或右侧)将旋转而不是前面或前面我想回来。
    【解决方案2】:

    如果旋转必须在渲染函数中进行,这意味着模型在每次渲染时都会改变旋转。只需使用提到的代码找到旋转差异并将其应用于模型:

    object.rotateOnAxis(new THREE.Vector3(1,0,0) , Math.PI);
    

    将旧旋转和新旋转存储在变量中并应用差异:

    var old_rotation = value1;
    var new_rotation = value2;
    var Drotation = value1-value2;
    

    如果差异是负数或正数,则显示旋转方向,因此只需应用:

    object.rotateOnAxis(new THREE.Vector3(1,0,0) , Drotation);
    

    更新: 我发现的最简单的方法是:

    object.rotateX(angle);
    object.rotateY(angle);
    object.rotateZ(angle);
    

    这将围绕其轴旋转对象:D

    【讨论】:

    • 应该有更简单的方法让对象旋转。我为此编辑了答案。
    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2019-07-16
    • 2014-05-07
    • 2019-01-10
    • 2023-03-14
    • 2016-10-20
    相关资源
    最近更新 更多