2

たとえば、CurvePathを作成したい

var spline = new THREE.SplineCurve3([
    new THREE.Vector3(0, 0, 0),
    new THREE.Vector3(1, 0, 0),
    new THREE.Vector3(1, 1, 0),
]);

(javascript 疑似コード) を使用して、パスと共にパーティクルを送信します。

var t = 0;

function update(){
    t = t + 0.05;
    particle.position = spline.getPointAt(t)
}

ただし、スプラインカーブがシェイプのエッジでソフトベンドを作成しないようにしたいので、パーティクルの上のシェイプはポイントで直角に回転します(1, 0, 0)

これは または で実装する必要があることはわかっていますLineCurve3が、 を除く他のすべてのカーブSplineCurve3getPoint()は実装されていません。

私は3つのr59を使用しています。

4

1 に答える 1

3

編集:THREE.Curve.create()廃止されました。従うべき新しいパターンについては、この回答を参照してください。


のサブクラスである独自のカーブ クラスを作成するにTHREE.Curveは、次のパターンに従います。

MyCurve = THREE.Curve.create(

    // define the constructor (args optional)
    function( points, s ) {

        this.points = points;
        this.myProperty = s; // add a property if you want

    },

    // define the getPoint() function
    function( t ) {

        return new THREE.Vector3( x, y, z ); // flesh this out

    }

);

あなたの場合、複製できますSplineCurve3-関数を変更するだけですgetPoint()。これを行うには、これを置き換えることができます。

    v.x = THREE.Curve.Utils.interpolate(pt0.x, pt1.x, pt2.x, pt3.x, weight);
    v.y = THREE.Curve.Utils.interpolate(pt0.y, pt1.y, pt2.y, pt3.y, weight);
    v.z = THREE.Curve.Utils.interpolate(pt0.z, pt1.z, pt2.z, pt3.z, weight);

単純な線形補間を使用:

    v.copy( pt1 ).lerp( pt2, weight );

three.js r.60

于 2013-09-02T21:13:51.490 に答える