From da542432311809e22cc1166960d85e777d9d0be0 Mon Sep 17 00:00:00 2001 From: treeform Date: Mon, 27 Feb 2023 11:57:22 -0800 Subject: [PATCH 1/3] Fix for lookAt: https://github.com/treeform/vmath/issues/63 --- src/vmath.nim | 2 +- tests/test.nim | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/vmath.nim b/src/vmath.nim index 8e5808f..070e79e 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -1345,7 +1345,7 @@ proc lookAt*[T](eye, center, up: GVec3[T]): GMat4[T] = centerz = center[2] if eyex == centerx and eyey == centery and eyez == centerz: - return mat4[T]() + return GMat4[T]() var # vec3.direction(eye, center, z) diff --git a/tests/test.nim b/tests/test.nim index 88b315e..e7de428 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -882,6 +882,10 @@ block: ) doAssert lookAt(vec3(0, 0, 1), vec3(0, 0, 0)).quat ~= quat(0.0, 0.0, 0.0, 1.0) + let + a = lookAt(vec3(1, 2, 3), vec3(0, 0, 0)) + b = lookAt(dvec3(1, 2, 3), dvec3(0, 0, 0)) + doAssert ortho[float32](-1, 1, 1, -1, -1000, 1000) ~= mat4( 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, From cd6fd9cfca737dffe6ddad3f398d2da6fc7e4f4e Mon Sep 17 00:00:00 2001 From: treeform Date: Mon, 27 Feb 2023 12:58:31 -0800 Subject: [PATCH 2/3] expose gen*Constructor for users to add their own types. --- src/vmath.nim | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/vmath.nim b/src/vmath.nim index 070e79e..cf9605e 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -475,7 +475,8 @@ proc `zmod`*(a, b: float32): float32 = template lowerType(a: typed): string = ($type(a)).toLowerAscii() -template genConstructor(lower, upper, typ: untyped) = +template genVecConstructor*(lower, upper, typ: untyped) = + ## Generate vector constructor for your own type. proc `lower 2`*(): `upper 2` = gvec2[typ](typ(0), typ(0)) proc `lower 3`*(): `upper 3` = gvec3[typ](typ(0), typ(0), typ(0)) @@ -511,11 +512,11 @@ template genConstructor(lower, upper, typ: untyped) = proc `$`*(a: `upper 4`): string = lowerType(a) & "(" & $a.x & ", " & $a.y & ", " & $a.z & ", " & $a.w & ")" -genConstructor(bvec, BVec, bool) -genConstructor(ivec, IVec, int32) -genConstructor(uvec, UVec, uint32) -genConstructor(vec, Vec, float32) -genConstructor(dvec, DVec, float64) +genVecConstructor(bvec, BVec, bool) +genVecConstructor(ivec, IVec, int32) +genVecConstructor(uvec, UVec, uint32) +genVecConstructor(vec, Vec, float32) +genVecConstructor(dvec, DVec, float64) proc vec2*(ivec2: Ivec2): Vec2 = vec2(ivec2.x.float32, ivec2.y.float32) @@ -872,8 +873,8 @@ proc matToString[T](a: T, n: int): string = result.setLen(result.len - 2) result.add "\n)" -template genMatConstructor(lower, upper, T: untyped) = - +template genMatConstructor*(lower, upper, T: untyped) = + ## Generate matrix constructor for your own type. proc `lower 2`*( m00, m01, m10, m11: T @@ -1434,7 +1435,8 @@ type Quat* = GVec4[float32] DQuat* = GVec4[float64] -template genQuatConstructor(lower, upper, typ: untyped) = +template genQuatConstructor*(lower, upper, typ: untyped) = + ## Generate quaternion constructor for your own type. proc `lower`*(): `upper` = gvec4[typ](0, 0, 0, 1) proc `lower`*(x, y, z, w: typ): `upper` = gvec4[typ](x, y, z, w) proc `lower`*(x: typ): `upper` = gvec4[typ](x, x, x, x) From 5c347516baf44675854b6517bdfdd1a39ef62986 Mon Sep 17 00:00:00 2001 From: treeform Date: Mon, 27 Feb 2023 12:59:43 -0800 Subject: [PATCH 3/3] fix --- src/vmath.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vmath.nim b/src/vmath.nim index cf9605e..85c9320 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -1346,7 +1346,7 @@ proc lookAt*[T](eye, center, up: GVec3[T]): GMat4[T] = centerz = center[2] if eyex == centerx and eyey == centery and eyez == centerz: - return GMat4[T]() + return var # vec3.direction(eye, center, z)