Engine API Reference - v2.22.0-beta.18
    Preparing search index...

    Class Frustum

    A frustum is a shape that defines the viewing space of a camera. It can be used to determine visibility of points and bounding spheres. Typically, you would not create a Frustum shape directly, but instead query CameraComponent#frustum.

    Index
    • Create a new Frustum instance.

      Returns Frustum

      const frustum = new Frustum();
      
    • Expands this frustum to also contain another frustum. The other frustum's 8 corner points are computed, and each of this frustum's planes is pushed outwards just far enough to contain them all. The result is a conservative convex volume that contains both frustums. This is useful for multi-view rendering such as stereo XR, where culling should keep objects visible in any view.

      Note: keeping each plane's orientation makes this correct for arbitrary frusta, including the asymmetric per-eye projections of XR headsets, where matching planes of the two eyes have different normals and a per-plane "outermost" selection would wrongly cut into the combined volume at a distance.

      Parameters

      • other: Frustum

        The other frustum to add.

      Returns Frustum

      Self for chaining.

    • Returns a clone of the specified frustum.

      Returns Frustum

      A duplicate frustum.

      const frustum = new Frustum();
      const clone = frustum.clone();
    • Tests whether an axis aligned bounding box intersects the frustum.

      The test is conservative in the same way the plane based sphere test is: a box lying just outside a frustum corner can be reported as intersecting. It is however always at least as tight as testing the box's bounding sphere, since the extent of a box along a plane normal never exceeds the radius of its bounding sphere.

      Unlike Frustum#containsSphere, a box completely inside the frustum is not distinguished from one merely intersecting it. Detecting that costs a comparison per plane and no caller needs it.

      Parameters

      Returns boolean

      True if the bounding box intersects or is inside the frustum, false if it is completely outside.

    • Tests whether a point is inside the frustum. Note that points lying in a frustum plane are considered to be outside the frustum.

      Parameters

      • point: Vec3

        The point to test.

      Returns boolean

      True if the point is inside the frustum, false otherwise.

    • Tests whether a bounding sphere intersects the frustum. If the sphere is outside the frustum, zero is returned. If the sphere intersects the frustum, 1 is returned. If the sphere is completely inside the frustum, 2 is returned. Note that a sphere touching a frustum plane from the outside is considered to be outside the frustum.

      Parameters

      Returns number

      0 if the bounding sphere is outside the frustum, 1 if it intersects the frustum and 2 if it is contained by the frustum.

    • Copies the contents of a source frustum to a destination frustum.

      Parameters

      • src: Frustum

        A source frustum to copy to the destination frustum.

      Returns Frustum

      Self for chaining.

      const src = entity.camera.frustum;
      const dst = new Frustum();
      dst.copy(src);
    • Returns one of the frustum's six planes. The planes are ordered right, left, bottom, top, far, near, and their normals point inwards.

      Parameters

      • index: number

        The index of the plane, from 0 to 5.

      • result: Plane

        The plane to write to.

      Returns Plane

      The supplied plane, containing the frustum plane.

      const plane = new Plane();
      entity.camera.frustum.getPlane(0, plane);
    • Updates the frustum shape based on the supplied 4x4 matrix.

      Parameters

      • matrix: Mat4

        The matrix describing the shape of the frustum.

      Returns void

      // Create a perspective projection matrix
      const projection = new Mat4();
      projection.setPerspective(45, 16 / 9, 1, 1000);

      // Create a frustum shape that is represented by the matrix
      const frustum = new Frustum();
      frustum.setFromMat4(projection);
    • Sets one of the frustum's six planes. The plane is normalized as it is stored, as the frustum's tests require unit length normals. The planes are ordered right, left, bottom, top, far, near, and their normals must point inwards.

      Parameters

      • index: number

        The index of the plane, from 0 to 5.

      • plane: Plane

        The plane to store.

      Returns Frustum

      Self for chaining.