javascript - Three.js 对象移动到目标

标签 javascript three.js

我有一个移动到目标的物体。问题是 x 位置比 z 位置快,或者 z 位置比 x 位置快。

如果 z 位置需要更多时间移动,我该怎么做才能使我的对象在 x 位置减慢?

我在动画函数中的代码:

var distanceX = objectX - targetX;
var distanceZ = objectZ - targetZ;

if( distanceX < 0) {
    visitor.translateX( 0.05 );
}else {
    if( distanceX > 0) {
        visitor.translateX( -0.05 );
    }
}

if( distanceZ < 0) {
    visitor.translateZ( 0.05 );
}else{
    if( distanceZ > 0) {
        visitor.translateZ( -0.05 );
    }
}

最佳答案

我建议将当前值计算为绝对值而不是增量值。你所做的基本上是这样的:

x = xLast + constantValue;

相反,您可以在不需要最后一个值的情况下执行此操作(这称为线性插值):

progress = Math.min((Date.now() - startTime) / duration, 1);
x = xStart + progress * (xEnd - xStart);

本例中的进度值是从 0(动画开始)到 1(动画结束)的值。

如果您像这样编写动画,则只需将两个部分的持续时间设置为相同的值即可。使用 Three.js 数学实用程序,您甚至可以一次性完成所有这些操作:

var end = new THREE.Vector3(1, 0, 2);
var start = new THREE.Vector3(2, 0, -1);

// in animation-loop
var tmp = new THREE.Vector3();
var progress = Math.min((Date.now() - startTime) / duration, 1);

// tmp = progress * (end - start)
tmp.copy(end).sub(start).multiplyScalar(progress);        
object.position.copy(from).add(tmp);

这样,您的位置的所有组件都会以恒定的速度移动,并同时到达目的地。

您可能想看看动画库,例如 tween.js 。他们可以轻松地处理很多事情。

关于javascript - Three.js 对象移动到目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42099332/

相关文章:

JavaScript:永不丢失绑定(bind)的方法

javascript - 使用字符串键绑定(bind)嵌套对象

javascript - Three.js简单的粒子动画

three.js - 使用 David Piegza 的 3D 力导向图处理大数据;可视化太慢

ruby-on-rails - 我在我的 Rails 应用程序的 Assets 管道中包含 AFRAME 时遇到问题

javascript - Threejs 二十面体几何顶点颜色

javascript - anchor 下载链接在 Firefox 中不起作用

javascript - 我如何知道 Stream(Node.js、MongoDB)何时准备好进行更改?

javascript - 如何用cancelAnimationFrame停止旋转?

javascript - 列出从 Developer Tools 对 Javascript 文件所做的修改