public Mat3 RotateAround(Vec3 axis, float angle) { // rotate into world space var quaternion = Quat.FromRotationAxis(axis, 0).Conjugate(); var worldSpaceMatrix = this.Multiply(FromQuaternion(quaternion)); // rotate back to matrix space quaternion = Quat.FromRotationAxis(axis, angle); var qMat = Mat3.FromQuaternion(quaternion); worldSpaceMatrix = worldSpaceMatrix.Multiply(qMat); return(worldSpaceMatrix); }
public static Mat4 FromRigidTransform(RigidTransform3 transform) { return(Mat4.FromAffineTransform(Mat3.FromQuaternion(transform.rotation), transform.position)); }