Skip to content

@web-engine-dev/math


@web-engine-dev/math / BatchMath

Variable: BatchMath ​

const BatchMath: object

High-performance batch math operations for transforming multiple vectors at once.

These functions operate on packed Float32Arrays to minimize allocations and maximize cache efficiency. Ideal for particle systems, mesh processing, and any scenario involving many similar transformations.

Type Declaration ​

addScalarVec3Array() ​

addScalarVec3Array(source, scalar, out, count?): void

Adds a scalar to all components in a Vec3 array.

Parameters ​

source ​

Float32Array

Source array with packed Vec3s

scalar ​

number

Scalar to add

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

addVec2Array() ​

addVec2Array(a, b, out, count?): void

Adds two Vec2 arrays element-wise. Optimized with loop unrolling for SIMD auto-vectorization.

Parameters ​

a ​

Float32Array

First array with packed Vec2s

b ​

Float32Array

Second array with packed Vec2s

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

addVec3Array() ​

addVec3Array(a, b, out, count?): void

Adds two Vec3 arrays with loop unrolling for SIMD optimization.

Parameters ​

a ​

Float32Array

First array with packed Vec3s

b ​

Float32Array

Second array with packed Vec3s

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

computeMVP() ​

computeMVP(model, view, projection, out): Mat4

Computes MVP matrix (Model * View * Projection) efficiently. Common operation for rendering - optimized to minimize temporaries.

Parameters ​

model ​

Mat4

Model matrix

view ​

Mat4

View matrix

projection ​

Mat4

Projection matrix

out ​

Mat4

Output MVP matrix

Returns ​

Mat4

out for chaining

computeMVPBatch() ​

computeMVPBatch(models, viewProjection, out, count?): void

Computes MVP matrices for multiple objects efficiently. Batch version that shares view-projection computation.

Parameters ​

models ​

Float32Array

Array of model matrices (packed Float32Array, 16 floats each)

viewProjection ​

Mat4

Pre-computed view-projection matrix

out ​

Float32Array

Output array for MVP matrices

count? ​

number

Number of matrices

Returns ​

void

crossVec3Array() ​

crossVec3Array(a, b, out, count?): void

Computes cross products between corresponding Vec3s in two arrays.

Parameters ​

a ​

Float32Array

First array with packed Vec3s

b ​

Float32Array

Second array with packed Vec3s

out ​

Float32Array

Output array with packed Vec3s

count? ​

number

Number of vectors

Returns ​

void

dotVec2Array() ​

dotVec2Array(a, b, out, count?): void

Computes dot products between corresponding Vec2s.

Parameters ​

a ​

Float32Array

First array with packed Vec2s

b ​

Float32Array

Second array with packed Vec2s

out ​

Float32Array

Output array for dot products

count? ​

number

Number of vectors

Returns ​

void

dotVec3Array() ​

dotVec3Array(a, b, out, count?): void

Computes dot products between corresponding Vec3s in two arrays.

Parameters ​

a ​

Float32Array

First array with packed Vec3s

b ​

Float32Array

Second array with packed Vec3s

out ​

Float32Array

Output array for dot products (length = count)

count? ​

number

Number of vectors

Returns ​

void

invertMat4Array() ​

invertMat4Array(matrices, out, count?): boolean

Inverts an array of Mat4s.

Parameters ​

matrices ​

Float32Array

Source array with packed Mat4s

out ​

Float32Array

Output array

count? ​

number

Number of matrices

Returns ​

boolean

true if all matrices were invertible, false if any failed

lengthSqVec3Array() ​

lengthSqVec3Array(source, out, count?): void

Computes squared lengths for all Vec3s in an array. Useful for distance comparisons without sqrt.

Parameters ​

source ​

Float32Array

Source array with packed Vec3s

out ​

Float32Array

Output array for squared lengths

count? ​

number

Number of vectors

Returns ​

void

lengthVec3Array() ​

lengthVec3Array(source, out, count?): void

Computes lengths for all Vec3s in an array.

Parameters ​

source ​

Float32Array

Source array with packed Vec3s

out ​

Float32Array

Output array for lengths

count? ​

number

Number of vectors

Returns ​

void

lerpVec2Array() ​

lerpVec2Array(a, b, t, out, count?): void

Linear interpolation between two Vec2 arrays.

Parameters ​

a ​

Float32Array

Start array with packed Vec2s

b ​

Float32Array

End array with packed Vec2s

t ​

number

Interpolation factor

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

lerpVec3Array() ​

lerpVec3Array(a, b, t, out, count?, aOffset?, bOffset?, outOffset?): void

Linear interpolation between two Vec3 arrays.

Parameters ​

a ​

Float32Array

Start array with packed Vec3s

b ​

Float32Array

End array with packed Vec3s

t ​

number

Interpolation factor (0 = a, 1 = b)

out ​

Float32Array

Output array

count? ​

number

Number of vectors to interpolate

aOffset? ​

number = 0

Starting index in a array

bOffset? ​

number = 0

Starting index in b array

outOffset? ​

number = 0

Starting index in output array

Returns ​

void

multiplyMat4Array() ​

multiplyMat4Array(matrices, multiplier, out, count?): void

Multiplies an array of Mat4s by a single Mat4. Useful for applying a parent transform to many child transforms.

Parameters ​

matrices ​

Float32Array

Source array with packed Mat4s (16 floats each)

multiplier ​

Mat4

Matrix to multiply each by

out ​

Float32Array

Output array

count? ​

number

Number of matrices

Returns ​

void

multiplyQuatArray() ​

multiplyQuatArray(a, b, out, count?): void

Multiplies corresponding quaternions in two arrays.

Parameters ​

a ​

Float32Array

First array with packed quaternions

b ​

Float32Array

Second array with packed quaternions

out ​

Float32Array

Output array

count? ​

number

Number of quaternions

Returns ​

void

mulVec3Array() ​

mulVec3Array(a, b, out, count?): void

Multiplies Vec3 arrays element-wise (component-wise multiplication).

Parameters ​

a ​

Float32Array

b ​

Float32Array

out ​

Float32Array

count? ​

number

Returns ​

void

normalizeQuatArray() ​

normalizeQuatArray(source, out, count?): void

Normalizes an array of quaternions.

Parameters ​

source ​

Float32Array

Source array with packed quaternions

out ​

Float32Array

Output array

count? ​

number

Number of quaternions

Returns ​

void

normalizeVec2Array() ​

normalizeVec2Array(source, out, count?): void

Normalizes all Vec2s in an array.

Parameters ​

source ​

Float32Array

Source array with packed Vec2s

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

normalizeVec3Array() ​

normalizeVec3Array(source, out, count?): void

Normalizes all Vec3s in an array.

Parameters ​

source ​

Float32Array

Source array with packed Vec3s

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

normalizeVec3Strided() ​

normalizeVec3Strided(source, out, stride, offset?, count?): void

Normalizes Vec3s in a strided buffer. Useful for re-normalizing normals after transformation.

Parameters ​

source ​

Float32Array

Source buffer

out ​

Float32Array

Output buffer

stride ​

number

Number of floats between consecutive Vec3s

offset? ​

number = 0

Offset to first Vec3

count? ​

number

Number of Vec3s

Returns ​

void

packQuatArray() ​

packQuatArray(quats, out?): Float32Array

Packs an array of Quat objects into a Float32Array.

Parameters ​

quats ​

readonly Quat[]

out? ​

Float32Array<ArrayBufferLike>

Returns ​

Float32Array

packVec2Array() ​

packVec2Array(vectors, out?): Float32Array

Packs an array of Vec2 objects into a Float32Array.

Parameters ​

vectors ​

readonly object[]

out? ​

Float32Array<ArrayBufferLike>

Returns ​

Float32Array

packVec3Array() ​

packVec3Array(vectors, out?): Float32Array

Packs an array of Vec3 objects into a Float32Array.

Parameters ​

vectors ​

readonly Vec3[]

Array of Vec3 objects

out? ​

Float32Array<ArrayBufferLike>

Optional pre-allocated output array

Returns ​

Float32Array

Packed Float32Array

packVec4Array() ​

packVec4Array(vectors, out?): Float32Array

Packs an array of Vec4 objects into a Float32Array.

Parameters ​

vectors ​

readonly Vec4[]

out? ​

Float32Array<ArrayBufferLike>

Returns ​

Float32Array

rotateVec3Array() ​

rotateVec3Array(source, quat, out, count?, sourceOffset?, outOffset?): void

Rotates an array of Vec3s by a quaternion.

Parameters ​

source ​

Float32Array

Source array with packed Vec3s

quat ​

Quat

Rotation quaternion

out ​

Float32Array

Output array

count? ​

number

Number of vectors to transform

sourceOffset? ​

number = 0

Starting index in source array

outOffset? ​

number = 0

Starting index in output array

Returns ​

void

scaleVec2Array() ​

scaleVec2Array(source, scalar, out, count?): void

Scales all Vec2s in an array.

Parameters ​

source ​

Float32Array

Source array with packed Vec2s

scalar ​

number

Scale factor

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

scaleVec3Array() ​

scaleVec3Array(source, scalar, out, count?): void

Scales all Vec3s in an array by a scalar.

Parameters ​

source ​

Float32Array

Source array with packed Vec3s

scalar ​

number

Scale factor

out ​

Float32Array

Output array

count? ​

number

Number of vectors

Returns ​

void

slerpQuatArray() ​

slerpQuatArray(a, b, t, out, count?): void

Spherical linear interpolation between two quaternion arrays.

Parameters ​

a ​

Float32Array

Start array with packed quaternions (x,y,z,w format)

b ​

Float32Array

End array with packed quaternions

t ​

number

Interpolation factor (0 = a, 1 = b)

out ​

Float32Array

Output array

count? ​

number

Number of quaternions

Returns ​

void

slerpQuatArrayFast() ​

slerpQuatArrayFast(a, b, t, out, count?): void

Fast slerp for normalized quaternions with shortcut for small angles. When quaternions are nearly parallel, uses linear interpolation. When exactly opposite, returns a stable interpolation path.

Parameters ​

a ​

Float32Array

Start quaternion array (packed)

b ​

Float32Array

End quaternion array (packed)

t ​

number

Interpolation factor

out ​

Float32Array

Output array

count? ​

number

Number of quaternions

Returns ​

void

subVec3Array() ​

subVec3Array(a, b, out, count?): void

Subtracts two Vec3 arrays with loop unrolling.

Parameters ​

a ​

Float32Array

b ​

Float32Array

out ​

Float32Array

count? ​

number

Returns ​

void

transformVec2Array() ​

transformVec2Array(source, m00, m01, m10, m11, tx, ty, out, count?): void

Transforms an array of Vec2s by a 3x3 transformation (treating as 2D homogeneous). Uses the upper 2x2 for rotation/scale and the translation from column 3. This is optimized for SIMD auto-vectorization with unrolled loops.

Parameters ​

source ​

Float32Array

Source array with packed Vec2s

m00 ​

number

Matrix element [0,0]

m01 ​

number

Matrix element [0,1]

m10 ​

number

Matrix element [1,0]

m11 ​

number

Matrix element [1,1]

tx ​

number

Translation X

ty ​

number

Translation Y

out ​

Float32Array

Output array

count? ​

number

Number of vectors to transform

Returns ​

void

transformVec3DirectionArray() ​

transformVec3DirectionArray(source, matrix, out, count?, sourceOffset?, outOffset?): void

Transforms an array of Vec3s by a Mat4 as directions (w=0, no translation).

Parameters ​

source ​

Float32Array

Source array with packed Vec3s

matrix ​

Mat4

Transformation matrix

out ​

Float32Array

Output array (can be same as source for in-place)

count? ​

number

Number of vectors to transform

sourceOffset? ​

number = 0

Starting index in source array

outOffset? ​

number = 0

Starting index in output array

Returns ​

void

transformVec3DirectionStrided() ​

transformVec3DirectionStrided(source, matrix, out, stride, offset?, count?): void

Transforms Vec3 directions (normals) in a strided buffer. Ignores translation component.

Parameters ​

source ​

Float32Array

Source buffer

matrix ​

Mat4

Transformation matrix (should use normal matrix for correct lighting)

out ​

Float32Array

Output buffer

stride ​

number

Number of floats between consecutive Vec3s

offset? ​

number = 0

Offset to first Vec3

count? ​

number

Number of Vec3s

Returns ​

void

transformVec3PointArray() ​

transformVec3PointArray(source, matrix, out, count?, sourceOffset?, outOffset?): void

Transforms an array of Vec3s (packed as x,y,z,x,y,z,...) by a Mat4. Treats vectors as points (w=1, with perspective divide).

Parameters ​

source ​

Float32Array

Source array with packed Vec3s (length must be multiple of 3)

matrix ​

Mat4

Transformation matrix

out ​

Float32Array

Output array (can be same as source for in-place)

count? ​

number

Number of vectors to transform (defaults to source.length / 3)

sourceOffset? ​

number = 0

Starting index in source array

outOffset? ​

number = 0

Starting index in output array

Returns ​

void

transformVec3Strided() ​

transformVec3Strided(source, matrix, out, stride, offset?, count?): void

Transforms Vec3s in a strided buffer (e.g., interleaved vertex data). Useful for transforming positions in vertex buffers that also contain normals, UVs, etc.

Parameters ​

source ​

Float32Array

Source buffer with interleaved data

matrix ​

Mat4

Transformation matrix

out ​

Float32Array

Output buffer (can be same as source)

stride ​

number

Number of floats between consecutive Vec3s

offset? ​

number = 0

Offset to first Vec3 in the buffer

count? ​

number

Number of Vec3s to transform

Returns ​

void

transformVec4Array() ​

transformVec4Array(source, matrix, out, count?, sourceOffset?, outOffset?): void

Transforms an array of Vec4s by a Mat4.

Parameters ​

source ​

Float32Array

Source array with packed Vec4s

matrix ​

Mat4

Transformation matrix

out ​

Float32Array

Output array

count? ​

number

Number of vectors to transform

sourceOffset? ​

number = 0

Starting index in source array

outOffset? ​

number = 0

Starting index in output array

Returns ​

void

unpackQuatArray() ​

unpackQuatArray(packed, count?): Quat[]

Unpacks a Float32Array into an array of Quat objects.

Parameters ​

packed ​

Float32Array

count? ​

number

Returns ​

Quat[]

unpackVec2Array() ​

unpackVec2Array(packed, count?): object[]

Unpacks a Float32Array into an array of Vec2-like objects.

Parameters ​

packed ​

Float32Array

count? ​

number

Returns ​

object[]

unpackVec3Array() ​

unpackVec3Array(packed, count?): Vec3[]

Unpacks a Float32Array into an array of Vec3 objects.

Parameters ​

packed ​

Float32Array

Packed Float32Array

count? ​

number

Number of vectors to unpack

Returns ​

Vec3[]

Array of Vec3 objects

unpackVec4Array() ​

unpackVec4Array(packed, count?): Vec4[]

Unpacks a Float32Array into an array of Vec4 objects.

Parameters ​

packed ​

Float32Array

count? ​

number

Returns ​

Vec4[]

Examples ​

ts
// Transform 1000 vertices by a matrix
const vertices = new Float32Array(3000); // 1000 Vec3s packed as [x,y,z,x,y,z,...]
const matrix = Mat4.rotationY(Math.PI / 4);
BatchMath.transformVec3Array(vertices, matrix, vertices); // In-place transform
ts
// Batch lerp for animation blending
const current = new Float32Array(300);
const target = new Float32Array(300);
const result = new Float32Array(300);
BatchMath.lerpVec3Array(current, target, 0.5, result);

Proprietary software. All rights reserved.