三个.JS对象遵循样条路径 - 旋转/切换问题&恒速问题

时间:2013-08-23 10:34:19

标签: math three.js curve spline

我认为我的问题类似于:Orient object's rotation to a spline point tangent in THREE.JS但我无法正确访问jsfiddle,我在解释的第二部分中苦苦挣扎。

基本上,我创建了这个jsfiddle:http://jsfiddle.net/jayfield1979/qGPTT/2/,它使用SplineCurve3跟踪由样条线创建的路径的简单立方体。使用标准的TrackBall鼠标交互进行导航。

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

首先,我使用spline.getTanget( t ),其中t是路径上的位置,以便让立方体旋转(Y轴仅为UP)。我想我错过了一些东西,因为即使我提取了所提供的切线的.y属性,旋转仍然显得不合适。是否需要进行一些正规化?

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

对于一些数学假人的任何帮助或解释,都会感激不尽。

1 个答案:

答案 0 :(得分:15)

要保持恒定速度,请使用.getPointAt( t )代替.getPoint( t )

要使框保持与曲线相切,请遵循与Orient object's rotation to a spline point tangent in 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/

three.js r.88