7

我认为我的问题类似于:Orient object's rotation to a spline point tangent in THREE.JS但我无法正确访问 jsfiddle 并且我在解释的第二部分遇到了困难。

基本上,我已经创建了这个 jsfiddle: http: //jsfiddle.net/jayfield1979/qGPTT/2/,它演示了一个简单的立方体,它遵循由样条曲线创建的路径,使用SplineCurve3. 使用标准轨迹球鼠标交互进行导航。

沿着路径定位立方体很简单。但是我有两个问题。

首先,我使用spline.getTanget( t )wheret是沿路径的位置,以便让立方体旋转(Y 轴仅向上)。我想我遗漏了一些东西,因为即使我提取了.y所提供的切线的属性,旋转似乎仍然不正确。是否有一些规范化需要做?

其次,沿路径的速度变化很大,显然在创建更紧密的曲线时堆叠了更多的点,但我想知道有没有办法重构路径以更均匀地分布点之间的空间?我遇到了这个reparametrizeByArcLength功能,但很难找到如何使用它的解释。

任何关于数学假人的帮助或解释,将不胜感激。

4

1 回答 1

16

要保持恒定速度,请使用.getPointAt( t )而不是.getPoint( t ).

要使框保持与曲线相切,请遵循与在 THREE.JS 中将对象旋转到样条点相切的答案中解释的相同逻辑。

    box.position.copy( spline.getPointAt(counter) );

    tangent = spline.getTangentAt(counter).normalize();

    axis.crossVectors( up, tangent ).normalize();

    var radians = Math.acos( up.dot( tangent ) );

    box.quaternion.setFromAxisAngle( axis, radians );

编辑:更新小提琴:http: //jsfiddle.net/qGPTT/509/

三.js r.88

于 2013-08-23T18:08:22.900 回答