40 lines
1021 B
C
40 lines
1021 B
C
|
// Copyright (c) 2013-2014 Sundog Software, LLC. All rights reserved worldwide.
|
||
|
|
||
|
#ifndef TRITON_OREINTED_BOUNDING_BOX_H
|
||
|
#define TRITON_OREINTED_BOUNDING_BOX_H
|
||
|
|
||
|
/** \file OrientedBoundingBox.h
|
||
|
\brief A class describing an oriented bounding box.
|
||
|
*/
|
||
|
|
||
|
#include "TritonCommon.h"
|
||
|
#include "Vector3.h"
|
||
|
#include "Matrix3.h"
|
||
|
|
||
|
namespace Triton
|
||
|
{
|
||
|
/** An oriented bounding box defined by a center point and three axes. */
|
||
|
class OrientedBoundingBox : public MemObject
|
||
|
{
|
||
|
public:
|
||
|
/** Constructor. */
|
||
|
OrientedBoundingBox();
|
||
|
|
||
|
/** Define the OBB by a center point and vectors from center to extents in X, Y, and Z. */
|
||
|
void Set(const Vector3& center, const Vector3& xExtent, const Vector3& yExtent, const Vector3& zExtent);
|
||
|
|
||
|
/** Test if a point is enclosed by the box. */
|
||
|
bool PointInBox(const Vector3& point, double slop) const;
|
||
|
|
||
|
/** Recomputes the basis used for PointInBox */
|
||
|
void RecomputeBasis();
|
||
|
|
||
|
Vector3 center;
|
||
|
Vector3 axes[3];
|
||
|
double halfDistances[3];
|
||
|
Matrix3 invBasis;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#endif
|