Nimpretty.
This commit is contained in:
parent
adbd4a6849
commit
9602785efe
2 changed files with 234 additions and 239 deletions
|
@ -1,6 +1,4 @@
|
|||
import math
|
||||
import strutils
|
||||
import random
|
||||
import math, random, strutils
|
||||
export math
|
||||
|
||||
proc clamp*(n, min, max: float32): float32 =
|
||||
|
@ -612,7 +610,8 @@ proc `*`*(a: Mat3, b: Vec2): Vec2 =
|
|||
|
||||
type Mat4* = array[16, float32] ## 4x4 Matrix - OpenGL row order
|
||||
|
||||
proc mat4*(v0, v1, Vec2, Vec3, Vec4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15: float32): Mat4 =
|
||||
proc mat4*(v0, v1, Vec2, Vec3, Vec4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
|
||||
v14, v15: float32): Mat4 =
|
||||
result[0] = v0
|
||||
result[1] = v1
|
||||
result[2] = Vec2
|
||||
|
@ -739,22 +738,22 @@ proc inverse*(a: Mat4): Mat4 =
|
|||
# Calculate the invese determinant
|
||||
var invDet = 1.0/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06)
|
||||
|
||||
result[ 0] = ( a11*b11 - a12*b10 + a13*b09)*invDet
|
||||
result[ 1] = (-a01*b11 + a02*b10 - a03*b09)*invDet
|
||||
result[ 2] = ( a31*b05 - a32*b04 + a33*b03)*invDet
|
||||
result[ 3] = (-a21*b05 + a22*b04 - a23*b03)*invDet
|
||||
result[ 4] = (-a10*b11 + a12*b08 - a13*b07)*invDet
|
||||
result[ 5] = ( a00*b11 - a02*b08 + a03*b07)*invDet
|
||||
result[ 6] = (-a30*b05 + a32*b02 - a33*b01)*invDet
|
||||
result[ 7] = ( a20*b05 - a22*b02 + a23*b01)*invDet
|
||||
result[ 8] = ( a10*b10 - a11*b08 + a13*b06)*invDet
|
||||
result[ 9] = (-a00*b10 + a01*b08 - a03*b06)*invDet
|
||||
result[10] = ( a30*b04 - a31*b02 + a33*b00)*invDet
|
||||
result[00] = (+a11*b11 - a12*b10 + a13*b09)*invDet
|
||||
result[01] = (-a01*b11 + a02*b10 - a03*b09)*invDet
|
||||
result[02] = (+a31*b05 - a32*b04 + a33*b03)*invDet
|
||||
result[03] = (-a21*b05 + a22*b04 - a23*b03)*invDet
|
||||
result[04] = (-a10*b11 + a12*b08 - a13*b07)*invDet
|
||||
result[05] = (+a00*b11 - a02*b08 + a03*b07)*invDet
|
||||
result[06] = (-a30*b05 + a32*b02 - a33*b01)*invDet
|
||||
result[07] = (+a20*b05 - a22*b02 + a23*b01)*invDet
|
||||
result[08] = (+a10*b10 - a11*b08 + a13*b06)*invDet
|
||||
result[09] = (-a00*b10 + a01*b08 - a03*b06)*invDet
|
||||
result[10] = (+a30*b04 - a31*b02 + a33*b00)*invDet
|
||||
result[11] = (-a20*b04 + a21*b02 - a23*b00)*invDet
|
||||
result[12] = (-a10*b09 + a11*b07 - a12*b06)*invDet
|
||||
result[13] = ( a00*b09 - a01*b07 + a02*b06)*invDet
|
||||
result[13] = (+a00*b09 - a01*b07 + a02*b06)*invDet
|
||||
result[14] = (-a30*b03 + a31*b01 - a32*b00)*invDet
|
||||
result[15] = ( a20*b03 - a21*b01 + a22*b00)*invDet
|
||||
result[15] = (+a20*b03 - a21*b01 + a22*b00)*invDet
|
||||
|
||||
proc `*`*(a, b: Mat4): Mat4 =
|
||||
var
|
||||
|
@ -793,16 +792,16 @@ proc `*`*(a, b: Mat4): Mat4 =
|
|||
b32 = b[14]
|
||||
b33 = b[15]
|
||||
|
||||
result[ 0] = b00*a00 + b01*a10 + b02*a20 + b03*a30
|
||||
result[ 1] = b00*a01 + b01*a11 + b02*a21 + b03*a31
|
||||
result[ 2] = b00*a02 + b01*a12 + b02*a22 + b03*a32
|
||||
result[ 3] = b00*a03 + b01*a13 + b02*a23 + b03*a33
|
||||
result[ 4] = b10*a00 + b11*a10 + b12*a20 + b13*a30
|
||||
result[ 5] = b10*a01 + b11*a11 + b12*a21 + b13*a31
|
||||
result[ 6] = b10*a02 + b11*a12 + b12*a22 + b13*a32
|
||||
result[ 7] = b10*a03 + b11*a13 + b12*a23 + b13*a33
|
||||
result[ 8] = b20*a00 + b21*a10 + b22*a20 + b23*a30
|
||||
result[ 9] = b20*a01 + b21*a11 + b22*a21 + b23*a31
|
||||
result[00] = b00*a00 + b01*a10 + b02*a20 + b03*a30
|
||||
result[01] = b00*a01 + b01*a11 + b02*a21 + b03*a31
|
||||
result[02] = b00*a02 + b01*a12 + b02*a22 + b03*a32
|
||||
result[03] = b00*a03 + b01*a13 + b02*a23 + b03*a33
|
||||
result[04] = b10*a00 + b11*a10 + b12*a20 + b13*a30
|
||||
result[05] = b10*a01 + b11*a11 + b12*a21 + b13*a31
|
||||
result[06] = b10*a02 + b11*a12 + b12*a22 + b13*a32
|
||||
result[07] = b10*a03 + b11*a13 + b12*a23 + b13*a33
|
||||
result[08] = b20*a00 + b21*a10 + b22*a20 + b23*a30
|
||||
result[09] = b20*a01 + b21*a11 + b22*a21 + b23*a31
|
||||
result[10] = b20*a02 + b21*a12 + b22*a22 + b23*a32
|
||||
result[11] = b20*a03 + b21*a13 + b22*a23 + b23*a33
|
||||
result[12] = b30*a00 + b31*a10 + b32*a20 + b33*a30
|
||||
|
@ -1069,9 +1068,9 @@ proc lookAt*(eye, center, up: Vec3): Mat4 =
|
|||
|
||||
proc tofloat32*(m: Mat4): array[16, float32] =
|
||||
return [
|
||||
float32 m[0], float32 m[1], float32 m[2], float32 m[3],
|
||||
float32 m[4], float32 m[5], float32 m[6], float32 m[7],
|
||||
float32 m[8], float32 m[9], float32 m[10], float32 m[11],
|
||||
float32 m[00], float32 m[01], float32 m[02], float32 m[03],
|
||||
float32 m[04], float32 m[05], float32 m[06], float32 m[07],
|
||||
float32 m[08], float32 m[09], float32 m[10], float32 m[11],
|
||||
float32 m[12], float32 m[13], float32 m[14], float32 m[15]
|
||||
]
|
||||
|
||||
|
@ -1107,7 +1106,7 @@ proc quat*(x, y, z, w: float32): Quat =
|
|||
result.w = w
|
||||
|
||||
proc conjugate*(q: Quat): Quat =
|
||||
result.w = q.w
|
||||
result.w = +q.w
|
||||
result.x = -q.x
|
||||
result.y = -q.y
|
||||
result.z = -q.z
|
||||
|
@ -1173,9 +1172,9 @@ proc `*`*(q: Quat, v: Vec3): Vec3 =
|
|||
qz = q.z
|
||||
qw = q.w
|
||||
|
||||
ix = qw * x + qy * z - qz * y
|
||||
iy = qw * y + qz * x - qx * z
|
||||
iz = qw * z + qx * y - qy * x
|
||||
ix = +qw * x + qy * z - qz * y
|
||||
iy = +qw * y + qz * x - qx * z
|
||||
iz = +qw * z + qx * y - qy * x
|
||||
iw = -qx * x - qy * y - qz * z
|
||||
|
||||
result.x = ix * qw + iw * -qx + iy * -qz - iz * -qy
|
||||
|
@ -1196,15 +1195,13 @@ proc mat3*(q: Quat): Mat3 =
|
|||
var zw = q.z * q.w
|
||||
|
||||
result[0] = 1 - 2 * (yy + zz)
|
||||
result[1] = 2 * ( xy - zw )
|
||||
result[2] = 2 * ( xz + yw )
|
||||
|
||||
result[3] = 2 * ( xy + zw )
|
||||
result[1] = 0 + 2 * (xy - zw)
|
||||
result[2] = 0 + 2 * (xz + yw)
|
||||
result[3] = 0 + 2 * (xy + zw)
|
||||
result[4] = 1 - 2 * (xx + zz)
|
||||
result[5] = 2 * ( yz - xw )
|
||||
|
||||
result[6] = 2 * ( xz - yw )
|
||||
result[7] = 2 * ( yz + xw )
|
||||
result[5] = 0 + 2 * (yz - xw)
|
||||
result[6] = 0 + 2 * (xz - yw)
|
||||
result[7] = 0 + 2 * (yz + xw)
|
||||
result[8] = 1 - 2 * (xx + yy)
|
||||
|
||||
proc mat4*(q: Quat): Mat4 =
|
||||
|
@ -1220,16 +1217,14 @@ proc mat4*(q: Quat): Mat4 =
|
|||
var zz = q.z * q.z
|
||||
var zw = q.z * q.w
|
||||
|
||||
result[0] = 1 - 2 * ( yy + zz )
|
||||
result[1] = 2 * ( xy - zw )
|
||||
result[2] = 2 * ( xz + yw )
|
||||
|
||||
result[4] = 2 * ( xy + zw )
|
||||
result[5] = 1 - 2 * ( xx + zz )
|
||||
result[6] = 2 * ( yz - xw )
|
||||
|
||||
result[8] = 2 * ( xz - yw )
|
||||
result[9] = 2 * ( yz + xw )
|
||||
result[00] = 1 - 2 * (yy + zz)
|
||||
result[01] = 0 + 2 * (xy - zw)
|
||||
result[02] = 0 + 2 * (xz + yw)
|
||||
result[04] = 0 + 2 * (xy + zw)
|
||||
result[05] = 1 - 2 * (xx + zz)
|
||||
result[06] = 0 + 2 * (yz - xw)
|
||||
result[08] = 0 + 2 * (xz - yw)
|
||||
result[09] = 0 + 2 * (yz + xw)
|
||||
result[10] = 1 - 2 * (xx + yy)
|
||||
|
||||
result[3] = 0
|
||||
|
|
|
@ -2,10 +2,8 @@
|
|||
|
||||
include ../src/vmath
|
||||
|
||||
|
||||
randomize(1234)
|
||||
|
||||
|
||||
block:
|
||||
echo "# angle stuff"
|
||||
echo angleBetween(0.1, 0.2), " should be: ", 0.1
|
||||
|
@ -164,7 +162,6 @@ block:
|
|||
echo m2
|
||||
assert m1.close(m2)
|
||||
|
||||
|
||||
block:
|
||||
echo "# 1,1,1 1.11rad"
|
||||
var m1 = rotate(PI*1.11, vec3(-1, 0.34, 1.123).normalize())
|
||||
|
@ -178,7 +175,10 @@ block:
|
|||
block:
|
||||
echo "# super random"
|
||||
for i in 0..100:
|
||||
var m1 = rotate(PI*rand(2.0), vec3(rand(2.0)-0.5, rand(2.0)-0.5, rand(2.0)-0.5).normalize())
|
||||
var m1 = rotate(
|
||||
PI*rand(2.0),
|
||||
vec3(rand(2.0)-0.5, rand(2.0)-0.5, rand(2.0)-0.5).normalize()
|
||||
)
|
||||
echo m1
|
||||
var q1 = m1.quat()
|
||||
echo q1
|
||||
|
|
Loading…
Reference in a new issue