【问题标题】:Animate the rotation of an object to be parallel to velocity (three.js)动画对象的旋转平行于速度(three.js)
【发布时间】:2015-08-19 07:50:38
【问题描述】:

我正在使用 three.js 让 3D 对象在画布上四处移动。
我有一个对象self,它具有以下属性:

var self = {
mesh: ...,
velocity: ...
}

self.velocity 值是一个 3D 矢量,它在每帧的每个轴上都有运动( 会将对象在 x 轴上每帧移动 1 个单位)。
我目前的目标是能够让对象的正面与速度矢量平行(例如,如果速度向上,则对象将面朝上)。

我看到 another Stack Overflow question 似乎是我可能正在寻找的东西,但是 (A) 我无法理解答案,并且 (B) 我希望能够对当前旋转的变化进行动画处理到新的。

我正在寻找的是一个函数faceParallel(),它将动画self.mesh(可能使用Tween.js)的旋转与self.velocity描述的Vector3平行。

感谢您提供的任何意见。提前致谢。

【问题讨论】:

    标签: javascript html three.js


    【解决方案1】:

    考虑:

    var aimP = new THREE.Vector3();
    aimP.copy(self.mesh.position).add(self.velocity);
    self.mesh.lookAt(aimP);
    

    (效率说明:尽量避免多次调用new THREE.Vector3()。如果您要在很多对象上多次调用此函数,请将new 移至某个外部范围)

    【讨论】:

    • 感谢您的回复。我知道那是如何面对平行于速度的方向。但是,我仍然缺少一个能够对过渡进行补间的元素:对象在新面之前所面对的 Vector3。有没有办法将当前的欧拉或四元数旋转转换为 Vector3?
    • Vector3 同时具有 .applyEuler().applyQuaternion() 方法。用法很简单,例如var ve = new THREE.Vector3(0,0,-1).applyEuler(someEuler);
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多