Create a smooth 3D spline curve from a series of points using the Catmull-Rom algorithm.

//Create a closed wavey loop
const curve = new THREE.CatmullRomCurve3([
new THREE.Vector3(-10, 0, 10),
new THREE.Vector3(-5, 5, 5),
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(5, -5, 5),
new THREE.Vector3(10, 0, 10)]);
const points = curve.getPoints(50);
const geometry = new THREE.BufferGeometry().setFromPoints(points);
const material = new THREE.LineBasicMaterial({
color: 0xff0000
});
// Create the final object to add to the scene
const curveObject = new THREE.Line(geometry, material);

Hierarchy (view full)

Constructors

  • This constructor creates a new CatmullRomCurve3.

    Parameters

    • Optionalpoints: Vector3[]

      An array of THREE.Vector3 | Vector3 points

    • Optionalclosed: boolean

      Whether the curve is closed. Default false

    • OptionalcurveType: CurveType

      Type of the curve. Default centripetal

    • Optionaltension: number

      Tension of the curve. Expects a Float. Default 0.5

    Returns CatmullRomCurve3

Properties

arcLengthDivisions: number

This value determines the amount of divisions when calculating the cumulative segment lengths of a Curve via .getLengths. To ensure precision when using methods like .getSpacedPoints, it is recommended to increase .arcLengthDivisions if the Curve is very large.

200

Expects a Integer

closed: boolean

The curve will loop back onto itself when this is true.

false

curveType: CurveType

Possible values are centripetal, chordal and catmullrom.

centripetal

isCatmullRomCurve3 = true

Read-only flag to check if a given object is of type CatmullRomCurve3.

This is a constant value

true

points: Vector3[]

The array of THREE.Vector3 | Vector3 points that define the curve.

It needs at least two entries.

[]

tension: number

When .curveType is catmullrom, defines catmullrom's tension.

Expects a Float

type: string

A Read-only string to check if this object type.

Sub-classes will update this value.

CatmullRomCurve3

Methods

  • Creates a clone of this instance.

    Returns this

  • Generates the Frenet Frames

    Parameters

    • segments: number

      Expects a Integer

    • Optionalclosed: boolean

    Returns {
        binormals: Vector3[];
        normals: Vector3[];
        tangents: Vector3[];
    }

    Requires a Curve definition in 3D space Used in geometries like THREE.TubeGeometry | TubeGeometry or THREE.ExtrudeGeometry | ExtrudeGeometry.

  • Copies another Curve object to this instance.

    Parameters

    Returns this

  • Copies the data from the given JSON object to this instance.

    Parameters

    Returns this

  • Get total Curve arc length.

    Returns number

  • Get list of cumulative segment lengths.

    Parameters

    • Optionaldivisions: number

      Expects a Integer

    Returns number[]

  • Returns a vector for a given position on the curve.

    Parameters

    • t: number

      A position on the curve. Must be in the range [ 0, 1 ]. Expects a Float

    • OptionaloptionalTarget: Vector3

      If specified, the result will be copied into this Vector, otherwise a new Vector will be created. Default new T.

    Returns Vector3

  • Returns a vector for a given position on the Curve according to the arc length.

    Parameters

    • u: number

      A position on the Curve according to the arc length. Must be in the range [ 0, 1 ]. Expects a Float

    • OptionaloptionalTarget: Vector3

      If specified, the result will be copied into this Vector, otherwise a new Vector will be created. Default new T.

    Returns Vector3

  • Returns a set of divisions +1 points using .getPoint | getPoint(t).

    Parameters

    • Optionaldivisions: number

      Number of pieces to divide the Curve into. Expects a Integer. Default 5

    Returns Vector3[]

  • Returns a set of divisions +1 equi-spaced points using .getPointAt | getPointAt(u).

    Parameters

    • Optionaldivisions: number

      Number of pieces to divide the Curve into. Expects a Integer. Default 5

    Returns Vector3[]

  • Returns a unit vector tangent at t

    Parameters

    • t: number

      A position on the curve. Must be in the range [ 0, 1 ]. Expects a Float

    • OptionaloptionalTarget: Vector3

      If specified, the result will be copied into this Vector, otherwise a new Vector will be created.

    Returns Vector3

    If the derived Curve does not implement its tangent derivation, two points a small delta apart will be used to find its gradient which seems to give a reasonable approximation.

  • Returns tangent at a point which is equidistant to the ends of the Curve from the point given in .getTangent.

    Parameters

    • u: number

      A position on the Curve according to the arc length. Must be in the range [ 0, 1 ]. Expects a Float

    • OptionaloptionalTarget: Vector3

      If specified, the result will be copied into this Vector, otherwise a new Vector will be created.

    Returns Vector3

  • Given u in the range [ 0, 1 ],

    Parameters

    • u: number

      Expects a Float

    • distance: number

      Expects a Float

    Returns number

    t also in the range [ 0, 1 ]. Expects a Float.

    u and t can then be used to give you points which are equidistant from the ends of the curve, using .getPoint.

  • Returns a JSON object representation of this instance.

    Returns CurveJSON

  • Update the cumulative segment distance cache

    Returns void

    The method must be called every time Curve parameters are changed If an updated Curve is part of a composed Curve like THREE.CurvePath | CurvePath, .updateArcLengths() must be called on the composed curve, too.