/// <summary> /// Uses the supportMapping to calculate the bounding box. Should be overidden /// to make this faster. /// </summary> /// <param name="orientation">The orientation of the shape.</param> /// <param name="box">The resulting axis aligned bounding box.</param> public virtual void GetBoundingBox(ref FPMatrix orientation, out FPBBox box) { // I don't think that this can be done faster. // 6 is the minimum number of SupportMap calls. FPVector vec = FPVector.zero; vec.Set(orientation.M11, orientation.M21, orientation.M31); SupportMapping(ref vec, out vec); box.max.x = orientation.M11 * vec.x + orientation.M21 * vec.y + orientation.M31 * vec.z; vec.Set(orientation.M12, orientation.M22, orientation.M32); SupportMapping(ref vec, out vec); box.max.y = orientation.M12 * vec.x + orientation.M22 * vec.y + orientation.M32 * vec.z; vec.Set(orientation.M13, orientation.M23, orientation.M33); SupportMapping(ref vec, out vec); box.max.z = orientation.M13 * vec.x + orientation.M23 * vec.y + orientation.M33 * vec.z; vec.Set(-orientation.M11, -orientation.M21, -orientation.M31); SupportMapping(ref vec, out vec); box.min.x = orientation.M11 * vec.x + orientation.M21 * vec.y + orientation.M31 * vec.z; vec.Set(-orientation.M12, -orientation.M22, -orientation.M32); SupportMapping(ref vec, out vec); box.min.y = orientation.M12 * vec.x + orientation.M22 * vec.y + orientation.M32 * vec.z; vec.Set(-orientation.M13, -orientation.M23, -orientation.M33); SupportMapping(ref vec, out vec); box.min.z = orientation.M13 * vec.x + orientation.M23 * vec.y + orientation.M33 * vec.z; }
public static void Set(this FPVector jVector, FPVector otherVector) { jVector.Set(otherVector.x, otherVector.y, otherVector.z); }