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/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') diff --git a/test/matrix4_test.dart b/test/matrix4_test.dart index e780c9bc..523a00d9 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,13 @@ 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));