Package Exports
- @vicimpa/glm
- @vicimpa/glm/dist/index.amd.js
- @vicimpa/glm/dist/index.cjs
- @vicimpa/glm/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@vicimpa/glm) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@vicimpa/glm
A lightweight, class-based alternative to gl-matrix providing comprehensive vector, matrix, and quaternion math utilities for 2D/3D graphics, game development, and WebGL/WebGPU applications.
✨ Features
- 🎯 Object-Oriented Design: Clean, intuitive class-based API instead of functional programming
- 🚀 High Performance: Optimized for modern JavaScript engines with minimal overhead
- 📦 Zero Dependencies: Lightweight bundle with no external dependencies
- 🔧 TypeScript First: Full TypeScript support with comprehensive type definitions
- 🌐 Universal Support: Works in Node.js, browsers, and modern JavaScript environments
- 📱 Modern ES6+: Built with modern JavaScript features and iterators
🚀 Quick Start
Installation
npm install @vicimpa/glm
# or
yarn add @vicimpa/glm
# or
pnpm add @vicimpa/glmBasic Usage
import { Vec3, Mat4, Quat } from '@vicimpa/glm';
// Create vectors
const position = new Vec3(1, 2, 3);
const velocity = new Vec3(0.1, 0.2, 0.3);
// Vector operations
position.add(velocity);
const distance = position.length();
// Matrix transformations
const transform = new Mat4();
transform.translate(position);
transform.rotate(Quat.fromAxisAngle(Vec3.UP, Math.PI / 4));
// Quaternion rotations
const rotation = Quat.fromAxisAngle(Vec3.FORWARD, Math.PI / 2);📚 API Reference
Vectors
Vec2, Vec3, Vec4
const vec = new Vec3(1, 2, 3);
// Basic operations
vec.add(otherVec); // Addition
vec.sub(otherVec); // Subtraction
vec.mul(otherVec); // Element-wise multiplication
vec.scale(2.0); // Scalar multiplication
vec.normalize(); // Normalize to unit length
// Advanced operations
vec.rotateX(angle); // Rotate around X axis
vec.rotateY(angle); // Rotate around Y axis
vec.rotateZ(angle); // Rotate around Z axis
vec.rotateAround(angle, axis, center); // Rotate around arbitrary axis
vec.lerp(a, b, t); // Linear interpolation
vec.min(a, b); // Component-wise minimum
vec.max(a, b); // Component-wise maximum
vec.random(scale); // Generate random unit vector
// Matrix transformations (apply matrix to vector)
vec.applyMat2(mat2); // Apply 2x2 matrix transformation
vec.applyMat2d(mat2d); // Apply 2D transformation matrix (includes translation)
vec.applyMat3(mat3); // Apply 3x3 matrix transformation
vec.applyMat4(mat4); // Apply 4x4 matrix transformation
// Quaternion transformations
vec.applyQuat(quat); // Apply quaternion rotation
// Mathematical functions
const length = vec.length();
const distance = vec.distance(otherVec);
const dot = vec.dot(otherVec);
const cross = vec.cross(otherVec);
// Utility methods
vec.clone(); // Create a copy
vec.copy(otherVec); // Copy values
vec.set(1, 2, 3); // Set values
vec.equals(otherVec); // Compare with toleranceMat2, Mat3, Mat4
const mat = new Mat4();
// Transformations
mat.identity(); // Reset to identity
mat.translate(vec); // Apply translation
mat.rotate(quat); // Apply rotation
mat.scale(vec); // Apply scaling
mat.perspective(fov, aspect, near, far); // Perspective projection
// Matrix operations
mat.transpose(); // Transpose matrix
mat.invert(); // Invert matrix
mat.mul(otherMat); // Matrix multiplication
const determinant = mat.determinant();Quat (Quaternions)
const quat = new Quat();
// Creation methods
Quat.fromAxisAngle(axis, angle);
Quat.fromEuler(x, y, z, order);
Quat.fromRotationMatrix(mat);
// Operations
quat.normalize(); // Normalize quaternion
quat.mul(otherQuat); // Quaternion multiplication
quat.slerp(otherQuat, t); // Spherical interpolation
quat.invert(); // Inverse quaternion
// Conversion
const euler = quat.toEuler();
const matrix = quat.toRotationMatrix();Utility Functions
import { toRadian, toDegree, equals } from '@vicimpa/glm';
// Angle conversions
const radians = toRadian(90); // Convert degrees to radians
const degrees = toDegree(Math.PI); // Convert radians to degrees
// Comparison with tolerance
const isEqual = equals(a, b, 0.001); // Compare with custom tolerance🎮 Use Cases
- 🎨 2D/3D Graphics: WebGL, WebGPU, Canvas rendering
- 🎯 Game Development: Physics, animations, camera systems
- 🔧 CAD Applications: Geometric calculations, transformations
- 📊 Data Visualization: 3D charts, scientific computing
- 🎭 Animation Systems: Skeletal animation, keyframe interpolation
📊 Performance
The library is designed for high performance with:
- Minimal object allocation during operations
- Method chaining for efficient transformations
- Optimized mathematical operations for modern JavaScript engines
- Memory-efficient data structures
🔧 Development
Building from Source
git clone https://github.com/vicimpa/vicimpa-library.git
cd packages/glm
npm install
npm run buildRunning Tests
npm test📦 Bundle Sizes
- ES Module: ~45KB (minified + gzipped)
- CommonJS: ~45KB (minified + gzipped)
- AMD: ~45KB (minified + gzipped)
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
📄 License
This project is licensed under the GPL-3.0 License - see the LICENSE.md file for details.
🙏 Acknowledgments
- Inspired by the excellent gl-matrix library
- Built with modern TypeScript and Rollup for optimal developer experience
Made with ❤️ for the graphics and game development community