gpt4 book ai didi

javascript - 在 threejs 中沿路径或样条线移动对象

转载 作者:数据小太阳 更新时间:2023-10-29 05:49:34 48 4
gpt4 key购买 nike

我试图在 Three.js 中沿着路径移动对象。我想以“构造”的方式构建路径,使用 Path 对象,如下所示:

var path = new THREE.Path([
new THREE.Vector2(0, 0),
new THREE.Vector2(0, inDistance)
]);

path.arc(arcRadius, 0, arcRadius,
Geo.rad(180), Geo.rad(90), true);

path.lineTo(arcRadius + outDistance, arcRadius + inDistance);

然后我可以使用 path.getPoint(t)path.getTangent(t) 为我的对象获取更新的位置:

    let position = path.getPoint(percentTraveled);
let tangent = path.getTangent(percentTraveled);

state.model.position.x = position.x;
state.model.position.y = position.y;

这有两个问题:

  • 路径只有二维
  • Path 对象无法转换为对象的位置和方向,因此返回的位置/和切线是绝对位置。

我读过 this question ,其中讨论了如何使用 SplineCurve3 沿路径移动,但此解决方案并未说明如何构建由一组直线和圆弧构成的样条曲线。

你是怎么做到的?

最佳答案

对于直线运动,我认为您只需要一个方向和一个速度,然后您可以将其用作变换(在矩阵中或应用您的对象位置)。优点是您可以轻松地独立更改此过程中的方向和速度。

// direction vector for movement
var direction = new THREE.Vector3( 1, 0, 0 );

// scalar to simulate speed
var speed = 0.5;

var vector = direction.multiplyScalar( speed, speed, speed );
object.x += vector.x;
object.y += vector.y;
object.z += vector.z;

Here is a fiddle 来证明这一点并与...混混


对于更花哨的运动,例如沿着路径行走,您可以按照您的建议进行。您可能遇到的一个问题是路径和形状始终以 2D 形式定义。因此,为了能够在您的计算中使用向量,您应该始终将它们转换为 3D 向量(只需设置 z = 0)。要使运动相对,您应该计算差异。最简单的方法是跟踪先前的位置和先前的 Angular ,并使用 delta x 和 delta y 进行平移,使用 delta Angular 进行旋转。

deltaX = point.x - previousPoint.x;
deltaY = point.y - previousPoint.y;
deltaAngle = angle - previousAngle;

Here a working fiddle 为你所追求的东西。

我让一个盒子在绝对路径上移动,其他盒子相对移动

关于javascript - 在 threejs 中沿路径或样条线移动对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35495812/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com