diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/Matrix4x4.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/Matrix4x4.cs
index d0738641a3e2ec..4cbe3d4a93ad7b 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Numerics/Matrix4x4.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/Matrix4x4.cs
@@ -1202,10 +1202,13 @@ public static Matrix4x4 CreateRotationZ(float radians, Vector3 centerPoint)
/// The scaling matrix.
public static Matrix4x4 CreateScale(float xScale, float yScale, float zScale)
{
- Matrix4x4 result = Identity;
+ Matrix4x4 result = default;
+
result.M11 = xScale;
result.M22 = yScale;
result.M33 = zScale;
+ result.M44 = 1;
+
return result;
}
@@ -1217,7 +1220,7 @@ public static Matrix4x4 CreateScale(float xScale, float yScale, float zScale)
/// The scaling matrix.
public static Matrix4x4 CreateScale(float xScale, float yScale, float zScale, Vector3 centerPoint)
{
- Matrix4x4 result = Identity;
+ Matrix4x4 result = default;
float tx = centerPoint.X * (1 - xScale);
float ty = centerPoint.Y * (1 - yScale);
@@ -1226,9 +1229,12 @@ public static Matrix4x4 CreateScale(float xScale, float yScale, float zScale, Ve
result.M11 = xScale;
result.M22 = yScale;
result.M33 = zScale;
+ result.M44 = 1;
+
result.M41 = tx;
result.M42 = ty;
result.M43 = tz;
+
return result;
}
@@ -1237,10 +1243,13 @@ public static Matrix4x4 CreateScale(float xScale, float yScale, float zScale, Ve
/// The scaling matrix.
public static Matrix4x4 CreateScale(Vector3 scales)
{
- Matrix4x4 result = Identity;
+ Matrix4x4 result = default;
+
result.M11 = scales.X;
result.M22 = scales.Y;
result.M33 = scales.Z;
+ result.M44 = 1;
+
return result;
}
@@ -1250,18 +1259,19 @@ public static Matrix4x4 CreateScale(Vector3 scales)
/// The scaling matrix.
public static Matrix4x4 CreateScale(Vector3 scales, Vector3 centerPoint)
{
- Matrix4x4 result = Identity;
+ Matrix4x4 result = default;
- float tx = centerPoint.X * (1 - scales.X);
- float ty = centerPoint.Y * (1 - scales.Y);
- float tz = centerPoint.Z * (1 - scales.Z);
+ Vector3 t = centerPoint * (Vector3.One - scales);
result.M11 = scales.X;
result.M22 = scales.Y;
result.M33 = scales.Z;
- result.M41 = tx;
- result.M42 = ty;
- result.M43 = tz;
+ result.M44 = 1;
+
+ result.M41 = t.X;
+ result.M42 = t.Y;
+ result.M43 = t.Z;
+
return result;
}
@@ -1270,11 +1280,12 @@ public static Matrix4x4 CreateScale(Vector3 scales, Vector3 centerPoint)
/// The scaling matrix.
public static Matrix4x4 CreateScale(float scale)
{
- Matrix4x4 result = Identity;
+ Matrix4x4 result = default;
result.M11 = scale;
result.M22 = scale;
result.M33 = scale;
+ result.M44 = 1;
return result;
}
@@ -1285,19 +1296,18 @@ public static Matrix4x4 CreateScale(float scale)
/// The scaling matrix.
public static Matrix4x4 CreateScale(float scale, Vector3 centerPoint)
{
- Matrix4x4 result = Identity;
+ Matrix4x4 result = default;
- float tx = centerPoint.X * (1 - scale);
- float ty = centerPoint.Y * (1 - scale);
- float tz = centerPoint.Z * (1 - scale);
+ Vector3 t = centerPoint * (Vector3.One - new Vector3(scale));
result.M11 = scale;
result.M22 = scale;
result.M33 = scale;
+ result.M44 = 1;
- result.M41 = tx;
- result.M42 = ty;
- result.M43 = tz;
+ result.M41 = t.X;
+ result.M42 = t.Y;
+ result.M43 = t.Z;
return result;
}