Move math functions to Math module
This commit is contained in:
parent
cd9bf6c1a9
commit
5584e2eb37
2 changed files with 34 additions and 34 deletions
|
@ -14,3 +14,37 @@ extension float4 {
|
||||||
return float3(x, y, z)
|
return float3(x, y, z)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generic matrix math utility functions
|
||||||
|
func matrix4x4_rotation(radians: Float, axis: float3) -> matrix_float4x4 {
|
||||||
|
let unitAxis = normalize(axis)
|
||||||
|
let ct = cosf(radians)
|
||||||
|
let st = sinf(radians)
|
||||||
|
let ci = 1 - ct
|
||||||
|
let x = unitAxis.x, y = unitAxis.y, z = unitAxis.z
|
||||||
|
return matrix_float4x4.init(columns:(vector_float4( ct + x * x * ci, y * x * ci + z * st, z * x * ci - y * st, 0),
|
||||||
|
vector_float4(x * y * ci - z * st, ct + y * y * ci, z * y * ci + x * st, 0),
|
||||||
|
vector_float4(x * z * ci + y * st, y * z * ci - x * st, ct + z * z * ci, 0),
|
||||||
|
vector_float4( 0, 0, 0, 1)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func matrix4x4_translation(_ translationX: Float, _ translationY: Float, _ translationZ: Float) -> matrix_float4x4 {
|
||||||
|
return matrix_float4x4.init(columns:(vector_float4(1, 0, 0, 0),
|
||||||
|
vector_float4(0, 1, 0, 0),
|
||||||
|
vector_float4(0, 0, 1, 0),
|
||||||
|
vector_float4(translationX, translationY, translationZ, 1)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func matrix_perspective_right_hand(fovyRadians fovy: Float, aspectRatio: Float, nearZ: Float, farZ: Float) -> matrix_float4x4 {
|
||||||
|
let ys = 1 / tanf(fovy * 0.5)
|
||||||
|
let xs = ys / aspectRatio
|
||||||
|
let zs = farZ / (nearZ - farZ)
|
||||||
|
return matrix_float4x4.init(columns:(vector_float4(xs, 0, 0, 0),
|
||||||
|
vector_float4( 0, ys, 0, 0),
|
||||||
|
vector_float4( 0, 0, zs, -1),
|
||||||
|
vector_float4( 0, 0, zs * nearZ, 0)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func radians_from_degrees(_ degrees: Float) -> Float {
|
||||||
|
return (degrees / 180) * .pi
|
||||||
|
}
|
||||||
|
|
|
@ -387,37 +387,3 @@ class Renderer: NSObject, MTKViewDelegate {
|
||||||
encoder.popDebugGroup()
|
encoder.popDebugGroup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generic matrix math utility functions
|
|
||||||
func matrix4x4_rotation(radians: Float, axis: float3) -> matrix_float4x4 {
|
|
||||||
let unitAxis = normalize(axis)
|
|
||||||
let ct = cosf(radians)
|
|
||||||
let st = sinf(radians)
|
|
||||||
let ci = 1 - ct
|
|
||||||
let x = unitAxis.x, y = unitAxis.y, z = unitAxis.z
|
|
||||||
return matrix_float4x4.init(columns:(vector_float4( ct + x * x * ci, y * x * ci + z * st, z * x * ci - y * st, 0),
|
|
||||||
vector_float4(x * y * ci - z * st, ct + y * y * ci, z * y * ci + x * st, 0),
|
|
||||||
vector_float4(x * z * ci + y * st, y * z * ci - x * st, ct + z * z * ci, 0),
|
|
||||||
vector_float4( 0, 0, 0, 1)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func matrix4x4_translation(_ translationX: Float, _ translationY: Float, _ translationZ: Float) -> matrix_float4x4 {
|
|
||||||
return matrix_float4x4.init(columns:(vector_float4(1, 0, 0, 0),
|
|
||||||
vector_float4(0, 1, 0, 0),
|
|
||||||
vector_float4(0, 0, 1, 0),
|
|
||||||
vector_float4(translationX, translationY, translationZ, 1)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func matrix_perspective_right_hand(fovyRadians fovy: Float, aspectRatio: Float, nearZ: Float, farZ: Float) -> matrix_float4x4 {
|
|
||||||
let ys = 1 / tanf(fovy * 0.5)
|
|
||||||
let xs = ys / aspectRatio
|
|
||||||
let zs = farZ / (nearZ - farZ)
|
|
||||||
return matrix_float4x4.init(columns:(vector_float4(xs, 0, 0, 0),
|
|
||||||
vector_float4( 0, ys, 0, 0),
|
|
||||||
vector_float4( 0, 0, zs, -1),
|
|
||||||
vector_float4( 0, 0, zs * nearZ, 0)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func radians_from_degrees(_ degrees: Float) -> Float {
|
|
||||||
return (degrees / 180) * .pi
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue