//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)); }
public Fix64Mat4x4(Fix64Vec4 _x, Fix64Vec4 _y, Fix64Vec4 _z, Fix64Vec4 _w) { x = _x; y = _y; z = _z; w = _w; }
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)); }
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); }