Raven Engine v0.1
Loading...
Searching...
No Matches
Crux Namespace Reference

Namespaces

namespace  Detail
namespace  Entropy
namespace  Hash

Classes

struct  Matrix
 Generic fixed-size matrix container. More...
class  Random
 Static wrapper around RandomEngine for convenience. More...
class  RandomEngine
 High-performance 64-bit state, 32-bit output PRNG based on PCG32. More...
struct  Vector
 General N-dimensional fixed-size vector container. More...
struct  Vector< T, 2 >
 2-dimensional vector. More...
struct  Vector< T, 3 >
 3-dimensional vector. More...
struct  Vector< T, 4 >
 4-dimensional vector. More...

Typedefs

using mat2 = Matrix<float, 2, 2>
 2x2 single-precision floating-point matrix.
using mat3 = Matrix<float, 3, 3>
 3x3 single-precision floating-point matrix.
using mat4 = Matrix<float, 4, 4>
 4x4 single-precision floating-point matrix.
using dmat2 = Matrix<double, 2, 2>
 2x2 double-precision floating-point matrix.
using dmat3 = Matrix<double, 3, 3>
 3x3 double-precision floating-point matrix.
using dmat4 = Matrix<double, 4, 4>
 4x4 double-precision floating-point matrix.
using imat2 = Matrix<int, 2, 2>
 2x2 integer matrix.
using imat3 = Matrix<int, 3, 3>
 3x3 integer matrix.
using imat4 = Matrix<int, 4, 4>
 4x4 integer matrix.
using ivec2 = Vector<int, 2>
using ivec3 = Vector<int, 3>
 2D integer vector
using ivec4 = Vector<int, 4>
 3D integer vector
using uvec2 = Vector<unsigned, 2>
 4D integer vector
using uvec3 = Vector<unsigned, 3>
 2D unsigned vector
using uvec4 = Vector<unsigned, 4>
 3D unsigned vector
using vec2 = Vector<float, 2>
 4D unsigned vector
using vec3 = Vector<float, 3>
 2D float vector
using vec4 = Vector<float, 4>
 3D float vector
using dvec2 = Vector<double, 2>
 4D float vector
using dvec3 = Vector<double, 3>
 2D double vector
using dvec4 = Vector<double, 4>
 3D double vector

Functions

template<typename T>
constexpr T Lerp (T a, T b, float t)
 Linear interpolation between a and b by factor t.
template<typename T>
constexpr T Min (T a, T b)
 Return the minimum of two values.
template<typename T>
constexpr T Max (T a, T b)
 Return the maximum of two values.
template<typename T>
constexpr T Clamp (T value, T min, T max)
 Clamp a value between a minimum and maximum.
template<typename T>
constexpr T Saturate (T value)
 Clamp a value to the [0,1] range.
template<typename T>
constexpr T Sign (T value)
 Signum function: returns -1, 0, or +1.
template<typename T>
constexpr T Abs (T value)
 Absolute value.
template<typename T>
constexpr T Floor (T value)
 Floor function for floating-point values.
template<typename T>
constexpr T Ceil (T value)
 Ceiling function for floating-point values.
template<typename T>
constexpr T Fract (T value)
 Fractional part of a value.
template<typename T>
constexpr T Square (T value)
 Square of a value.
template<typename T>
constexpr T Cube (T value)
 Cube of a value.
constexpr float Smoothstep (float edge0, float edge1, float x)
 Smoothstep interpolation between edge0 and edge1.
constexpr float CTInverseSqrt (float x)
 Fast compile-time inverse square root (single Newton step).
constexpr float CTSqrt (const float x)
 Fast compile-time square root using bit manipulation.
float InverseSqrt (const float x)
 Inverse square root using hardware rsqrt.
float Sqrt (const float x)
 Standard square root using hardware sqrt.
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Rows, Cols > operator+ (const Matrix< T, Rows, Cols > &a, const Matrix< T, Rows, Cols > &b)
 Adds two matrices element-wise.
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Rows, Cols > operator- (const Matrix< T, Rows, Cols > &a, const Matrix< T, Rows, Cols > &b)
 Subtracts two matrices element-wise.
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Rows, Cols > operator* (const Matrix< T, Rows, Cols > &a, const T &scalar)
 Multiplies each matrix element by a scalar.
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Rows, Cols > operator* (const T &scalar, const Matrix< T, Rows, Cols > &a)
 Multiplies each matrix element by a scalar.
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Rows, Cols > operator/ (const Matrix< T, Rows, Cols > &a, const T &scalar)
 Divides each matrix element by a scalar.
template<typename T, size_t RowsA, size_t ColsA, size_t ColsB>
constexpr Matrix< T, RowsA, ColsB > operator* (const Matrix< T, RowsA, ColsA > &a, const Matrix< T, ColsA, ColsB > &b)
 Performs matrix multiplication (dot product).
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Rows, Cols > Zero ()
 Generates a zero matrix of size Rows x Cols.
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Cols, Rows > Transpose (const Matrix< T, Rows, Cols > &a)
 Transposes the given matrix (rows become columns).
template<typename T>
constexpr Matrix< T, 4, 4 > RotateX (T angle)
 Creates a 4x4 rotation matrix around the X axis.
template<typename T>
constexpr Matrix< T, 4, 4 > RotateY (T angle)
 Creates a 4x4 rotation matrix around the Y axis.
template<typename T>
constexpr Matrix< T, 4, 4 > RotateZ (T angle)
 Creates a 4x4 rotation matrix around the Z axis.
template<typename T>
constexpr Matrix< T, 2, 2 > Scale (T tx, T ty)
 Constructs a 2D scaling matrix.
template<typename T>
constexpr Matrix< T, 4, 4 > Scale (T sx, T sy, T sz)
 Constructs a 4x4 3D non-uniform scaling matrix.
template<typename T>
constexpr Matrix< T, 4, 4 > Scale (const Vector< T, 3 > &s)
 Constructs a 4x4 3D non-uniform scaling matrix from a vector.
template<typename T, size_t N>
constexpr Matrix< T, N, N > Scale (T s)
 Constructs a uniform scaling matrix of size N x N.
template<typename T>
constexpr Matrix< T, 3, 3 > Translate (T tx, T ty)
 Constructs a 3x3 2D translation matrix.
constexpr Matrix< float, 4, 4 > Translate (float tx, float ty, float tz)
 Constructs a 4x4 3D translation matrix.
template<typename T>
constexpr Matrix< T, 4, 4 > Translate (const Matrix< T, 4, 4 > &m, const Vector< T, 3 > &v)
 Applies a 3D translation to a 4x4 matrix using a vector.
template<typename T, size_t N>
constexpr Matrix< T, N, N > Identity ()
 Generates an identity matrix of size NxN.
template<typename T, size_t N>
constexpr T Trace (const Matrix< T, N, N > &a)
 Computes the trace (sum of diagonal elements) of a square matrix.
template<typename T, size_t Rows, size_t Cols>
constexpr T Norm (const Matrix< T, Rows, Cols > &a)
 Computes the Frobenius norm of the matrix.
template<typename T, size_t Rows, size_t Cols>
constexpr Matrix< T, Rows, Cols > Normalize (const Matrix< T, Rows, Cols > &a)
 Normalizes the matrix by dividing each element by the Frobenius norm.
template<typename T>
constexpr T Determinant (const Matrix< T, 2, 2 > &a)
 Computes the determinant of a 2x2 matrix.
template<typename T>
constexpr T Determinant (const Matrix< T, 3, 3 > &a)
 Computes the determinant of a 3x3 matrix.
template<typename T>
constexpr T Determinant (const Matrix< T, 4, 4 > &a)
 Computes the determinant of a 4x4 matrix.
template<typename T>
constexpr Matrix< T, 2, 2 > Inverse (const Matrix< T, 2, 2 > &a)
 Computes the inverse of a 2x2 matrix.
template<typename T>
constexpr Matrix< T, 3, 3 > Inverse (const Matrix< T, 3, 3 > &a)
 Computes the inverse of a 3x3 matrix.
template<typename T>
constexpr Matrix< T, 4, 4 > Inverse (const Matrix< T, 4, 4 > &a)
 Computes the inverse of a 4x4 matrix.
template<typename T>
constexpr Matrix< T, 3, 3 > ToMat3 (const Matrix< T, 4, 4 > &m)
 Converts a 4x4 Matrix into a 3x3 Matrix.
template<typename T>
constexpr Matrix< T, 4, 4 > LookAt (const Vector< T, 3 > &position, const Vector< T, 3 > &target, const Vector< T, 3 > &up)
 Creates a look-at view matrix using position, target, and up vectors.
constexpr float Radians (float degrees)
 Convert degrees to radians.
constexpr Vector< float, 3 > Radians (Vector< float, 3 > vector)
 Convert a Vector3s components from degrees to radians.
constexpr float Degrees (float radians)
 Convert radians to degrees.
constexpr Vector< float, 3 > Degrees (Vector< float, 3 > vector)
 Convert a Vector3s components from radians to degrees.
template<Detail::PrecisionMode Mode = Detail::PrecisionMode::Standard>
float Sin (float radians)
 Computes the sine of an angle in radians using a fast polynomial approximation.
template<Detail::PrecisionMode Mode = Detail::PrecisionMode::Standard>
float Cos (float radians)
 Computes the cosine of an angle in radians using a fast polynomial approximation.
template<typename T, size_t N>
constexpr Vector< T, N > operator+ (const Vector< T, N > &a, const Vector< T, N > &b)
 Component-wise addition of two vectors.
template<typename T, size_t N>
constexpr Vector< T, N > operator- (const Vector< T, N > &a, const Vector< T, N > &b)
 Component-wise subtraction of two vectors.
template<typename T, size_t N>
constexpr Vector< T, N > operator* (const Vector< T, N > &a, const T &scalar)
 Scalar multiplication (vector * scalar).
template<typename T, size_t N>
constexpr Vector< T, N > operator* (const T &scalar, const Vector< T, N > &a)
 Scalar multiplication (scalar * vector).
template<typename T, size_t N>
constexpr Vector< T, N > operator/ (const Vector< T, N > &a, const T &scalar)
 Scalar division of a vector.
template<typename T, size_t N>
constexpr Vector< T, N > & operator+= (Vector< T, N > &a, const Vector< T, N > &b)
 Compound addition assignment (vector += vector).
template<typename T, size_t N>
constexpr Vector< T, N > & operator-= (Vector< T, N > &a, const Vector< T, N > &b)
 Compound subtraction assignment (vector -= vector).
template<typename T, size_t N>
constexpr Vector< T, N > & operator*= (Vector< T, N > &a, const T &scalar)
 Compound scalar multiplication assignment (vector *= scalar).
template<typename T, size_t N>
constexpr Vector< T, N > & operator/= (Vector< T, N > &a, const T &scalar)
 Compound scalar division assignment (vector /= scalar).
template<typename T, size_t N>
constexpr T Dot (const Vector< T, N > &a, const Vector< T, N > &b)
 Dot product of two vectors.
template<typename T>
constexpr Vector< T, 3 > Cross (const Vector< T, 3 > &a, const Vector< T, 3 > &b)
 Cross product for 3D vectors.
template<typename T, size_t N>
constexpr T LengthSq (const Vector< T, N > &a)
 Squared length (magnitude) of a vector.
template<typename T, size_t N>
Length (const Vector< T, N > &a)
 Length (magnitude) of a vector.
template<typename T, size_t N>
Vector< T, N > Normalize (const Vector< T, N > &a)
 Normalizes a vector to unit length.
template<typename T, size_t N>
constexpr Vector< T, N > Project (const Vector< T, N > &a, const Vector< T, N > &b)
 Projects vector a onto vector b.
template<typename T, size_t N>
constexpr Vector< T, N > Reflect (const Vector< T, N > &a, const Vector< T, N > &normal)
 Reflects vector a around the given normal.
template<typename T, size_t N>
constexpr Vector< T, N > MinComponent (const Vector< T, N > &a, const Vector< T, N > &b)
 Element-wise minimum of two vectors.
template<typename T, size_t N>
constexpr Vector< T, N > MaxComponent (const Vector< T, N > &a, const Vector< T, N > &b)
 Element-wise maximum of two vectors.
template<typename T, size_t N>
constexpr Vector< T, N > Abs (const Vector< T, N > &a)
 Element-wise absolute value of a vector.
template<typename T, size_t N>
constexpr bool operator== (const Vector< T, N > &a, const Vector< T, N > &b)
 Approximate equality comparison with tolerance.
template<typename T, size_t N>
constexpr bool operator!= (const Vector< T, N > &a, const Vector< T, N > &b)
 Inequality comparison.
template<typename T, size_t N>
AngleBetween (const Vector< T, N > &a, const Vector< T, N > &b)
 Angle between two vectors in radians.
template<typename T, size_t N>
constexpr Vector< T, N > Lerp (const Vector< T, N > &a, const Vector< T, N > &b, T t)
 Linear interpolation between two vectors.
template<typename T>
constexpr bool operator== (const Vector< T, 2 > &lhs, const Vector< T, 2 > &rhs)
 Equality comparison for 2D vectors.
template<typename T>
constexpr bool operator!= (const Vector< T, 2 > &lhs, const Vector< T, 2 > &rhs)
 Inequality comparison for 2D vectors.
template<typename T>
constexpr bool operator== (const Vector< T, 3 > &lhs, const Vector< T, 3 > &rhs)
 Equality comparison for 3D vectors.
template<typename T>
constexpr bool operator!= (const Vector< T, 3 > &lhs, const Vector< T, 3 > &rhs)
 Inequality comparison for 3D vectors.
template<typename T>
constexpr bool operator== (const Vector< T, 4 > &lhs, const Vector< T, 4 > &rhs)
 Equality comparison for 4D vectors.
template<typename T>
constexpr bool operator!= (const Vector< T, 4 > &lhs, const Vector< T, 4 > &rhs)
 Inequality comparison for 4D vectors.

Variables

template<typename T>
constexpr T Pi = static_cast<T>(3.14159265358979323846)
 The value of pi.
template<typename T>
constexpr T TwoPi = static_cast<T>(6.28318530717958647692)
 The value of 2pi (two pi).
template<typename T>
constexpr T HalfPi = static_cast<T>(1.57079632679489661923)
 The value of pi/2 (half pi).
template<typename T>
constexpr T QuarterPi = static_cast<T>(0.78539816339744830961)
 The value of pi/4 (quarter pi).
template<typename T>
constexpr T InvPi = static_cast<T>(0.31830988618379067153)
 1/pi (inverse pi).
template<typename T>
constexpr T InvTwoPi = static_cast<T>(0.15915494309189533576)
 1/(2pi) (inverse two pi).
template<typename T>
constexpr T DegToRad = Pi<T> / static_cast<T>(180)
 Degrees-to-radians conversion factor (pi/180).
template<typename T>
constexpr T RadToDeg = static_cast<T>(180) / Pi<T>
 Radians-to-degrees conversion factor (180/pi).
template<typename T>
constexpr T Sqrt2 = static_cast<T>(1.41421356237309504880)
 sqrt2 (square root of two).
template<typename T>
constexpr T InvSqrt2 = static_cast<T>(0.70710678118654752440)
 1/sqrt2 (inverse square root of two).
template<typename T>
constexpr T Sqrt3 = static_cast<T>(1.73205080756887729352)
 sqrt3 (square root of three).
template<typename T>
constexpr T InvSqrt3 = static_cast<T>(0.57735026918962576450)
 1/sqrt3 (inverse square root of three).
template<typename T>
constexpr T E = static_cast<T>(2.71828182845904523536)
 Euler's number (e).
template<typename T>
constexpr T InvE = static_cast<T>(0.36787944117144232159)
 1/e (inverse of Euler's number).
template<typename T>
constexpr T Ln2 = static_cast<T>(0.69314718055994530942)
 Natural logarithm of 2 (ln(2)).
template<typename T>
constexpr T Ln10 = static_cast<T>(2.30258509299404568402)
 Natural logarithm of 10 (ln(10)).
template<typename T>
constexpr T Log2E = static_cast<T>(1.44269504088896340736)
 Base-2 logarithm of e (log2(e)).
template<typename T>
constexpr T Log10E = static_cast<T>(0.43429448190325182765)
 Base-10 logarithm of e (log10(e)).
template<typename T>
constexpr T Phi = static_cast<T>(1.61803398874989484820)
 The golden ratio.
template<typename T>
constexpr T Epsilon = static_cast<T>(1e-7)
 Small epsilon for floating-point comparisons.

Typedef Documentation

◆ ivec2

using Crux::ivec2 = Vector<int, 2>

Function Documentation

◆ operator!=() [1/3]

template<typename T>
bool Crux::operator!= ( const Vector< T, 2 > & lhs,
const Vector< T, 2 > & rhs )
constexpr

Inequality comparison for 2D vectors.

◆ operator!=() [2/3]

template<typename T>
bool Crux::operator!= ( const Vector< T, 3 > & lhs,
const Vector< T, 3 > & rhs )
constexpr

Inequality comparison for 3D vectors.

◆ operator!=() [3/3]

template<typename T>
bool Crux::operator!= ( const Vector< T, 4 > & lhs,
const Vector< T, 4 > & rhs )
constexpr

Inequality comparison for 4D vectors.

◆ operator==() [1/3]

template<typename T>
bool Crux::operator== ( const Vector< T, 2 > & lhs,
const Vector< T, 2 > & rhs )
constexpr

Equality comparison for 2D vectors.

◆ operator==() [2/3]

template<typename T>
bool Crux::operator== ( const Vector< T, 3 > & lhs,
const Vector< T, 3 > & rhs )
constexpr

Equality comparison for 3D vectors.

◆ operator==() [3/3]

template<typename T>
bool Crux::operator== ( const Vector< T, 4 > & lhs,
const Vector< T, 4 > & rhs )
constexpr

Equality comparison for 4D vectors.

Variable Documentation

◆ DegToRad

template<typename T>
T Crux::DegToRad = Pi<T> / static_cast<T>(180)
inlineconstexpr

Degrees-to-radians conversion factor (pi/180).

◆ E

template<typename T>
T Crux::E = static_cast<T>(2.71828182845904523536)
inlineconstexpr

Euler's number (e).

◆ Epsilon

template<typename T>
T Crux::Epsilon = static_cast<T>(1e-7)
inlineconstexpr

Small epsilon for floating-point comparisons.

◆ HalfPi

template<typename T>
T Crux::HalfPi = static_cast<T>(1.57079632679489661923)
inlineconstexpr

The value of pi/2 (half pi).

◆ InvE

template<typename T>
T Crux::InvE = static_cast<T>(0.36787944117144232159)
inlineconstexpr

1/e (inverse of Euler's number).

◆ InvPi

template<typename T>
T Crux::InvPi = static_cast<T>(0.31830988618379067153)
inlineconstexpr

1/pi (inverse pi).

◆ InvSqrt2

template<typename T>
T Crux::InvSqrt2 = static_cast<T>(0.70710678118654752440)
inlineconstexpr

1/sqrt2 (inverse square root of two).

◆ InvSqrt3

template<typename T>
T Crux::InvSqrt3 = static_cast<T>(0.57735026918962576450)
inlineconstexpr

1/sqrt3 (inverse square root of three).

◆ InvTwoPi

template<typename T>
T Crux::InvTwoPi = static_cast<T>(0.15915494309189533576)
inlineconstexpr

1/(2pi) (inverse two pi).

◆ Ln10

template<typename T>
T Crux::Ln10 = static_cast<T>(2.30258509299404568402)
inlineconstexpr

Natural logarithm of 10 (ln(10)).

◆ Ln2

template<typename T>
T Crux::Ln2 = static_cast<T>(0.69314718055994530942)
inlineconstexpr

Natural logarithm of 2 (ln(2)).

◆ Log10E

template<typename T>
T Crux::Log10E = static_cast<T>(0.43429448190325182765)
inlineconstexpr

Base-10 logarithm of e (log10(e)).

◆ Log2E

template<typename T>
T Crux::Log2E = static_cast<T>(1.44269504088896340736)
inlineconstexpr

Base-2 logarithm of e (log2(e)).

◆ Phi

template<typename T>
T Crux::Phi = static_cast<T>(1.61803398874989484820)
inlineconstexpr

The golden ratio.

◆ Pi

template<typename T>
T Crux::Pi = static_cast<T>(3.14159265358979323846)
inlineconstexpr

The value of pi.

◆ QuarterPi

template<typename T>
T Crux::QuarterPi = static_cast<T>(0.78539816339744830961)
inlineconstexpr

The value of pi/4 (quarter pi).

◆ RadToDeg

template<typename T>
T Crux::RadToDeg = static_cast<T>(180) / Pi<T>
inlineconstexpr

Radians-to-degrees conversion factor (180/pi).

◆ Sqrt2

template<typename T>
T Crux::Sqrt2 = static_cast<T>(1.41421356237309504880)
inlineconstexpr

sqrt2 (square root of two).

◆ Sqrt3

template<typename T>
T Crux::Sqrt3 = static_cast<T>(1.73205080756887729352)
inlineconstexpr

sqrt3 (square root of three).

◆ TwoPi

template<typename T>
T Crux::TwoPi = static_cast<T>(6.28318530717958647692)
inlineconstexpr

The value of 2pi (two pi).