Three.js SplineCurve3 无圆边,或 LineCurve3 替代品

标签 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() 不是已实现。

我正在使用三个 r59。

最佳答案

编辑: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 );

三.js r.60

关于Three.js SplineCurve3 无圆边,或 LineCurve3 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18578249/

相关文章:

javascript - Three.js 使用正交相机从鼠标位置获取世界坐标

javascript - 如何计算透视相机从一个位置到另一个位置所需的时间?

javascript - Three.js - 如何按调用/加载的顺序加载和存储模型?

三.js OrbitControls。如何更新旋转相机?

javascript - 三个js Shader Material修改深度缓冲

javascript - 如何使立方体的内部颜色在 three.js 中可见?

three.js - 挤压形状的背面和正面采用不同的 Material

javascript - A 帧沿相机方向向前移动

javascript - WebGL/Three.js 一个复杂物体上的不同 Material (网格)

three.js - 与平面相交的任意网格(在 THREEJS 中)