Beispiel #1
0
        //https://stackoverflow.com/a/51586282/1368748
        public static Fix64Mat4x4 FromTRS(Fix64Vec3 translation, Fix64Quat rotation, Fix64Vec3 scale)
        {
            Fix64 x1 = translation.x;
            Fix64 y1 = translation.y;
            Fix64 z1 = translation.z;
            Fix64 x2 = scale.x;
            Fix64 y2 = scale.y;
            Fix64 z2 = scale.z;

            Fix64Mat3x3 rot = new Fix64Mat3x3(rotation);
            Fix64       a11 = rot.x.x;
            Fix64       a21 = rot.x.y;
            Fix64       a31 = rot.x.z;
            Fix64       a12 = rot.y.x;
            Fix64       a22 = rot.y.y;
            Fix64       a32 = rot.y.z;
            Fix64       a13 = rot.z.x;
            Fix64       a23 = rot.z.y;
            Fix64       a33 = rot.z.z;


            Fix64Vec4 _x = new Fix64Vec4(x2 * a11, x2 * a21, x2 * a31, Fix64.zero);
            Fix64Vec4 _y = new Fix64Vec4(y2 * a12, y2 * a22, y2 * a32, Fix64.zero);
            Fix64Vec4 _z = new Fix64Vec4(z2 * a13, z2 * a23, z2 * a33, Fix64.zero);
            Fix64Vec4 _w = new Fix64Vec4(x1, y1, z1, Fix64.one);

            return(new Fix64Mat4x4(_x, _y, _z, _w));
        }
Beispiel #2
0
 public Fix64Mat4x4(Fix64Vec4 _x, Fix64Vec4 _y, Fix64Vec4 _z, Fix64Vec4 _w)
 {
     x = _x;
     y = _y;
     z = _z;
     w = _w;
 }
Beispiel #3
0
        public static Fix64Mat4x4 operator *(Fix64Mat4x4 a, Fix64Mat4x4 b)
        {
            Fix64Vec4 _x = a * b.x;
            Fix64Vec4 _y = a * b.y;
            Fix64Vec4 _z = a * b.z;
            Fix64Vec4 _w = a * b.w;

            return(new Fix64Mat4x4(_x, _y, _z, _w));
        }
Beispiel #4
0
        public static Fix64Vec4 operator *(Fix64Mat4x4 a, Fix64Vec4 v)
        {
            Fix64Vec4 r = v.x * a.x + v.y * a.y + v.z * a.z + v.w * a.w;

            return(r);
        }