Skip to content

Instantly share code, notes, and snippets.

@Milk-Drinker01
Created May 4, 2022 21:48
Show Gist options
  • Select an option

  • Save Milk-Drinker01/0df16395d541eed9487db83cbf0b3c08 to your computer and use it in GitHub Desktop.

Select an option

Save Milk-Drinker01/0df16395d541eed9487db83cbf0b3c08 to your computer and use it in GitHub Desktop.
Multiply Matrix 4x4 with last row being equivalent to the identity matrix
// Multiplies two matrices when the last rows are equivilent to 0 0 0 1.
Matrix4x4 multiplyMatrix4x3(Matrix4x4 lhs, Matrix4x4 rhs)
{
Matrix4x4 res;
res.m00 = lhs.m00 * rhs.m00 + lhs.m01 * rhs.m10 + lhs.m02 * rhs.m20;
res.m01 = lhs.m00 * rhs.m01 + lhs.m01 * rhs.m11 + lhs.m02 * rhs.m21;
res.m02 = lhs.m00 * rhs.m02 + lhs.m01 * rhs.m12 + lhs.m02 * rhs.m22;
res.m03 = lhs.m00 * rhs.m03 + lhs.m01 * rhs.m13 + lhs.m02 * rhs.m23 + lhs.m03;
res.m10 = lhs.m10 * rhs.m00 + lhs.m11 * rhs.m10 + lhs.m12 * rhs.m20;
res.m11 = lhs.m10 * rhs.m01 + lhs.m11 * rhs.m11 + lhs.m12 * rhs.m21;
res.m12 = lhs.m10 * rhs.m02 + lhs.m11 * rhs.m12 + lhs.m12 * rhs.m22;
res.m13 = lhs.m10 * rhs.m03 + lhs.m11 * rhs.m13 + lhs.m12 * rhs.m23 + lhs.m13;
res.m20 = lhs.m20 * rhs.m00 + lhs.m21 * rhs.m10 + lhs.m22 * rhs.m20;
res.m21 = lhs.m20 * rhs.m01 + lhs.m21 * rhs.m11 + lhs.m22 * rhs.m21;
res.m22 = lhs.m20 * rhs.m02 + lhs.m21 * rhs.m12 + lhs.m22 * rhs.m22;
res.m23 = lhs.m20 * rhs.m03 + lhs.m21 * rhs.m13 + lhs.m22 * rhs.m23 + lhs.m23;
res.m30 = 0;
res.m31 = 0;
res.m32 = 0;
res.m33 = 1;
return res;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment