From 21922662085f0625577ec95954579b813301883e Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Tue, 5 Aug 2025 12:42:07 -0400 Subject: [PATCH 1/3] feat: Add translateByVector2 method to Matrix4 --- lib/src/vector_math/matrix4.dart | 7 +++++++ test/matrix4_test.dart | 22 ++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/src/vector_math/matrix4.dart b/lib/src/vector_math/matrix4.dart index c5ce8faf..1eac7b1b 100644 --- a/lib/src/vector_math/matrix4.dart +++ b/lib/src/vector_math/matrix4.dart @@ -759,6 +759,13 @@ class Matrix4 { _m4storage[15] = t4; } + /// Translate this matrix by a [Vector2]. + @pragma('wasm:prefer-inline') + @pragma('vm:prefer-inline') + @pragma('dart2js:prefer-inline') + void translateByVector2(Vector2 v2) => + translateByDouble(v2.x, v2.y, 0.0, 1.0); + /// Translate this matrix by a [Vector3]. @pragma('wasm:prefer-inline') @pragma('vm:prefer-inline') diff --git a/test/matrix4_test.dart b/test/matrix4_test.dart index e780c9bc..d3eeaadf 100644 --- a/test/matrix4_test.dart +++ b/test/matrix4_test.dart @@ -431,19 +431,19 @@ void testMatrix4SelfMultiplyTranspose() { void testMatrix4Translation() { final inputA = []; final inputB = []; - final output1 = []; - final output2 = []; + final outputA = []; + final outputB = []; inputA.add(Matrix4.identity()); inputB.add(Matrix4.translationValues(1.0, 3.0, 5.7)); - output1.add(inputA[0] * inputB[0] as Matrix4); - output2.add((Matrix4.identity())..translate(1.0, 3.0, 5.7)); + outputA.add(inputA[0] * inputB[0] as Matrix4); + outputB.add((Matrix4.identity())..translate(1.0, 3.0, 5.7)); assert(inputA.length == inputB.length); - assert(output1.length == output2.length); + assert(outputA.length == outputB.length); for (var i = 0; i < inputA.length; i++) { - relativeTest(output1[i], output2[i]); + relativeTest(outputA[i], outputB[i]); } final input = Matrix4.fromList([ @@ -452,6 +452,16 @@ void testMatrix4Translation() { 3, 7, 11, 15, // 4, 8, 12, 16, // ]); + final output2 = input.clone(); + output2[12] = input.dotRow(0, Vector4(4, 8, 0, 1)); + output2[13] = input.dotRow(1, Vector4(4, 8, 0, 1)); + output2[14] = input.dotRow(2, Vector4(4, 8, 0, 1)); + output2[15] = input.dotRow(3, Vector4(4, 8, 0, 1)); + relativeTest( + input.clone()..translateByVector2(Vector2(4.0, 8.0)), + output2, + ); + final output3 = input.clone(); output3[12] = input.dotRow(0, Vector4(4, 8, 12, 1)); output3[13] = input.dotRow(1, Vector4(4, 8, 12, 1)); From 60170836f00c885ee04268e0b288bb74fd1bd378 Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Thu, 7 Aug 2025 14:16:08 -0400 Subject: [PATCH 2/3] Fix formating --- test/matrix4_test.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/matrix4_test.dart b/test/matrix4_test.dart index d3eeaadf..523a00d9 100644 --- a/test/matrix4_test.dart +++ b/test/matrix4_test.dart @@ -457,10 +457,7 @@ void testMatrix4Translation() { output2[13] = input.dotRow(1, Vector4(4, 8, 0, 1)); output2[14] = input.dotRow(2, Vector4(4, 8, 0, 1)); output2[15] = input.dotRow(3, Vector4(4, 8, 0, 1)); - relativeTest( - input.clone()..translateByVector2(Vector2(4.0, 8.0)), - output2, - ); + relativeTest(input.clone()..translateByVector2(Vector2(4.0, 8.0)), output2); final output3 = input.clone(); output3[12] = input.dotRow(0, Vector4(4, 8, 12, 1)); From 3c4c518c7ace471f14a1ddd16d72bdcd7d5b4570 Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Mon, 18 Aug 2025 12:58:16 -0400 Subject: [PATCH 3/3] Generated 64 bit version --- lib/src/vector_math_64/matrix4.dart | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/src/vector_math_64/matrix4.dart b/lib/src/vector_math_64/matrix4.dart index 5ded1cea..53b7d17b 100644 --- a/lib/src/vector_math_64/matrix4.dart +++ b/lib/src/vector_math_64/matrix4.dart @@ -759,6 +759,13 @@ class Matrix4 { _m4storage[15] = t4; } + /// Translate this matrix by a [Vector2]. + @pragma('wasm:prefer-inline') + @pragma('vm:prefer-inline') + @pragma('dart2js:prefer-inline') + void translateByVector2(Vector2 v2) => + translateByDouble(v2.x, v2.y, 0.0, 1.0); + /// Translate this matrix by a [Vector3]. @pragma('wasm:prefer-inline') @pragma('vm:prefer-inline')