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