2.4. Boost package for math

The MATH_BOOST module adds geometric types (AABB, AABR, Ray), angle conversion (degrees, radians), intersection tests, color space conversion (linear_to_SRGB, RGBA_TO_UCOLOR), and view/projection matrix construction (look_at_lh, perspective_rh).

All functions and symbols are in “math_boost” module, use require to get access to it.

require daslib/math_boost

Example:

require daslib/math_boost

    [export]
    def main() {
        print("degrees(PI) = {degrees(PI)}\n")
        print("radians(180) = {radians(180.0)}\n")
        var box = AABB(min = float3(0), max = float3(10))
        print("box = ({box.min}) - ({box.max})\n")
    }
    // output:
    // degrees(PI) = 180
    // radians(180) = 3.1415927
    // box = (0,0,0) - (10,10,10)

2.4.1. Structures

AABR

axis aligned bounding rectangle

Fields:
  • min : float2 - min coordinates

  • max : float2 - max coordinates

AABB

axis aligned bounding box

Fields:
  • min : float3 - min coordinates

  • max : float3 - max coordinates

Ray

ray (direction and origin)

Fields:
  • dir : float3 - direction

  • origin : float3 - origin

2.4.2. Angle conversions

degrees(f: float): float

convert radians to degrees

Arguments:
  • f : float

radians(f: float): float

convert degrees to radians

Arguments:
  • f : float

2.4.3. Intersections

2.4.3.1. is_intersecting

is_intersecting(a: AABB; b: AABB): bool

returns true if inputs intersect

Arguments:
is_intersecting(a: AABR; b: AABR): bool
is_intersecting(ray: Ray; aabb: AABB; Tmin: float = 0f; Tmax: float = FLT_MAX): bool

2.4.4. Matrices

look_at_lh(Eye: float3; At: float3; Up: float3): float4x4

left-handed (z forward) look at matrix with origin at Eye and target at At, and up vector Up.

Arguments:
  • Eye : float3

  • At : float3

  • Up : float3

look_at_rh(Eye: float3; At: float3; Up: float3): float4x4

right-handed (z towards viewer) look at matrix with origin at Eye and target at At, and up vector Up.

Arguments:
  • Eye : float3

  • At : float3

  • Up : float3

ortho_rh(left: float; right: float; bottom: float; top: float; zNear: float; zFar: float): float4x4

right handed (z towards viewer) orthographic (parallel) projection matrix

Arguments:
  • left : float

  • right : float

  • bottom : float

  • top : float

  • zNear : float

  • zFar : float

perspective_lh(fovy: float; aspect: float; zn: float; zf: float): float4x4

left-handed (z forward) perspective matrix

Arguments:
  • fovy : float

  • aspect : float

  • zn : float

  • zf : float

perspective_rh(fovy: float; aspect: float; zn: float; zf: float): float4x4

right-handed (z toward viewer) perspective matrix

Arguments:
  • fovy : float

  • aspect : float

  • zn : float

  • zf : float

perspective_rh_opengl(fovy: float; aspect: float; zn: float; zf: float): float4x4

right-handed (z toward viewer) opengl (z in [-1..1]) perspective matrix

Arguments:
  • fovy : float

  • aspect : float

  • zn : float

  • zf : float

planar_shadow(Light: float4; Plane: float4): float4x4

planar shadow projection matrix, i.e. all light shadows to be projected on a plane

Arguments:
  • Light : float4

  • Plane : float4

2.4.5. Plane

plane_dot(Plane: float4; Vec: float4): float

dot product of Plane and ‘Vec’

Arguments:
  • Plane : float4

  • Vec : float4

plane_from_point_normal(p: float3; n: float3): float4

construct plane from point p and normal n

Arguments:
  • p : float3

  • n : float3

plane_normalize(Plane: float4): float4

normalize Plane, length xyz will be 1.0 (or 0.0 for no plane)

Arguments:
  • Plane : float4

2.4.6. Color conversions

2.4.6.1. linear_to_SRGB

linear_to_SRGB(c: float3): float3

convert value from linear space to sRGB curve space

Arguments:
  • c : float3

linear_to_SRGB(x: float): float
linear_to_SRGB(c: float4): float4

2.4.7. Color packing and unpacking

2.4.7.1. RGBA_TO_UCOLOR

RGBA_TO_UCOLOR(xyzw: float4): uint

conversion from RGBA to ucolor. xyzw components are in [0,1] range

Arguments:
  • xyzw : float4

RGBA_TO_UCOLOR(x: float; y: float; z: float; w: float): uint

UCOLOR_TO_RGB(x: uint): float3

conversion from ucolor to RGB. x components are in [0,255] range. result is float3(x,y,z)

Arguments:
  • x : uint

UCOLOR_TO_RGBA(x: uint): float4

conversion from ucolor to RGBA. x components are in [0,255] range

Arguments:
  • x : uint