56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __NPLANE__
|
|
#define __NPLANE__
|
|
|
|
|
|
#include "math/vector.h"
|
|
|
|
|
|
namespace GS {
|
|
|
|
/*!
|
|
@short Plane.
|
|
ax + by + cz + d = 0
|
|
@author Emmanuel Julien (ejulien@nworks.fr)
|
|
*/
|
|
|
|
class Plane
|
|
{
|
|
float d; ///< Distance to origin.
|
|
Vector4 p, n; ///< Point in plane and normal.
|
|
|
|
public:
|
|
|
|
/// Return plane normal.
|
|
inline const Vector4 &GetNormal() const
|
|
{ return n; }
|
|
|
|
/*!
|
|
@short Return point distance to plane.
|
|
|
|
Distance is signed, positive when the point is in front of the plane,
|
|
negative otherwise.
|
|
*/
|
|
inline float DistanceToPlane(const Vector4 &p) const
|
|
{ return p.Dot(n) + d; }
|
|
|
|
/// Set plane from point/normal and an optional transformation matrix.
|
|
void Set(const Vector4 *_p, const Vector4 &_n, const Matrix4 * = 0);
|
|
/// Set plane three vectors and an optional transformation matrix.
|
|
void Set(const Vector4 _p[3], const Matrix4 * = 0);
|
|
|
|
Plane();
|
|
Plane(const Vector4 &_p, const Vector4 &_n, const Matrix4 *_m = 0)
|
|
{ Set(&_p, _n, _m); }
|
|
};
|
|
|
|
} // GS
|
|
|
|
|
|
#endif // __NPLANE__
|