diff --git a/CHANGELOG.md b/CHANGELOG.md index d599586a..d3b8e927 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## 2.3.0-wip +- Add `leftTranslateByVector2` method to `Matrix4`. + Equivalent to the `leftTranslate` set of methods, that multiplies this matrix by a translation matrix from the left. - Added `Matrix4.leftMultiply` method. - Add translateByVector2 method to Matrix4. - Require `sdk: ^3.7.0`. diff --git a/lib/src/vector_math/matrix4.dart b/lib/src/vector_math/matrix4.dart index ff9e21ca..90b6f553 100644 --- a/lib/src/vector_math/matrix4.dart +++ b/lib/src/vector_math/matrix4.dart @@ -838,6 +838,13 @@ class Matrix4 { _m4storage[15] = tw * r4; } + /// Multiply this by a translation from the left. + @pragma('wasm:prefer-inline') + @pragma('vm:prefer-inline') + @pragma('dart2js:prefer-inline') + void leftTranslateByVector2(Vector2 v2) => + leftTranslateByDouble(v2.x, v2.y, 0.0, 1.0); + /// Multiply this by a translation from the left. @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 2ad5b514..bd7e5326 100644 --- a/lib/src/vector_math_64/matrix4.dart +++ b/lib/src/vector_math_64/matrix4.dart @@ -838,6 +838,13 @@ class Matrix4 { _m4storage[15] = tw * r4; } + /// Multiply this by a translation from the left. + @pragma('wasm:prefer-inline') + @pragma('vm:prefer-inline') + @pragma('dart2js:prefer-inline') + void leftTranslateByVector2(Vector2 v2) => + leftTranslateByDouble(v2.x, v2.y, 0.0, 1.0); + /// Multiply this by a translation from the left. @pragma('wasm:prefer-inline') @pragma('vm:prefer-inline') diff --git a/test/matrix4_test.dart b/test/matrix4_test.dart index fd3ea773..71440a6f 100644 --- a/test/matrix4_test.dart +++ b/test/matrix4_test.dart @@ -862,6 +862,20 @@ void testLeftTranslate() { expect(result.x, equals(3.0)); expect(result.y, equals(0.0)); expect(result.z, equals(0.0)); + + // Matrix4 alternative methods + final m2 = Matrix4.diagonal3Values(2.0, 3.0, 4.0); + final result2 = Matrix4.columns( + Vector4(2.0, 0.0, 0.0, 0.0), + Vector4(0.0, 3.0, 0.0, 0.0), + Vector4(0.0, 0.0, 4.0, 0.0), + Vector4(1.0, 0.0, 0.0, 1.0), + ); + + expect(m2.clone()..leftTranslateByDouble(1, 0, 0, 1), result2); + expect(m2.clone()..leftTranslateByVector2(Vector2(1, 0)), result2); + expect(m2.clone()..leftTranslateByVector3(Vector3(1, 0, 0)), result2); + expect(m2.clone()..leftTranslateByVector4(Vector4(1, 0, 0, 1)), result2); } void testMatrixClassifiers() {