Skip to content
This repository has been archived by the owner on Oct 16, 2022. It is now read-only.
SkyVault edited this page Jan 9, 2019 · 9 revisions

maths

Types

##3 unit vector type
Vec3 = ref object
  x*, y*, z*: float3
##2 unit vector type
Vec2 = ref object
  x*, y*: float3
Mat4 = object {.union.}
  m*: array[16, float32]
  a*: Mat4Ar
Mat3 = object {.union.}
  m*: array[9, float32]
  a*: Mat3Ar
Mat2 = object {.union.}
  m*: array[4, float32]
  a*: Mat2Ar

Constants

DEGTORAD = 0.0174532925199433
RADTODEG = 57.29577951308232

Procedures

proc newVec3(x: float = 0; y: float = 0; z: float = 0): Vec3 {.raises: [], tags: [].}
##Returns a zeroed vector with the y coordinate set to one
proc Vec3Up(): Vec3 {.raises: [], tags: [].}
proc Vec3Right(): Vec3 {.raises: [], tags: [].}
proc Vec3Left(): Vec3 {.raises: [], tags: [].}
proc Vec3One(): Vec3 {.raises: [], tags: [].}
proc `+`(a: Vec3; b: Vec3): Vec3 {.raises: [], tags: [].}
proc `-`(a: Vec3; b: Vec3): Vec3 {.raises: [], tags: [].}
proc `*`(a: Vec3; b: Vec3): Vec3 {.raises: [], tags: [].}
proc `/`(a: Vec3; b: Vec3): Vec3 {.raises: [], tags: [].}
proc `+`(a: Vec3; b: float32): Vec3 {.raises: [], tags: [].}
proc `-`(a: Vec3; b: float32): Vec3 {.raises: [], tags: [].}
proc `*`(a: Vec3; b: float32): Vec3 {.raises: [], tags: [].}
proc `/`(a: Vec3; b: float32): Vec3 {.raises: [], tags: [].}
proc `+=`(a: Vec3; b: Vec3) {.raises: [], tags: [].}
proc `-=`(a: Vec3; b: Vec3) {.raises: [], tags: [].}
proc `*=`(a: Vec3; b: Vec3) {.raises: [], tags: [].}
proc `/=`(a: Vec3; b: Vec3) {.raises: [], tags: [].}
proc `+=`(a: Vec3; b: float32) {.raises: [], tags: [].}
proc `-=`(a: Vec3; b: float32) {.raises: [], tags: [].}
proc `*=`(a: Vec3; b: float32) {.raises: [], tags: [].}
proc `/=`(a: Vec3; b: float32) {.raises: [], tags: [].}
proc `-`(v: Vec3): Vec3 {.raises: [], tags: [].}
proc `==`(a: Vec3; b: Vec3): bool {.raises: [], tags: [].}
proc move(a: Vec3; by: Vec3) {.raises: [], tags: [].}
proc length(a: Vec3): float32 {.raises: [], tags: [].}
proc normalize(v: Vec3): Vec3 {.raises: [], tags: [].}
proc dot(a: Vec3; b: Vec3): float32 {.raises: [], tags: [].}
proc cross(a: Vec3; b: Vec3): Vec3 {.raises: [], tags: [].}
proc angleBetween(a: Vec3; b: Vec3): float32 {.raises: [], tags: [].}
proc newVec2(x: float = 0; y: float = 0): Vec2 {.raises: [], tags: [].}
proc newVec2[T](x: T = 0; y: T = 0): Vec2
proc toVec3(v: Vec2): Vec3 {.raises: [], tags: [].}
proc Vec2Up(): Vec2 {.raises: [], tags: [].}
proc Vec2Right(): Vec2 {.raises: [], tags: [].}
proc Vec2Left(): Vec2 {.raises: [], tags: [].}
proc Vec2One(): Vec2 {.raises: [], tags: [].}
proc `+`(a: Vec2; b: Vec2): Vec2 {.raises: [], tags: [].}
proc `-`(a: Vec2; b: Vec2): Vec2 {.raises: [], tags: [].}
proc `*`(a: Vec2; b: Vec2): Vec2 {.raises: [], tags: [].}
proc `/`(a: Vec2; b: Vec2): Vec2 {.raises: [], tags: [].}
proc `+`(a: Vec2; b: float32): Vec2 {.raises: [], tags: [].}
proc `-`(a: Vec2; b: float32): Vec2 {.raises: [], tags: [].}
proc `*`(a: Vec2; b: float32): Vec2 {.raises: [], tags: [].}
proc `/`(a: Vec2; b: float32): Vec2 {.raises: [], tags: [].}
proc `+=`(a: Vec2; b: Vec2) {.raises: [], tags: [].}
proc `-=`(a: Vec2; b: Vec2) {.raises: [], tags: [].}
proc `*=`(a: Vec2; b: Vec2) {.raises: [], tags: [].}
proc `/=`(a: Vec2; b: Vec2) {.raises: [], tags: [].}
proc `+=`(a: Vec2; b: float32) {.raises: [], tags: [].}
proc `-=`(a: Vec2; b: float32) {.raises: [], tags: [].}
proc `*=`(a: Vec2; b: float32) {.raises: [], tags: [].}
proc `/=`(a: Vec2; b: float32) {.raises: [], tags: [].}
proc `-`(v: Vec2): Vec2 {.raises: [], tags: [].}
proc `==`(a: Vec2; b: Vec2): bool {.raises: [], tags: [].}
proc move(a: Vec2; by: Vec2) {.raises: [], tags: [].}
proc length(a: Vec2): float32 {.raises: [], tags: [].}
proc normalize(v: Vec2): Vec2 {.raises: [], tags: [].}
proc dot(a: Vec2; b: Vec2): float32 {.raises: [], tags: [].}
proc cross(a: Vec2; b: Vec2): float32 {.raises: [], tags: [].}
proc angleBetween(a: Vec2; b: Vec2): float32 {.raises: [], tags: [].}
proc rotate(a: Vec2; rad: float32) {.raises: [], tags: [].}
proc newMat4(): Mat4 {.raises: [], tags: [].}
proc newMat4(m00, m10, m20, m30, m01, m11, m21, m31, m02, m12, m22, m32, m03, m13, m23, m33: float32): Mat4 {.
    raises: [], tags: [].}
proc identity(): Mat4 {.raises: [], tags: [].}
proc translation(x: float32; y: float32; z: float32): Mat4 {.raises: [], tags: [].}
proc translation(off: Vec3): Mat4 {.raises: [], tags: [].}
proc translation(off: Vec2): Mat4 {.raises: [], tags: [].}
proc scale(x: float32; y: float32; z: float32): Mat4 {.raises: [], tags: [].}
proc scale(scale: Vec3): Mat4 {.raises: [], tags: [].}
proc rotX(rad: float32): Mat4 {.raises: [], tags: [].}
proc rotY(rad: float32): Mat4 {.raises: [], tags: [].}
proc rotZ(rad: float32): Mat4 {.raises: [], tags: [].}
proc transpose(m: Mat4): Mat4 {.raises: [], tags: [].}
proc ortho(ll: float32; r: float32; b: float32; t: float32; n: float32; f: float32): Mat4 {.
    raises: [], tags: [].}
proc perspective(fov: float32; ar: float32; nd: float32; fd: float32): Mat4 {.raises: [],
    tags: [].}
proc lookAt(fr: Vec3; to: Vec3; up: Vec3): Mat4 {.raises: [], tags: [].}
proc mul(a: Mat4; b: Mat4): Mat4 {.raises: [], tags: [].}
proc transform(pos: Vec3; rot: Vec3; scale: Vec3): Mat4 {.raises: [], tags: [].}
proc transform(pos: Vec2; rot: float; scale: Vec2): Mat4 {.raises: [], tags: [].}
proc newMat3(): Mat3 {.raises: [], tags: [].}
proc newMat3(m00, m10, m20, m01, m11, m21, m02, m12, m22: float32): Mat3 {.raises: [],
    tags: [].}
proc identityMat3(): Mat3 {.raises: [], tags: [].}
proc translationMat3(x: float32; y: float32; z: float32): Mat3 {.raises: [], tags: [].}
proc translationMat3(off: Vec3): Mat3 {.raises: [], tags: [].}
proc scaleMat3(x: float32; y: float32; z: float32): Mat3 {.raises: [], tags: [].}
proc scaleMat3(scale: Vec3): Mat3 {.raises: [], tags: [].}
proc rotXMat3(rad: float32): Mat3 {.raises: [], tags: [].}
proc rotYMat3(rad: float32): Mat3 {.raises: [], tags: [].}
proc rotZMat3(rad: float32): Mat3 {.raises: [], tags: [].}
proc transposeMat3(m: Mat3): Mat3 {.raises: [], tags: [].}
proc newMat2(m00, m10, m01, m11: float): Mat2 {.raises: [], tags: [].}
proc translation(x, y: float): Mat2 {.raises: [], tags: [].}
proc scale(x, y: float): Mat2 {.raises: [], tags: [].}
proc rot(rot: float): Mat2 {.raises: [], tags: [].}
proc mul(a: Mat2; b: Mat2): Mat2 {.raises: [], tags: [].}
proc lerp(a, b, t: float): float {.raises: [], tags: [].}
proc lerpPercent(a, b, t: float): float {.raises: [], tags: [].}
proc lerp(a, b: Vec2; t: float): Vec2 {.raises: [], tags: [].}
proc lerpPercent(a, b: Vec2; t: float): Vec2 {.raises: [], tags: [].}
proc lerp(a, b: Vec3; t: float): Vec3 {.raises: [], tags: [].}
proc lerpPercent(a, b: Vec3; t: float): Vec3 {.raises: [], tags: [].}
proc `$`(m: Mat4): string {.raises: [], tags: [].}
proc `$`(v: Vec3): string {.raises: [], tags: [].}
proc `$`(v: Vec2): string {.raises: [], tags: [].}

Templates

Clone this wiki locally