UNPKG

mat4.js

Version:

High-performance 4x4 matrix library with multi-precision support for 3D graphics development

299 lines (293 loc) 13.9 kB
/** * 高性能4x4矩阵实现(Float32Array) * 优化点: * - 使用32位浮点数,内存效率高,计算速度快 * - 针对GPU交互优化的内存布局 * - 最大化利用JavaScript引擎优化 * 适用场景:WebGL/WebGPU渲染、实时图形、性能优先场景 */ type mat4$3 = Float32Array & { __brand: 'mat4'; }; type vec3$3 = Float32Array & { length: 3; __brand: 'vec3'; }; type quat$3 = Float32Array & { length: 4; __brand: 'quat'; }; /** 获取临时矩阵(无锁操作) */ declare function tempMat4$3(): mat4$3; /** 批量获取临时矩阵(连续内存块,提升缓存效率) */ declare function tempMat4Bulk$3(count: number): mat4$3[]; /** 创建新矩阵 */ declare function create$3(): mat4$3; /** 复制矩阵(手动展开比循环快30%) */ declare function copy$3(out: mat4$3, a: mat4$3): mat4$3; /** 设置为单位矩阵 */ declare function identity$3(out: mat4$3): mat4$3; /** 矩阵乘法:out = a × b */ declare function multiply$3(out: mat4$3, a: mat4$3, b: mat4$3): mat4$3; /** 快速矩阵乘法(当a为单位矩阵时) */ declare function multiplyUnit$3(out: mat4$3, b: mat4$3): mat4$3; /** 平移变换(无矩阵乘法版本) */ declare function translate$3(out: mat4$3, a: mat4$3, v: vec3$3): mat4$3; /** 缩放变换(针对对角矩阵优化) */ declare function scale$3(out: mat4$3, a: mat4$3, v: vec3$3): mat4$3; /** 绕X轴旋转 */ declare function rotateX$3(out: mat4$3, a: mat4$3, rad: number): mat4$3; /** 绕Y轴旋转 */ declare function rotateY$3(out: mat4$3, a: mat4$3, rad: number): mat4$3; /** 绕Z轴旋转 */ declare function rotateZ$3(out: mat4$3, a: mat4$3, rad: number): mat4$3; /** 矩阵求逆(针对正交矩阵优化) */ declare function invert$3(out: mat4$3, a: mat4$3): mat4$3 | null; /** 正交矩阵专用转置(比通用转置快50%) */ declare function transposeOrthogonal$3(out: mat4$3, a: mat4$3): mat4$3; /** 矩阵转置 */ declare function transpose$3(out: mat4$3, a: mat4$3): mat4$3; /** 透视投影矩阵(无冗余计算) */ declare function perspective$3(out: mat4$3, fovy: number, aspect: number, near: number, far: number): mat4$3; /** 正交投影矩阵 */ declare function ortho$3(out: mat4$3, left: number, right: number, bottom: number, top: number, near: number, far: number): mat4$3; /** LookAt视图矩阵 */ declare function lookAt$3(out: mat4$3, eye: vec3$3, center: vec3$3, up: vec3$3): mat4$3; /** 变换3D点(包含平移) */ declare function transformPoint$3(out: vec3$3, m: mat4$3, v: vec3$3): vec3$3; /** 变换3D向量(不含平移) */ declare function transformVector$3(out: vec3$3, m: mat4$3, v: vec3$3): vec3$3; /** 批量矩阵乘法(连续内存访问优化) */ declare function multiplyBulk$3(out: mat4$3[], a: mat4$3[], b: mat4$3[], count: number): void; /** * 高精度4x4矩阵实现(Float64Array) * 优化点: * - 使用64位浮点数,适合高精度计算 * - 针对双精度运算的内存布局优化 * - 保留与Float32版本一致的优化策略 * 适用场景:科学计算、物理模拟、需要高精度的场景 */ type mat4$2 = Float64Array & { __brand: 'mat4'; }; type vec3$2 = Float64Array & { length: 3; __brand: 'vec3'; }; type quat$2 = Float64Array & { length: 4; __brand: 'quat'; }; /** 获取临时矩阵 */ declare function tempMat4$2(): mat4$2; /** 批量获取临时矩阵 */ declare function tempMat4Bulk$2(count: number): mat4$2[]; /** 创建新矩阵 */ declare function create$2(): mat4$2; /** 复制矩阵 */ declare function copy$2(out: mat4$2, a: mat4$2): mat4$2; /** 设置为单位矩阵 */ declare function identity$2(out: mat4$2): mat4$2; /** 矩阵乘法:out = a × b */ declare function multiply$2(out: mat4$2, a: mat4$2, b: mat4$2): mat4$2; /** 单位矩阵乘法优化 */ declare function multiplyUnit$2(out: mat4$2, b: mat4$2): mat4$2; /** 平移变换 */ declare function translate$2(out: mat4$2, a: mat4$2, v: vec3$2): mat4$2; /** 缩放变换 */ declare function scale$2(out: mat4$2, a: mat4$2, v: vec3$2): mat4$2; /** 绕X轴旋转 */ declare function rotateX$2(out: mat4$2, a: mat4$2, rad: number): mat4$2; /** 绕Y轴旋转 */ declare function rotateY$2(out: mat4$2, a: mat4$2, rad: number): mat4$2; /** 绕Z轴旋转 */ declare function rotateZ$2(out: mat4$2, a: mat4$2, rad: number): mat4$2; /** 矩阵求逆 */ declare function invert$2(out: mat4$2, a: mat4$2): mat4$2 | null; /** 正交矩阵专用转置 */ declare function transposeOrthogonal$2(out: mat4$2, a: mat4$2): mat4$2; /** 矩阵转置 */ declare function transpose$2(out: mat4$2, a: mat4$2): mat4$2; /** 透视投影矩阵 */ declare function perspective$2(out: mat4$2, fovy: number, aspect: number, near: number, far: number): mat4$2; /** 正交投影矩阵 */ declare function ortho$2(out: mat4$2, left: number, right: number, bottom: number, top: number, near: number, far: number): mat4$2; /** LookAt视图矩阵 */ declare function lookAt$2(out: mat4$2, eye: vec3$2, center: vec3$2, up: vec3$2): mat4$2; /** 变换3D点 */ declare function transformPoint$2(out: vec3$2, m: mat4$2, v: vec3$2): vec3$2; /** 变换3D向量 */ declare function transformVector$2(out: vec3$2, m: mat4$2, v: vec3$2): vec3$2; /** 批量矩阵乘法 */ declare function multiplyBulk$2(out: mat4$2[], a: mat4$2[], b: mat4$2[], count: number): void; /** * 兼容性4x4矩阵实现(普通数组) * 优化点: * - 使用标准JavaScript数组,兼容所有环境 * - 针对数组操作进行特定优化 * - 保持与TypedArray版本一致的接口 * 适用场景:老旧浏览器、无TypedArray支持的环境、简单计算场景 */ type mat4$1 = number[] & { __brand: 'mat4'; }; type vec3$1 = [number, number, number] & { __brand: 'vec3'; }; type quat$1 = [number, number, number, number] & { __brand: 'quat'; }; /** 获取临时矩阵 */ declare function tempMat4$1(): mat4$1; /** 批量获取临时矩阵 */ declare function tempMat4Bulk$1(count: number): mat4$1[]; /** 重置内存池(兼容性场景可能需要手动控制) */ declare function resetPool(): void; /** 创建新矩阵 */ declare function create$1(): mat4$1; /** 复制矩阵 */ declare function copy$1(out: mat4$1, a: mat4$1): mat4$1; /** 设置为单位矩阵 */ declare function identity$1(out: mat4$1): mat4$1; /** 矩阵乘法:out = a × b */ declare function multiply$1(out: mat4$1, a: mat4$1, b: mat4$1): mat4$1; /** 单位矩阵乘法优化 */ declare function multiplyUnit$1(out: mat4$1, b: mat4$1): mat4$1; /** 平移变换 */ declare function translate$1(out: mat4$1, a: mat4$1, v: vec3$1): mat4$1; /** 缩放变换 */ declare function scale$1(out: mat4$1, a: mat4$1, v: vec3$1): mat4$1; /** 绕X轴旋转 */ declare function rotateX$1(out: mat4$1, a: mat4$1, rad: number): mat4$1; /** 绕Y轴旋转 */ declare function rotateY$1(out: mat4$1, a: mat4$1, rad: number): mat4$1; /** 绕Z轴旋转 */ declare function rotateZ$1(out: mat4$1, a: mat4$1, rad: number): mat4$1; /** 矩阵求逆 */ declare function invert$1(out: mat4$1, a: mat4$1): mat4$1 | null; /** 正交矩阵专用转置 */ declare function transposeOrthogonal$1(out: mat4$1, a: mat4$1): mat4$1; /** 矩阵转置 */ declare function transpose$1(out: mat4$1, a: mat4$1): mat4$1; /** 透视投影矩阵 */ declare function perspective$1(out: mat4$1, fovy: number, aspect: number, near: number, far: number): mat4$1; /** 正交投影矩阵 */ declare function ortho$1(out: mat4$1, left: number, right: number, bottom: number, top: number, near: number, far: number): mat4$1; /** LookAt视图矩阵 */ declare function lookAt$1(out: mat4$1, eye: vec3$1, center: vec3$1, up: vec3$1): mat4$1; /** 变换3D点 */ declare function transformPoint$1(out: vec3$1, m: mat4$1, v: vec3$1): vec3$1; /** 变换3D向量 */ declare function transformVector$1(out: vec3$1, m: mat4$1, v: vec3$1): vec3$1; /** 批量矩阵乘法 */ declare function multiplyBulk$1(out: mat4$1[], a: mat4$1[], b: mat4$1[], count: number): void; /** * 高性能矩阵库入口文件 * 设计原则: * - Float32版本作为默认导出(性能最优,适合大多数场景) * - 其他版本通过后缀区分(64表示Float64,Array表示普通数组) * - 保持统一接口,便于版本切换和性能测试 */ type mat4 = mat4$3; type vec3 = vec3$3; type quat = quat$3; type mat464 = mat4$2; type vec364 = vec3$2; type quat64 = quat$2; type mat4Array = mat4$1; type vec3Array = vec3$1; type quatArray = quat$1; declare const EPSILON = 0.000001; declare const PI: number; declare const PI_2: number; declare const PI_HALF: number; declare const EPSILON64 = 1e-12; declare const PI64: number; declare const PI_2_64: number; declare const PI_HALF_64: number; declare const EPSILONArray = 0.000001; declare const PIArray: number; declare const PI_2_Array: number; declare const create: typeof create$3; declare const identity: typeof identity$3; declare const copy: typeof copy$3; declare const multiply: typeof multiply$3; declare const multiplyUnit: typeof multiplyUnit$3; declare const translate: typeof translate$3; declare const scale: typeof scale$3; declare const rotateX: typeof rotateX$3; declare const rotateY: typeof rotateY$3; declare const rotateZ: typeof rotateZ$3; declare const invert: typeof invert$3; declare const transpose: typeof transpose$3; declare const transposeOrthogonal: typeof transposeOrthogonal$3; declare const perspective: typeof perspective$3; declare const ortho: typeof ortho$3; declare const lookAt: typeof lookAt$3; declare const transformPoint: typeof transformPoint$3; declare const transformVector: typeof transformVector$3; declare const tempMat4: typeof tempMat4$3; declare const tempMat4Bulk: typeof tempMat4Bulk$3; declare const multiplyBulk: typeof multiplyBulk$3; declare const mul: typeof multiply$3; declare const rotX: typeof rotateX$3; declare const rotY: typeof rotateY$3; declare const rotZ: typeof rotateZ$3; declare const trans: typeof transpose$3; declare const mulBulk: typeof multiplyBulk$3; declare const create64: typeof create$2; declare const identity64: typeof identity$2; declare const copy64: typeof copy$2; declare const multiply64: typeof multiply$2; declare const multiplyUnit64: typeof multiplyUnit$2; declare const translate64: typeof translate$2; declare const scale64: typeof scale$2; declare const rotateX64: typeof rotateX$2; declare const rotateY64: typeof rotateY$2; declare const rotateZ64: typeof rotateZ$2; declare const invert64: typeof invert$2; declare const transpose64: typeof transpose$2; declare const transposeOrthogonal64: typeof transposeOrthogonal$2; declare const perspective64: typeof perspective$2; declare const ortho64: typeof ortho$2; declare const lookAt64: typeof lookAt$2; declare const transformPoint64: typeof transformPoint$2; declare const transformVector64: typeof transformVector$2; declare const tempMat464: typeof tempMat4$2; declare const tempMat4Bulk64: typeof tempMat4Bulk$2; declare const multiplyBulk64: typeof multiplyBulk$2; declare const mul64: typeof multiply$2; declare const rotX64: typeof rotateX$2; declare const rotY64: typeof rotateY$2; declare const rotZ64: typeof rotateZ$2; declare const trans64: typeof transpose$2; declare const mulBulk64: typeof multiplyBulk$2; declare const createArray: typeof create$1; declare const identityArray: typeof identity$1; declare const copyArray: typeof copy$1; declare const multiplyArray: typeof multiply$1; declare const multiplyUnitArray: typeof multiplyUnit$1; declare const translateArray: typeof translate$1; declare const scaleArray: typeof scale$1; declare const rotateXArray: typeof rotateX$1; declare const rotateYArray: typeof rotateY$1; declare const rotateZArray: typeof rotateZ$1; declare const invertArray: typeof invert$1; declare const transposeArray: typeof transpose$1; declare const transposeOrthogonalArray: typeof transposeOrthogonal$1; declare const perspectiveArray: typeof perspective$1; declare const orthoArray: typeof ortho$1; declare const lookAtArray: typeof lookAt$1; declare const transformPointArray: typeof transformPoint$1; declare const transformVectorArray: typeof transformVector$1; declare const tempMat4Array: typeof tempMat4$1; declare const tempMat4BulkArray: typeof tempMat4Bulk$1; declare const multiplyBulkArray: typeof multiplyBulk$1; declare const resetPoolArray: typeof resetPool; declare const mulArray: typeof multiply$1; declare const rotXArray: typeof rotateX$1; declare const rotYArray: typeof rotateY$1; declare const rotZArray: typeof rotateZ$1; declare const transArray: typeof transpose$1; declare const mulBulkArray: typeof multiplyBulk$1; export { EPSILON, EPSILON64, EPSILONArray, PI, PI64, PIArray, PI_2, PI_2_64, PI_2_Array, PI_HALF, PI_HALF_64, copy, copy64, copyArray, create, create64, createArray, identity, identity64, identityArray, invert, invert64, invertArray, lookAt, lookAt64, lookAtArray, type mat4, type mat464, type mat4Array, mul, mul64, mulArray, mulBulk, mulBulk64, mulBulkArray, multiply, multiply64, multiplyArray, multiplyBulk, multiplyBulk64, multiplyBulkArray, multiplyUnit, multiplyUnit64, multiplyUnitArray, ortho, ortho64, orthoArray, perspective, perspective64, perspectiveArray, type quat, type quat64, type quatArray, resetPoolArray, rotX, rotX64, rotXArray, rotY, rotY64, rotYArray, rotZ, rotZ64, rotZArray, rotateX, rotateX64, rotateXArray, rotateY, rotateY64, rotateYArray, rotateZ, rotateZ64, rotateZArray, scale, scale64, scaleArray, tempMat4, tempMat464, tempMat4Array, tempMat4Bulk, tempMat4Bulk64, tempMat4BulkArray, trans, trans64, transArray, transformPoint, transformPoint64, transformPointArray, transformVector, transformVector64, transformVectorArray, translate, translate64, translateArray, transpose, transpose64, transposeArray, transposeOrthogonal, transposeOrthogonal64, transposeOrthogonalArray, type vec3, type vec364, type vec3Array };