josh c7919a0928
Some checks failed
Run ReCI Build Test / Explore-Gitea-Actions (push) Failing after 23s
Build Docs With Doxygen / Explore-Gitea-Actions (push) Successful in 28s
Yee
2025-06-27 20:49:30 -05:00
2024-07-29 19:20:47 -04:00
2024-06-26 11:43:29 -04:00
Yee
2025-06-27 20:49:30 -05:00
Yee
2025-06-27 20:49:30 -05:00
2024-05-23 19:32:24 -04:00
2025-03-02 05:21:53 -05:00
2024-05-31 15:05:24 -04:00
2024-05-31 15:05:24 -04:00
Yee
2025-06-27 20:49:30 -05:00

Josh's 3D Math Library - J3ML

J3ML Logo

Yet Another C++ Math Standard

J3ML is a "Modern C++" library designed to provide comprehensive support for 3D mathematical operations commonly used in computer graphics, game development, physics simulations, and related fields. It offers a wide range of functionalities to simplify the implementation of complex mathematical operations in your projects.

Static Badge

Features

  • Vector Operations: Comprehensive support for 3D vector operations including addition, subtraction, scalar multiplication, dot product, cross product, normalization, and more.
  • Matrix Operations: Efficient implementation of 3x3 and 4x4 matrices with support for common operations such as multiplication, transpose, determinant calculation, and inverse calculation.
  • Quaternion Operations: Quaternion manipulation functions including conversion to/from axis-angle representation, quaternion multiplication, normalization, and interpolation (slerp).
  • Transformation Functions: Functions for transforming points, vectors, and normals using matrices and quaternions.
  • Geometric Types: Support for geometric types such as points, lines, rays, planes, spheres, axis-aligned bounding boxes (AABB), and oriented bounding boxes (OBB).
  • Algorithms: Implementation of various algorithms including Gilbert-Johnson-Keerthi (GJK) algorithm for collision detection, random number generator, and more.
  • Utility Functions: Additional utilities such as conversion between degrees and radians, random number generation, and common constants.

Coming Soon

  • SIMD: (Single-instruction, multiple-data) utilizes a vectorized instruction set to compute operations on multiple values at once. This is particularly useful in matrix maths.
  • LUTs: Compute Lookup-tables for common operations, and bake them into your program via constexpr. (Sin, Cos, Tan, Sqrt, FastInverseSqrt)

Installation

We support integration via CMake Package Manager (CPM). It's quite clean and flexible. It's a single CMake script too.

Here's what we recommend:

Install CPM.cmake to a cmake directory in your project root, and add the lines below into your CMakeLists.txt

To integrate the package manager:

include("cmake/CPM.cmake")

To automatically download and build J3ML version 3.4.5 (Check releases for new versions!):

CPMAddPackage(
        NAME J3ML
        URL https::/git.redacted.cc/josh/J3ML/archive/3.4.5.zip
)

Then you should be able to link J3ML to your project like any other library:

target_include_directories(MyProgramOrLib PUBLIC ${J3ML_SOURCE_DIR}/include)
###
target_link_libraries(MyProgramOrLib PUBLIC J3ML)

Usage Samples

2D Vector Operations

#include <J3ML/LinearAlgebra.hpp>

Vector2 position {10.f, 10.f};
Vector2 velocity {5.f, 1.5f};
float step = 1.f/60.f;

void doStep() {
    position = position + (velocity * step);
    velocity = velocity.Lerp(Vector2::Zero, step);
    float speed = velocity.Length();
}

Matrix3x3 and Rotation Types

#include <j3ml/LinearAlgebra.h>

Matrix3x3 mRotation = Matrix3x3::RotateX(Math::PiOverTwo);
Quaternion qRotation(mRotation); // Convert to Quaternion
AxisAngle aRotation(qRotation); // Convert to AxisAngle
EulerAngleXYZ eRotation(aRotation); // Convert to Euler Angle (XYZ)

For more detailed usage instructions and examples, please refer to the documentation.

Documentation

Documentation is automatically generated from latest commit and is hosted at https://doc.redacted.cc/j3ml .

Contributing

Contributions to J3ML are welcome! If you find a bug, have a feature request, or would like to contribute code, please submit an issue or pull request to the repository.

License

J3ML is licensed under the Public Domain. See the LICENSE file for details.

Acknowledgements

J3ML is developed and maintained by Joshua O'Leary from Redacted Software and contributors. Special thanks to William J Tomasine II.

bump :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3

Description
Josh's 3D Math Library.
Readme 2.1 MiB
3.4.6 Latest
2025-03-16 21:02:27 -04:00
Languages
C++ 99.7%
CMake 0.3%