inmath 1.3.0

Games math library for D


To use this package, run the following command in your project's root directory:

Manual usage
Put the following dependency into your project's dependences section:

InMath

InMath, forked from gl3n, is a mathematics library for D providing math functions useful for multimedia software.

InMath provides all the math you need to work with OpenGL and Metal.

  • Linear algebra
    • Vectors
    • Matrices
      • Metal-compatible orthographic and projection matrix functions! (perspective01, orthographic01)
    • Quaternions
    • Rectangles
    • AABBs
    • Planes,
    • Frustrums
  • Interpolation
    • Linear interpolation (lerp)
    • Spherical linear interpolation (slerp)
    • Hermite interpolation
    • Catmull rom interpolation
    • Cubic interpolation
  • Dampening
    • Basic distance based dampening (dampen)
    • Dampened Harmonic Oscillator (smoothDamp)
  • Noise
    • OpenSimplex2
  • Colors
    • HSV<->RGB conversion
    • Hexstring to RGB(A) conversion
    • RGBA32<->RGBAF conversion
  • No unexpected side effects
    • No unexpected casts
    • Vector multiplication is not dot product.
    • InMath uses camelCase for the naming of things
    • InMath simplifies parts of gl3n by removing excessive use of aliases.
    • InMath is usable without the GC!

Installation

You can use inmath in your project via the dub package database.

Examples

vec4 v4 = vec4(1.0f, vec3(2.0f, 3.0f, 4.0f));
vec4 v4_2 = vec4(1.0f, vec4(1.0f, 2.0f, 3.0f, 4.0f).xyz); // "dynamic" swizzling with opDispatch
vec4 v4_3 = v4_2.xxyz; // opDispatch returns a static array which you can pass directly to the ctor of a vector!

vec3 v3 = my_3dvec.rgb;
vec3 foo = v4.xyzzzwzyyxw.xyz // not useful but possible!

mat4 m4fv = mat4.translation(-0.5f, -0.54f, 0.42f).rotateX(PI).rotateZ(PI/2);
glUniformMatrix4fv(location, 1, GL_TRUE, m4fv.ptr); // yes they are row major!

alias Matrix!(double, 4, 4) mat4d;
mat4d projection;
glGetDoublev(GL_PROJECTION_MATRIX, projection.ptr);

mat3 inv_view = view.rotation;
mat3 inv_view = mat3(view);

mat4 m4 = mat4(vec4(1.0f, 2.0f, 3.0f, 4.0f), 5.0f, 6.0f, 7.0f, 8.0f, vec4(...) ...); 
    void strafeLeft(float delta) { // A
        vec3 vcross = cross(up, forward).normalized;
        _position = _position + vcross.dot(delta);
    }

    void strafeRight(float delta) { // D
        vec3 vcross = cross(up, forward).normalized;
        _position = _position - vcross.dot(delta);
    }
Authors:
  • David Herberth
  • Inochi2D Project
Dependencies:
silly
Versions:
1.3.0 2024-Sep-11
1.2.1 2024-Jun-08
1.2.0 2024-Jun-08
1.1.1 2024-May-19
1.1.0 2024-May-16
Show all 16 versions
Download Stats:
  • 23 downloads today

  • 158 downloads this week

  • 688 downloads this month

  • 15170 downloads total

Score:
3.0
Short URL:
inmath.dub.pm