private Transpose ( M m, M transposed ) : void | ||
m | M | |
transposed | M | |
return | void |
static unsafe void Transpose(M* m, M* transposed)
{
//A weird function! Why?
//1) Missing some helpful instructions for actual SIMD accelerated transposition.
//2) Difficult to get SIMD types to generate competitive codegen due to lots of componentwise access.
float m12 = m->M12;
float m13 = m->M13;
float m23 = m->M23;
transposed->M11 = m->M11;
transposed->M12 = m->M21;
transposed->M13 = m->M31;
transposed->M21 = m12;
transposed->M22 = m->M22;
transposed->M23 = m->M32;
transposed->M31 = m13;
transposed->M32 = m23;
transposed->M33 = m->M33;
}
Matrix3x3::Transpose ( |
public static void InvertRigid(ref AffineTransform transform, out AffineTransform inverse) { Matrix3x3.Transpose(ref transform.LinearTransform, out inverse.LinearTransform); Matrix3x3.Transform(ref transform.Translation, ref inverse.LinearTransform, out inverse.Translation); inverse.Translation = -inverse.Translation; }