3. Math library
Math module contains basic floating point math functions and constants. Floating point math in general is not bit-precise. Compiler can optimize permutations, replace divisions with multiplications, and some of functions are not bit-exact. If you need precise math use double precision type. All functions and symbols are in “math” module, use require to get access to it.
require math
3.1. Constants
- PI = 3.1415927f
The ratio of a circle’s circumference to its diameter. π
- DBL_PI = 3.141592653589793lf
The ratio of a circle’s circumference to its diameter. π
- FLT_EPSILON = 1.1920929e-07f
the difference between 1 and the smallest floating point number of type float that is greater than 1.
- DBL_EPSILON = 2.220446049250313e-16lf
the difference between 1 and the smallest double precision floating point number of type double that is greater than 1.
3.2. Handled structures
- float4x4
floating point matrix with 4 rows and 4 columns
- Fields:
x : float4 - 0th row
y : float4 - 1st row
z : float4 - 2nd row
w : float4 - 3rd row
- float3x4
floating point matrix with 4 rows and 3 columns
- Fields:
x : float3 - 0th row
y : float3 - 1st row
z : float3 - 2nd row
w : float3 - 3rd row
- float3x3
floating point matrix with 3 rows and 3 columns
- Fields:
x : float3 - 0th row
y : float3 - 1st row
z : float3 - 2nd row
3.3. all numerics (uint*, int*, float*, double)
- min(x: int; y: int): int
returns the minimum of x and y
- Arguments:
x : int
y : int
- max(x: int; y: int): int
returns the maximum of x and y
- Arguments:
x : int
y : int
- min(x: int2; y: int2): int2
returns the minimum of x and y
- Arguments:
x : int2
y : int2
- max(x: int2; y: int2): int2
returns the maximum of x and y
- Arguments:
x : int2
y : int2
- min(x: int3; y: int3): int3
returns the minimum of x and y
- Arguments:
x : int3
y : int3
- max(x: int3; y: int3): int3
returns the maximum of x and y
- Arguments:
x : int3
y : int3
- min(x: int4; y: int4): int4
returns the minimum of x and y
- Arguments:
x : int4
y : int4
- max(x: int4; y: int4): int4
returns the maximum of x and y
- Arguments:
x : int4
y : int4
- min(x: uint; y: uint): uint
returns the minimum of x and y
- Arguments:
x : uint
y : uint
- max(x: uint; y: uint): uint
returns the maximum of x and y
- Arguments:
x : uint
y : uint
- min(x: uint2; y: uint2): uint2
returns the minimum of x and y
- Arguments:
x : uint2
y : uint2
- max(x: uint2; y: uint2): uint2
returns the maximum of x and y
- Arguments:
x : uint2
y : uint2
- min(x: uint3; y: uint3): uint3
returns the minimum of x and y
- Arguments:
x : uint3
y : uint3
- max(x: uint3; y: uint3): uint3
returns the maximum of x and y
- Arguments:
x : uint3
y : uint3
- min(x: uint4; y: uint4): uint4
returns the minimum of x and y
- Arguments:
x : uint4
y : uint4
- max(x: uint4; y: uint4): uint4
returns the maximum of x and y
- Arguments:
x : uint4
y : uint4
- min(x: float; y: float): float
returns the minimum of x and y
- Arguments:
x : float
y : float
- max(x: float; y: float): float
returns the maximum of x and y
- Arguments:
x : float
y : float
- min(x: float2; y: float2): float2
returns the minimum of x and y
- Arguments:
x : float2
y : float2
- max(x: float2; y: float2): float2
returns the maximum of x and y
- Arguments:
x : float2
y : float2
- min(x: float3; y: float3): float3
returns the minimum of x and y
- Arguments:
x : float3
y : float3
- max(x: float3; y: float3): float3
returns the maximum of x and y
- Arguments:
x : float3
y : float3
- min(x: float4; y: float4): float4
returns the minimum of x and y
- Arguments:
x : float4
y : float4
- max(x: float4; y: float4): float4
returns the maximum of x and y
- Arguments:
x : float4
y : float4
- min(x: double; y: double): double
returns the minimum of x and y
- Arguments:
x : double
y : double
- max(x: double; y: double): double
returns the maximum of x and y
- Arguments:
x : double
y : double
- min(x: int64; y: int64): int64
returns the minimum of x and y
- Arguments:
x : int64
y : int64
- max(x: int64; y: int64): int64
returns the maximum of x and y
- Arguments:
x : int64
y : int64
- min(x: uint64; y: uint64): uint64
returns the minimum of x and y
- Arguments:
x : uint64
y : uint64
- max(x: uint64; y: uint64): uint64
returns the maximum of x and y
- Arguments:
x : uint64
y : uint64
3.4. float* and double
- sin(x: float): float
returns the sine of x
- Arguments:
x : float
- cos(x: float): float
returns the cosine of x
- Arguments:
x : float
- tan(x: float): float
returns the tangent of x
- Arguments:
x : float
- sin(x: float2): float2
returns the sine of x
- Arguments:
x : float2
- cos(x: float2): float2
returns the cosine of x
- Arguments:
x : float2
- tan(x: float2): float2
returns the tangent of x
- Arguments:
x : float2
- sin(x: float3): float3
returns the sine of x
- Arguments:
x : float3
- cos(x: float3): float3
returns the cosine of x
- Arguments:
x : float3
- tan(x: float3): float3
returns the tangent of x
- Arguments:
x : float3
- sin(x: float4): float4
returns the sine of x
- Arguments:
x : float4
- cos(x: float4): float4
returns the cosine of x
- Arguments:
x : float4
- tan(x: float4): float4
returns the tangent of x
- Arguments:
x : float4
- exp(x: float): float
returns the e^x value of x
- Arguments:
x : float
- log(x: float): float
returns the natural logarithm of x
- Arguments:
x : float
- exp2(x: float): float
returns the 2^x value of x
- Arguments:
x : float
- log2(x: float): float
returns the logarithm base-2 of x
- Arguments:
x : float
- rcp(x: float): float
returns the 1/x
- Arguments:
x : float
- pow(x: float; y: float): float
returns x raised to the power of y
- Arguments:
x : float
y : float
- exp(x: float2): float2
returns the e^x value of x
- Arguments:
x : float2
- log(x: float2): float2
returns the natural logarithm of x
- Arguments:
x : float2
- exp2(x: float2): float2
returns the 2^x value of x
- Arguments:
x : float2
- log2(x: float2): float2
returns the logarithm base-2 of x
- Arguments:
x : float2
- rcp(x: float2): float2
returns the 1/x
- Arguments:
x : float2
- pow(x: float2; y: float2): float2
returns x raised to the power of y
- Arguments:
x : float2
y : float2
- exp(x: float3): float3
returns the e^x value of x
- Arguments:
x : float3
- log(x: float3): float3
returns the natural logarithm of x
- Arguments:
x : float3
- exp2(x: float3): float3
returns the 2^x value of x
- Arguments:
x : float3
- log2(x: float3): float3
returns the logarithm base-2 of x
- Arguments:
x : float3
- rcp(x: float3): float3
returns the 1/x
- Arguments:
x : float3
- pow(x: float3; y: float3): float3
returns x raised to the power of y
- Arguments:
x : float3
y : float3
- exp(x: float4): float4
returns the e^x value of x
- Arguments:
x : float4
- log(x: float4): float4
returns the natural logarithm of x
- Arguments:
x : float4
- exp2(x: float4): float4
returns the 2^x value of x
- Arguments:
x : float4
- log2(x: float4): float4
returns the logarithm base-2 of x
- Arguments:
x : float4
- rcp(x: float4): float4
returns the 1/x
- Arguments:
x : float4
- pow(x: float4; y: float4): float4
returns x raised to the power of y
- Arguments:
x : float4
y : float4
- floor(x: float): float
returns a float value representing the largest integer that is less than or equal to x
- Arguments:
x : float
- ceil(x: float): float
returns a float value representing the smallest integer (type is still float) that is greater than or equal to arg0
- Arguments:
x : float
- sqrt(x: float): float
returns the square root of x
- Arguments:
x : float
- saturate(x: float): float
returns a clamped to [0..1] inclusive range x
- Arguments:
x : float
- floor(x: float2): float2
returns a float value representing the largest integer that is less than or equal to x
- Arguments:
x : float2
- ceil(x: float2): float2
returns a float value representing the smallest integer (type is still float) that is greater than or equal to arg0
- Arguments:
x : float2
- sqrt(x: float2): float2
returns the square root of x
- Arguments:
x : float2
- saturate(x: float2): float2
returns a clamped to [0..1] inclusive range x
- Arguments:
x : float2
- floor(x: float3): float3
returns a float value representing the largest integer that is less than or equal to x
- Arguments:
x : float3
- ceil(x: float3): float3
returns a float value representing the smallest integer (type is still float) that is greater than or equal to arg0
- Arguments:
x : float3
- sqrt(x: float3): float3
returns the square root of x
- Arguments:
x : float3
- saturate(x: float3): float3
returns a clamped to [0..1] inclusive range x
- Arguments:
x : float3
- floor(x: float4): float4
returns a float value representing the largest integer that is less than or equal to x
- Arguments:
x : float4
- ceil(x: float4): float4
returns a float value representing the smallest integer (type is still float) that is greater than or equal to arg0
- Arguments:
x : float4
- sqrt(x: float4): float4
returns the square root of x
- Arguments:
x : float4
- saturate(x: float4): float4
returns a clamped to [0..1] inclusive range x
- Arguments:
x : float4
- abs(x: int): int
returns the absolute value of x
- Arguments:
x : int
- sign(x: int): int
returns sign of x, or 0 if x == 0
- Arguments:
x : int
- abs(x: int2): int2
returns the absolute value of x
- Arguments:
x : int2
- sign(x: int2): int2
returns sign of x, or 0 if x == 0
- Arguments:
x : int2
- abs(x: int3): int3
returns the absolute value of x
- Arguments:
x : int3
- sign(x: int3): int3
returns sign of x, or 0 if x == 0
- Arguments:
x : int3
- abs(x: int4): int4
returns the absolute value of x
- Arguments:
x : int4
- sign(x: int4): int4
returns sign of x, or 0 if x == 0
- Arguments:
x : int4
- abs(x: uint): uint
returns the absolute value of x
- Arguments:
x : uint
- sign(x: uint): uint
returns sign of x, or 0 if x == 0
- Arguments:
x : uint
- abs(x: uint2): uint2
returns the absolute value of x
- Arguments:
x : uint2
- sign(x: uint2): uint2
returns sign of x, or 0 if x == 0
- Arguments:
x : uint2
- abs(x: uint3): uint3
returns the absolute value of x
- Arguments:
x : uint3
- sign(x: uint3): uint3
returns sign of x, or 0 if x == 0
- Arguments:
x : uint3
- abs(x: uint4): uint4
returns the absolute value of x
- Arguments:
x : uint4
- sign(x: uint4): uint4
returns sign of x, or 0 if x == 0
- Arguments:
x : uint4
- abs(x: float): float
returns the absolute value of x
- Arguments:
x : float
- sign(x: float): float
returns sign of x, or 0 if x == 0
- Arguments:
x : float
- abs(x: float2): float2
returns the absolute value of x
- Arguments:
x : float2
- sign(x: float2): float2
returns sign of x, or 0 if x == 0
- Arguments:
x : float2
- abs(x: float3): float3
returns the absolute value of x
- Arguments:
x : float3
- sign(x: float3): float3
returns sign of x, or 0 if x == 0
- Arguments:
x : float3
- abs(x: float4): float4
returns the absolute value of x
- Arguments:
x : float4
- sign(x: float4): float4
returns sign of x, or 0 if x == 0
- Arguments:
x : float4
- abs(x: double): double
returns the absolute value of x
- Arguments:
x : double
- sign(x: double): double
returns sign of x, or 0 if x == 0
- Arguments:
x : double
- abs(x: int64): int64
returns the absolute value of x
- Arguments:
x : int64
- sign(x: int64): int64
returns sign of x, or 0 if x == 0
- Arguments:
x : int64
- abs(x: uint64): uint64
returns the absolute value of x
- Arguments:
x : uint64
- sign(x: uint64): uint64
returns sign of x, or 0 if x == 0
- Arguments:
x : uint64
- is_nan(x: float): bool
Returns true if x is NaN (not a number)
- Arguments:
x : float
- is_finite(x: float): bool
Returns true if x is not a negative or positive infinity
- Arguments:
x : float
- is_nan(x: double): bool
Returns true if x is NaN (not a number)
- Arguments:
x : double
- is_finite(x: double): bool
Returns true if x is not a negative or positive infinity
- Arguments:
x : double
- sqrt(x: double): double
returns the square root of x
- Arguments:
x : double
- exp(x: double): double
returns the e^x value of x
- Arguments:
x : double
- rcp(x: double): double
returns the 1/x
- Arguments:
x : double
- log(x: double): double
returns the natural logarithm of x
- Arguments:
x : double
- pow(x: double; y: double): double
returns x raised to the power of y
- Arguments:
x : double
y : double
- exp2(x: double): double
returns the 2^x value of x
- Arguments:
x : double
- log2(x: double): double
returns the logarithm base-2 of x
- Arguments:
x : double
- sin(x: double): double
returns the sine of x
- Arguments:
x : double
- cos(x: double): double
returns the cosine of x
- Arguments:
x : double
- asin(x: double): double
returns the arcsine of x
- Arguments:
x : double
- acos(x: double): double
returns the arccosine of x
- Arguments:
x : double
- safe_asin(x: double): double
Returns the arcsine of x, clamping x to the [-1..1] range to avoid NaN results.
- Arguments:
x : double
- safe_acos(x: double): double
Returns the arc cosine of x, clamped to the range [-1, 1].
- Arguments:
x : double
- tan(x: double): double
returns the tangent of x
- Arguments:
x : double
- atan(x: double): double
returns the arctangent of x
- Arguments:
x : double
- atan2(y: double; x: double): double
returns the arctangent of y/x
- Arguments:
y : double
x : double
- sincos(x: float; s: float& implicit; c: float& implicit)
returns oth sine and cosine of x
- Arguments:
x : float
s : float& implicit
c : float& implicit
- sincos(x: double; s: double& implicit; c: double& implicit)
returns oth sine and cosine of x
- Arguments:
x : double
s : double& implicit
c : double& implicit
- asin(x: float): float
returns the arcsine of x
- Arguments:
x : float
- acos(x: float): float
returns the arccosine of x
- Arguments:
x : float
- safe_asin(x: float): float
Returns the arcsine of x, clamping x to the [-1..1] range to avoid NaN results.
- Arguments:
x : float
- safe_acos(x: float): float
Returns the arc cosine of x, clamped to the range [-1, 1].
- Arguments:
x : float
- atan(x: float): float
returns the arctangent of x
- Arguments:
x : float
- atan2(y: float; x: float): float
returns the arctangent of y/x
- Arguments:
y : float
x : float
- asin(x: float2): float2
returns the arcsine of x
- Arguments:
x : float2
- asin(x: float3): float3
returns the arcsine of x
- Arguments:
x : float3
- asin(x: float4): float4
returns the arcsine of x
- Arguments:
x : float4
- acos(x: float2): float2
returns the arccosine of x
- Arguments:
x : float2
- acos(x: float3): float3
returns the arccosine of x
- Arguments:
x : float3
- acos(x: float4): float4
returns the arccosine of x
- Arguments:
x : float4
- safe_asin(x: float2): float2
Returns the arcsine of x, clamping x to the [-1..1] range to avoid NaN results.
- Arguments:
x : float2
- safe_asin(x: float3): float3
Returns the arcsine of x, clamping x to the [-1..1] range to avoid NaN results.
- Arguments:
x : float3
- safe_asin(x: float4): float4
Returns the arcsine of x, clamping x to the [-1..1] range to avoid NaN results.
- Arguments:
x : float4
- safe_acos(x: float2): float2
returns the arc cosine of x, clamped to the range [-1, 1].
- Arguments:
x : float2
- safe_acos(x: float3): float3
Returns the arc cosine of x, clamped to the range [-1, 1].
- Arguments:
x : float3
- safe_acos(x: float4): float4
Returns the arc cosine of x, clamped to the range [-1, 1].
- Arguments:
x : float4
- atan(x: float2): float2
returns the arctangent of x
- Arguments:
x : float2
- atan(x: float3): float3
returns the arctangent of x
- Arguments:
x : float3
- atan(x: float4): float4
returns the arctangent of x
- Arguments:
x : float4
- atan2(y: float2; x: float2): float2
returns the arctangent of y/x
- Arguments:
y : float2
x : float2
- atan2(y: float3; x: float3): float3
returns the arctangent of y/x
- Arguments:
y : float3
x : float3
- atan2(y: float4; x: float4): float4
returns the arctangent of y/x
- Arguments:
y : float4
x : float4
3.5. float* only
- rcp_est(x: float): float
returns the fast approximation 1/x
- Arguments:
x : float
- rcp_est(x: float2): float2
returns the fast approximation 1/x
- Arguments:
x : float2
- rcp_est(x: float3): float3
returns the fast approximation 1/x
- Arguments:
x : float3
- rcp_est(x: float4): float4
returns the fast approximation 1/x
- Arguments:
x : float4
- fract(x: float): float
returns a fraction part of x
- Arguments:
x : float
- round(x: float): float
Returns the nearest integer to x.
- Arguments:
x : float
- rsqrt(x: float): float
returns 1/sqrt(x)
- Arguments:
x : float
- rsqrt_est(x: float): float
returns the fast approximation 1/sqrt(x)
- Arguments:
x : float
- fract(x: float2): float2
returns a fraction part of x
- Arguments:
x : float2
- round(x: float2): float2
Returns the nearest integer to x.
- Arguments:
x : float2
- rsqrt(x: float2): float2
returns 1/sqrt(x)
- Arguments:
x : float2
- rsqrt_est(x: float2): float2
returns the fast approximation 1/sqrt(x)
- Arguments:
x : float2
- fract(x: float3): float3
returns a fraction part of x
- Arguments:
x : float3
- round(x: float3): float3
Returns the nearest integer to x.
- Arguments:
x : float3
- rsqrt(x: float3): float3
returns 1/sqrt(x)
- Arguments:
x : float3
- rsqrt_est(x: float3): float3
returns the fast approximation 1/sqrt(x)
- Arguments:
x : float3
- fract(x: float4): float4
returns a fraction part of x
- Arguments:
x : float4
- round(x: float4): float4
Returns the nearest integer to x.
- Arguments:
x : float4
- rsqrt(x: float4): float4
returns 1/sqrt(x)
- Arguments:
x : float4
- rsqrt_est(x: float4): float4
returns the fast approximation 1/sqrt(x)
- Arguments:
x : float4
- atan_est(x: float): float
Fast estimation for the atan.
- Arguments:
x : float
- atan2_est(y: float; x: float): float
returns the fast approximation of arctangent of y/x
- Arguments:
y : float
x : float
- atan_est(x: float2): float2
Fast estimation for the atan.
- Arguments:
x : float2
- atan_est(x: float3): float3
Fast estimation for the atan.
- Arguments:
x : float3
- atan_est(x: float4): float4
Fast estimation for the atan.
- Arguments:
x : float4
- atan2_est(y: float2; x: float2): float2
returns the fast approximation of arctangent of y/x
- Arguments:
y : float2
x : float2
- atan2_est(y: float3; x: float3): float3
returns the fast approximation of arctangent of y/x
- Arguments:
y : float3
x : float3
- atan2_est(y: float4; x: float4): float4
returns the fast approximation of arctangent of y/x
- Arguments:
y : float4
x : float4
- floori(x: float): int
returns a integer value representing the largest integer that is less than or equal to x
- Arguments:
x : float
- ceili(x: float): int
returns a value representing the smallest integer (integer type!) that is greater than or equal to arg0
- Arguments:
x : float
- roundi(x: float): int
returns a integer value representing the integer that is closest to x
- Arguments:
x : float
- trunci(x: float): int
returns a integer value representing the float without fraction part of x
- Arguments:
x : float
- floori(x: double): int
returns a integer value representing the largest integer that is less than or equal to x
- Arguments:
x : double
- ceili(x: double): int
returns a value representing the smallest integer (integer type!) that is greater than or equal to arg0
- Arguments:
x : double
- roundi(x: double): int
returns a integer value representing the integer that is closest to x
- Arguments:
x : double
- trunci(x: double): int
returns a integer value representing the float without fraction part of x
- Arguments:
x : double
- floori(x: float2): int2
returns a integer value representing the largest integer that is less than or equal to x
- Arguments:
x : float2
- ceili(x: float2): int2
returns a value representing the smallest integer (integer type!) that is greater than or equal to arg0
- Arguments:
x : float2
- roundi(x: float2): int2
returns a integer value representing the integer that is closest to x
- Arguments:
x : float2
- trunci(x: float2): int2
returns a integer value representing the float without fraction part of x
- Arguments:
x : float2
- floori(x: float3): int3
returns a integer value representing the largest integer that is less than or equal to x
- Arguments:
x : float3
- ceili(x: float3): int3
returns a value representing the smallest integer (integer type!) that is greater than or equal to arg0
- Arguments:
x : float3
- roundi(x: float3): int3
returns a integer value representing the integer that is closest to x
- Arguments:
x : float3
- trunci(x: float3): int3
returns a integer value representing the float without fraction part of x
- Arguments:
x : float3
- floori(x: float4): int4
returns a integer value representing the largest integer that is less than or equal to x
- Arguments:
x : float4
- ceili(x: float4): int4
returns a value representing the smallest integer (integer type!) that is greater than or equal to arg0
- Arguments:
x : float4
- roundi(x: float4): int4
returns a integer value representing the integer that is closest to x
- Arguments:
x : float4
- trunci(x: float4): int4
returns a integer value representing the float without fraction part of x
- Arguments:
x : float4
- float4x4 implicit-(x: float4x4 implicit): float4x4
returns -x
- Arguments:
x : float4x4 implicit
- float3x4 implicit-(x: float3x4 implicit): float3x4
returns -x
- Arguments:
x : float3x4 implicit
- float3x3 implicit-(x: float3x3 implicit): float3x3
returns -x
- Arguments:
x : float3x3 implicit
3.6. float3 only
- cross(x: float3; y: float3): float3
returns vector representing cross product between x and y
- Arguments:
x : float3
y : float3
- distance(x: float2; y: float2): float
returns a non-negative value representing distance between x and y
- Arguments:
x : float2
y : float2
- distance_sq(x: float2; y: float2): float
returns a non-negative value representing squared distance between x and y
- Arguments:
x : float2
y : float2
- inv_distance(x: float2; y: float2): float
returns a non-negative value representing 1/distance between x and y
- Arguments:
x : float2
y : float2
- inv_distance_sq(x: float2; y: float2): float
returns a non-negative value representing 1/squared distance between x and y
- Arguments:
x : float2
y : float2
- distance(x: float3; y: float3): float
returns a non-negative value representing distance between x and y
- Arguments:
x : float3
y : float3
- distance_sq(x: float3; y: float3): float
returns a non-negative value representing squared distance between x and y
- Arguments:
x : float3
y : float3
- inv_distance(x: float3; y: float3): float
returns a non-negative value representing 1/distance between x and y
- Arguments:
x : float3
y : float3
- inv_distance_sq(x: float3; y: float3): float
returns a non-negative value representing 1/squared distance between x and y
- Arguments:
x : float3
y : float3
- distance(x: float4; y: float4): float
returns a non-negative value representing distance between x and y
- Arguments:
x : float4
y : float4
- distance_sq(x: float4; y: float4): float
returns a non-negative value representing squared distance between x and y
- Arguments:
x : float4
y : float4
- inv_distance(x: float4; y: float4): float
returns a non-negative value representing 1/distance between x and y
- Arguments:
x : float4
y : float4
- inv_distance_sq(x: float4; y: float4): float
returns a non-negative value representing 1/squared distance between x and y
- Arguments:
x : float4
y : float4
- reflect(v: float3; n: float3): float3
see function-math-reflect.rst for details
- Arguments:
v : float3
n : float3
- reflect(v: float2; n: float2): float2
see function-math-reflect.rst for details
- Arguments:
v : float2
n : float2
- refract(v: float3; n: float3; nint: float): float3
see function-math-refract.rst for details
- Arguments:
v : float3
n : float3
nint : float
- refract(v: float2; n: float2; nint: float): float2
see function-math-refract.rst for details
- Arguments:
v : float2
n : float2
nint : float
3.7. float2, float3, float4
- dot(x: float2; y: float2): float
returns scalar representing dot product between x and y
- Arguments:
x : float2
y : float2
- dot(x: float3; y: float3): float
returns scalar representing dot product between x and y
- Arguments:
x : float3
y : float3
- dot(x: float4; y: float4): float
returns scalar representing dot product between x and y
- Arguments:
x : float4
y : float4
- fast_normalize(x: float2): float2
returns the fast approximation of normalized x, or nan if length(x) is 0
- Arguments:
x : float2
- fast_normalize(x: float3): float3
returns the fast approximation of normalized x, or nan if length(x) is 0
- Arguments:
x : float3
- fast_normalize(x: float4): float4
returns the fast approximation of normalized x, or nan if length(x) is 0
- Arguments:
x : float4
- normalize(x: float2): float2
returns normalized x, or nan if length(x) is 0
- Arguments:
x : float2
- normalize(x: float3): float3
returns normalized x, or nan if length(x) is 0
- Arguments:
x : float3
- normalize(x: float4): float4
returns normalized x, or nan if length(x) is 0
- Arguments:
x : float4
- length(x: float2): float
returns a non-negative value representing magnitude of x
- Arguments:
x : float2
- length(x: float3): float
returns a non-negative value representing magnitude of x
- Arguments:
x : float3
- length(x: float4): float
returns a non-negative value representing magnitude of x
- Arguments:
x : float4
- inv_length(x: float2): float
returns a non-negative value representing 1/magnitude of x
- Arguments:
x : float2
- inv_length(x: float3): float
returns a non-negative value representing 1/magnitude of x
- Arguments:
x : float3
- inv_length(x: float4): float
returns a non-negative value representing 1/magnitude of x
- Arguments:
x : float4
- inv_length_sq(x: float2): float
returns a non-negative value representing 1/squared magnitude of x
- Arguments:
x : float2
- inv_length_sq(x: float3): float
returns a non-negative value representing 1/squared magnitude of x
- Arguments:
x : float3
- inv_length_sq(x: float4): float
returns a non-negative value representing 1/squared magnitude of x
- Arguments:
x : float4
- length_sq(x: float2): float
returns a non-negative value representing squared magnitude of x
- Arguments:
x : float2
- length_sq(x: float3): float
returns a non-negative value representing squared magnitude of x
- Arguments:
x : float3
- length_sq(x: float4): float
returns a non-negative value representing squared magnitude of x
- Arguments:
x : float4
3.8. Noise functions
- uint32_hash(seed: uint): uint
returns hashed value of seed
- Arguments:
seed : uint
- uint_noise_1D(position: int; seed: uint): uint
returns noise value of position in the seeded sequence
- Arguments:
position : int
seed : uint
- uint_noise_2D(position: int2; seed: uint): uint
returns noise value of position in the seeded sequence
- Arguments:
position : int2
seed : uint
- uint_noise_3D(position: int3; seed: uint): uint
returns noise value of position in the seeded sequence
- Arguments:
position : int3
seed : uint
3.9. lerp/mad/clamp
- mad(a: float; b: float; c: float): float
returns vector or scalar representing a * b + c
- Arguments:
a : float
b : float
c : float
- lerp(a: float; b: float; t: float): float
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : float
b : float
t : float
- mad(a: float2; b: float2; c: float2): float2
returns vector or scalar representing a * b + c
- Arguments:
a : float2
b : float2
c : float2
- lerp(a: float2; b: float2; t: float2): float2
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : float2
b : float2
t : float2
- mad(a: float3; b: float3; c: float3): float3
returns vector or scalar representing a * b + c
- Arguments:
a : float3
b : float3
c : float3
- lerp(a: float3; b: float3; t: float3): float3
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : float3
b : float3
t : float3
- mad(a: float4; b: float4; c: float4): float4
returns vector or scalar representing a * b + c
- Arguments:
a : float4
b : float4
c : float4
- lerp(a: float4; b: float4; t: float4): float4
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : float4
b : float4
t : float4
- mad(a: float2; b: float; c: float2): float2
returns vector or scalar representing a * b + c
- Arguments:
a : float2
b : float
c : float2
- mad(a: float3; b: float; c: float3): float3
returns vector or scalar representing a * b + c
- Arguments:
a : float3
b : float
c : float3
- mad(a: float4; b: float; c: float4): float4
returns vector or scalar representing a * b + c
- Arguments:
a : float4
b : float
c : float4
- mad(a: int; b: int; c: int): int
returns vector or scalar representing a * b + c
- Arguments:
a : int
b : int
c : int
- mad(a: int2; b: int2; c: int2): int2
returns vector or scalar representing a * b + c
- Arguments:
a : int2
b : int2
c : int2
- mad(a: int3; b: int3; c: int3): int3
returns vector or scalar representing a * b + c
- Arguments:
a : int3
b : int3
c : int3
- mad(a: int4; b: int4; c: int4): int4
returns vector or scalar representing a * b + c
- Arguments:
a : int4
b : int4
c : int4
- mad(a: int2; b: int; c: int2): int2
returns vector or scalar representing a * b + c
- Arguments:
a : int2
b : int
c : int2
- mad(a: int3; b: int; c: int3): int3
returns vector or scalar representing a * b + c
- Arguments:
a : int3
b : int
c : int3
- mad(a: int4; b: int; c: int4): int4
returns vector or scalar representing a * b + c
- Arguments:
a : int4
b : int
c : int4
- mad(a: uint; b: uint; c: uint): uint
returns vector or scalar representing a * b + c
- Arguments:
a : uint
b : uint
c : uint
- mad(a: uint2; b: uint2; c: uint2): uint2
returns vector or scalar representing a * b + c
- Arguments:
a : uint2
b : uint2
c : uint2
- mad(a: uint3; b: uint3; c: uint3): uint3
returns vector or scalar representing a * b + c
- Arguments:
a : uint3
b : uint3
c : uint3
- mad(a: uint4; b: uint4; c: uint4): uint4
returns vector or scalar representing a * b + c
- Arguments:
a : uint4
b : uint4
c : uint4
- mad(a: uint2; b: uint; c: uint2): uint2
returns vector or scalar representing a * b + c
- Arguments:
a : uint2
b : uint
c : uint2
- mad(a: uint3; b: uint; c: uint3): uint3
returns vector or scalar representing a * b + c
- Arguments:
a : uint3
b : uint
c : uint3
- mad(a: uint4; b: uint; c: uint4): uint4
returns vector or scalar representing a * b + c
- Arguments:
a : uint4
b : uint
c : uint4
- mad(a: double; b: double; c: double): double
returns vector or scalar representing a * b + c
- Arguments:
a : double
b : double
c : double
- lerp(a: double; b: double; t: double): double
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : double
b : double
t : double
- clamp(t: int; a: int; b: int): int
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : int
a : int
b : int
- clamp(t: int2; a: int2; b: int2): int2
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : int2
a : int2
b : int2
- clamp(t: int3; a: int3; b: int3): int3
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : int3
a : int3
b : int3
- clamp(t: int4; a: int4; b: int4): int4
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : int4
a : int4
b : int4
- clamp(t: uint; a: uint; b: uint): uint
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : uint
a : uint
b : uint
- clamp(t: uint2; a: uint2; b: uint2): uint2
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : uint2
a : uint2
b : uint2
- clamp(t: uint3; a: uint3; b: uint3): uint3
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : uint3
a : uint3
b : uint3
- clamp(t: uint4; a: uint4; b: uint4): uint4
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : uint4
a : uint4
b : uint4
- clamp(t: float; a: float; b: float): float
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : float
a : float
b : float
- clamp(t: float2; a: float2; b: float2): float2
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : float2
a : float2
b : float2
- clamp(t: float3; a: float3; b: float3): float3
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : float3
a : float3
b : float3
- clamp(t: float4; a: float4; b: float4): float4
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : float4
a : float4
b : float4
- clamp(t: double; a: double; b: double): double
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : double
a : double
b : double
- clamp(t: int64; a: int64; b: int64): int64
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : int64
a : int64
b : int64
- clamp(t: uint64; a: uint64; b: uint64): uint64
returns vector or scalar representing min(max(t, a), b)
- Arguments:
t : uint64
a : uint64
b : uint64
- lerp(a: float2; b: float2; t: float): float2
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : float2
b : float2
t : float
- lerp(a: float3; b: float3; t: float): float3
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : float3
b : float3
t : float
- lerp(a: float4; b: float4; t: float): float4
returns vector or scalar representing a + (b - a) * t
- Arguments:
a : float4
b : float4
t : float
3.10. Matrix operations
float4x4 implicit* (x: float4x4 implicit; y: float4x4 implicit) : float4x4
float4x4 implicit== (x: float4x4 implicit; y: float4x4 implicit) : bool
float4x4 implicit!= (x: float4x4 implicit; y: float4x4 implicit) : bool
float3x4 implicit* (x: float3x4 implicit; y: float3x4 implicit) : float3x4
float3x4 implicit* (x: float3x4 implicit; y: float3) : float3
float4x4 implicit* (x: float4x4 implicit; y: float4) : float4
float3x4 implicit== (x: float3x4 implicit; y: float3x4 implicit) : bool
float3x4 implicit!= (x: float3x4 implicit; y: float3x4 implicit) : bool
float3x3 implicit* (x: float3x3 implicit; y: float3x3 implicit) : float3x3
float3x3 implicit* (x: float3x3 implicit; y: float3) : float3
float3x3 implicit== (x: float3x3 implicit; y: float3x3 implicit) : bool
float3x3 implicit!= (x: float3x3 implicit; y: float3x3 implicit) : bool
- float4x4 implicit*(x: float4x4 implicit; y: float4x4 implicit): float4x4
Multiplies a float4x4 matrix by a float4x4 matrix.
- float4x4 implicit==(x: float4x4 implicit; y: float4x4 implicit): bool
Compares two float4x4 matrices for equality.
- float4x4 implicit!=(x: float4x4 implicit; y: float4x4 implicit): bool
Compares two float4x4 matrices for inequality.
- float3x4 implicit*(x: float3x4 implicit; y: float3x4 implicit): float3x4
Multiplies a float3x4 matrix by a float3x4 matrix.
- float3x4 implicit*(x: float3x4 implicit; y: float3): float3
Multiplies a float3x3 matrix by a float3 vector.
- Arguments:
x : float3x4 implicit
y : float3
- float4x4 implicit*(x: float4x4 implicit; y: float4): float4
Multiplies a float4x4 matrix by a float4 vector.
- Arguments:
x : float4x4 implicit
y : float4
- float3x4 implicit==(x: float3x4 implicit; y: float3x4 implicit): bool
Compares two float3x4 matrices for equality.
- float3x4 implicit!=(x: float3x4 implicit; y: float3x4 implicit): bool
Compares two float3x4 matrices for inequality.
- float3x3 implicit*(x: float3x3 implicit; y: float3x3 implicit): float3x3
Multiplies a float3x3 matrix by a float3x3 matrix.
- float3x3 implicit*(x: float3x3 implicit; y: float3): float3
Multiplies a float3x3 matrix by a float3 vector.
- Arguments:
x : float3x3 implicit
y : float3
- float3x3 implicit==(x: float3x3 implicit; y: float3x3 implicit): bool
Compares two float3x3 matrices for equality.
- float3x3 implicit!=(x: float3x3 implicit; y: float3x3 implicit): bool
Compares two float3x3 matrices for inequality.
3.11. Matrix initializers
- float3x3(): float3x3
Returns empty matrix, where each component is 0.
- float3x4(): float3x4
Returns empty matrix, where each component is 0.
- float4x4(): float4x4
Returns empty matrix, where each component is 0.
- float4x4(arg0: float3x4 implicit): float4x4
Returns empty matrix, where each component is 0.
- Arguments:
arg0 : float3x4 implicit
- identity4x4(): float4x4
Returns identity matrix, where diagonal is 1 and every other component is 0.
- float3x4(arg0: float4x4 implicit): float3x4
Returns empty matrix, where each component is 0.
- Arguments:
arg0 : float4x4 implicit
- identity3x4(): float3x4
Returns identity matrix, where diagonal is 1 and every other component is 0.
- float3x3(arg0: float4x4 implicit): float3x3
Returns empty matrix, where each component is 0.
- Arguments:
arg0 : float4x4 implicit
- float3x3(arg0: float3x4 implicit): float3x3
Returns empty matrix, where each component is 0.
- Arguments:
arg0 : float3x4 implicit
- identity3x3(): float3x3
Returns identity matrix, where diagonal is 1 and every other component is 0.
3.12. Matrix manipulation
- identity(x: float4x4 implicit)
Returns identity matrix, where diagonal is 1 and every other component is 0.
- Arguments:
x : float4x4 implicit
- translation(xyz: float3): float4x4
Returns the arc cosine of x, clamped to the range [-1, 1].
- Arguments:
xyz : float3
- transpose(x: float4x4 implicit): float4x4
Transposes the specified input matrix x.
- Arguments:
x : float4x4 implicit
- persp_forward(wk: float; hk: float; zn: float; zf: float): float4x4
Perspective matrix, zn - 0, zf - 1
- Arguments:
wk : float
hk : float
zn : float
zf : float
- persp_reverse(wk: float; hk: float; zn: float; zf: float): float4x4
Perspective matrix, zn - 1, zf - 0
- Arguments:
wk : float
hk : float
zn : float
zf : float
- look_at(eye: float3; at: float3; up: float3): float4x4
Look-at matrix with the origin at eye, looking at at, with up as up direction.
- Arguments:
eye : float3
at : float3
up : float3
- compose(pos: float3; rot: float4; scale: float3): float4x4
Compose transformation out of translation, rotation and scale.
- Arguments:
pos : float3
rot : float4
scale : float3
- decompose(mat: float4x4 implicit; pos: float3& implicit; rot: float4& implicit; scale: float3& implicit)
Decompose transformation into translation, rotation and scale.
- Arguments:
mat : float4x4 implicit
pos : float3& implicit
rot : float4& implicit
scale : float3& implicit
- identity(x: float3x4 implicit)
Returns identity matrix, where diagonal is 1 and every other component is 0.
- Arguments:
x : float3x4 implicit
- inverse(x: float3x4 implicit): float3x4
Returns the inverse of the matrix x.
- Arguments:
x : float3x4 implicit
- inverse(m: float4x4 implicit): float4x4
Returns the inverse of the matrix x.
- Arguments:
m : float4x4 implicit
- orthonormal_inverse(m: float3x3 implicit): float3x3
Fast inverse for the orthonormal matrix.
- Arguments:
m : float3x3 implicit
- orthonormal_inverse(m: float3x4 implicit): float3x4
Fast inverse for the orthonormal matrix.
- Arguments:
m : float3x4 implicit
- rotate(x: float3x4 implicit; y: float3): float3
Rotates vector y by 3x4 matrix x. Only 3x3 portion of x is multiplied by y.
- Arguments:
x : float3x4 implicit
y : float3
- identity(x: float3x3 implicit)
Returns identity matrix, where diagonal is 1 and every other component is 0.
- Arguments:
x : float3x3 implicit
3.13. Quaternion operations
- quat_from_unit_arc(v0: float3; v1: float3): float4
Quaternion which represents rotation from v0 to v1, both arguments need to be normalized
- Arguments:
v0 : float3
v1 : float3
- quat_from_unit_vec_ang(v: float3; ang: float): float4
Quaternion which represents rotation for ang radians around vector v. v needs to be normalized
- Arguments:
v : float3
ang : float
- quat_mul(q1: float4; q2: float4): float4
Quaternion which is multiplication of q1 and q2
- Arguments:
q1 : float4
q2 : float4
- quat_mul_vec(q: float4; v: float3): float3
Transform vector v by quaternion q
- Arguments:
q : float4
v : float3
- quat_conjugate(q: float4): float4
Quaternion which is conjugate of q
- Arguments:
q : float4
3.14. Packing and unpacking
- pack_float_to_byte(x: float4): uint
Packs float4 vector v to byte4 vector and returns it as uint. Each component is clamped to [0..255] range.
- Arguments:
x : float4
- unpack_byte_to_float(x: uint): float4
Unpacks byte4 vector to float4 vector.
- Arguments:
x : uint
3.15. Uncategorized
- float4x4 implicit ==const[](m: float4x4 implicit ==const; i: int): float4&
Returns the i-th row of a float4x4 matrix.
- Arguments:
m : float4x4 implicit!
i : int
- float4x4 const implicit ==const[](m: float4x4 const implicit ==const; i: int): float4
Returns the i-th row of a float4x4 matrix.
- Arguments:
m : float4x4 implicit!
i : int
- float4x4 implicit ==const[](m: float4x4 implicit ==const; i: uint): float4&
Returns the i-th row of a float4x4 matrix.
- Arguments:
m : float4x4 implicit!
i : uint
- float4x4 const implicit ==const[](m: float4x4 const implicit ==const; i: uint): float4
Returns the i-th row of a float4x4 matrix.
- Arguments:
m : float4x4 implicit!
i : uint
- determinant(x: float4x4 implicit): float
Returns the determinant of the matrix m.
- Arguments:
x : float4x4 implicit
- determinant(x: float3x4 implicit): float
Returns the determinant of the matrix m.
- Arguments:
x : float3x4 implicit
- float3x4 implicit ==const[](m: float3x4 implicit ==const; i: int): float3&
Returns the i-th row of a float3x4 matrix.
- Arguments:
m : float3x4 implicit!
i : int
- float3x4 const implicit ==const[](m: float3x4 const implicit ==const; i: int): float3
Returns the i-th row of a float3x4 matrix.
- Arguments:
m : float3x4 implicit!
i : int
- float3x4 implicit ==const[](m: float3x4 implicit ==const; i: uint): float3&
Returns the i-th row of a float3x4 matrix.
- Arguments:
m : float3x4 implicit!
i : uint
- float3x4 const implicit ==const[](m: float3x4 const implicit ==const; i: uint): float3
Returns the i-th row of a float3x4 matrix.
- Arguments:
m : float3x4 implicit!
i : uint
- quat_from_euler(angles: float3): float4
Construct quaternion from euler angles.
- Arguments:
angles : float3
- quat_from_euler(x: float; y: float; z: float): float4
Construct quaternion from euler angles.
- Arguments:
x : float
y : float
z : float
- euler_from_quat(angles: float4): float3
Construct euler angles from quaternion.
- Arguments:
angles : float4
- quat(m: float3x3 implicit): float4
Construct quaternion from matrix.
- Arguments:
m : float3x3 implicit
- quat(m: float3x4 implicit): float4
Construct quaternion from matrix.
- Arguments:
m : float3x4 implicit
- quat(m: float4x4 implicit): float4
Construct quaternion from matrix.
- Arguments:
m : float4x4 implicit
- quat_slerp(t: float; a: float4; b: float4): float4
Spherical linear interpolation between a and b by t.
- Arguments:
t : float
a : float4
b : float4
- determinant(x: float3x3 implicit): float
Returns the determinant of the matrix m.
- Arguments:
x : float3x3 implicit
- float3x3 implicit ==const[](m: float3x3 implicit ==const; i: int): float3&
Returns the i-th row of a float3x3 matrix.
- Arguments:
m : float3x3 implicit!
i : int
- float3x3 const implicit ==const[](m: float3x3 const implicit ==const; i: int): float3
Returns the i-th row of a float3x3 matrix.
- Arguments:
m : float3x3 implicit!
i : int
- float3x3 implicit ==const[](m: float3x3 implicit ==const; i: uint): float3&
Returns the i-th row of a float3x3 matrix.
- Arguments:
m : float3x3 implicit!
i : uint
- float3x3 const implicit ==const[](m: float3x3 const implicit ==const; i: uint): float3
Returns the i-th row of a float4x4 matrix.
- Arguments:
m : float3x3 implicit!
i : uint