Three.js SplineCurve3没有圆边或LineCurve3替换

时间:2013-09-02 17:28:23

标签: three.js

我想创建一个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 psuedocode)

发送粒子和路径
var t = 0;

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

但是我希望样条曲线不要在形状的边缘处创建软弯曲,因此对于粒子上方的形状,将在点(1, 0, 0)处以直角转动。

我知道这应该在LineCurve3或其他内容中实现,但对于除SplineCurve3以外的所有其他曲线,getPoint()未实现。

我正在使用THREE r59。

1 个答案:

答案 0 :(得分:3)

编辑:THREE.Curve.create()已被弃用。有关要遵循的新模式,请参阅this answer


要创建自己的曲线类,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