38#ifdef OSG_USE_FLOAT_PLANE
51 enum { num_components = 3 };
58 inline Plane() { _fv[0]=0.0; _fv[1]=0.0; _fv[2]=0.0; _fv[3]=0.0; _lowerBBCorner = 0; _upperBBCorner = 0; }
100 if (&pl==
this)
return *
this;
105 inline void set(
const Plane& pl) { _fv[0]=pl.
_fv[0]; _fv[1]=pl.
_fv[1]; _fv[2]=pl.
_fv[2]; _fv[3]=pl.
_fv[3]; calculateUpperLowerBBCorners(); }
108 inline void set(
const Vec4f& vec) {
set(vec[0],vec[1],vec[2],vec[3]); }
109 inline void set(
const Vec4d& vec) {
set(vec[0],vec[1],vec[2],vec[3]); }
117 if (length>1e-6) norm/= length;
118 else norm.
set(0.0,0.0,0.0);
119 set(norm[0],norm[1],norm[2],-(v1*norm));
124 value_type d = -norm[0]*point[0] - norm[1]*point[1] - norm[2]*point[2];
125 set(norm[0],norm[1],norm[2],d);
135 calculateUpperLowerBBCorners();
142 value_type inv_length = 1.0 / sqrt(_fv[0]*_fv[0] + _fv[1]*_fv[1]+ _fv[2]*_fv[2]);
143 _fv[0] *= inv_length;
144 _fv[1] *= inv_length;
145 _fv[2] *= inv_length;
146 _fv[3] *= inv_length;
153 _upperBBCorner = (_fv[0]>=0.0?1:0) |
157 _lowerBBCorner = (~_upperBBCorner)&7;
168 inline bool operator == (
const Plane& plane)
const {
return _fv[0]==plane.
_fv[0] && _fv[1]==plane.
_fv[1] && _fv[2]==plane.
_fv[2] && _fv[3]==plane.
_fv[3]; }
170 inline bool operator != (
const Plane& plane)
const {
return _fv[0]!=plane.
_fv[0] || _fv[1]!=plane.
_fv[1] || _fv[2]!=plane.
_fv[2] || _fv[3]!=plane.
_fv[3]; }
174 inline bool operator < (
const Plane& plane)
const
176 if (_fv[0]<plane.
_fv[0])
return true;
177 else if (_fv[0]>plane.
_fv[0])
return false;
178 else if (_fv[1]<plane.
_fv[1])
return true;
179 else if (_fv[1]>plane.
_fv[1])
return false;
180 else if (_fv[2]<plane.
_fv[2])
return true;
181 else if (_fv[2]>plane.
_fv[2])
return false;
182 else return (_fv[3]<plane.
_fv[3]);
191 inline value_type& operator [] (
unsigned int i) {
return _fv[i]; }
192 inline value_type operator [] (
unsigned int i)
const {
return _fv[i]; }
238 inline int intersect(
const std::vector<Vec3f>& vertices)
const
240 if (vertices.empty())
return -1;
245 for(std::vector<Vec3f>::const_iterator itr=vertices.begin();
246 itr != vertices.end();
249 float d = distance(*itr);
250 if (d>0.0f) ++noAbove;
251 else if (d<0.0f) ++noBelow;
257 if (noBelow>0)
return 0;
267 inline int intersect(
const std::vector<Vec3d>& vertices)
const
269 if (vertices.empty())
return -1;
274 for(std::vector<Vec3d>::const_iterator itr=vertices.begin();
275 itr != vertices.end();
278 double d = distance(*itr);
279 if (d>0.0) ++noAbove;
280 else if (d<0.0) ++noBelow;
286 if (noBelow>0)
return 0;
298 float d = distance(bs.
center());
300 if (d>bs.
radius())
return 1;
301 else if (d<-bs.
radius())
return -1;
313 if (distance(bb.
corner(_lowerBBCorner))>0.0f)
return 1;
316 if (distance(bb.
corner(_upperBBCorner))<0.0f)
return -1;
334 transformProvidingInverse(inverse);
342 Vec4_type vec(_fv[0],_fv[1],_fv[2],_fv[3]);
Definition BoundingBox:34
const vec_type corner(unsigned int pos) const
Definition BoundingBox:149
Definition BoundingSphere:35
vec_type & center()
Definition BoundingSphere:83
value_type & radius()
Definition BoundingSphere:89
bool invert(const Matrixd &rhs)
Definition Matrixd:233
A plane class. It can be used to represent an infinite plane.
Definition Plane:34
Plane(const Vec3_type &v1, const Vec3_type &v2, const Vec3_type &v3)
Constructor.
Definition Plane:89
Plane(const Vec3_type &norm, value_type d)
Constructor.
Definition Plane:79
int intersect(const BoundingBox &bb) const
Definition Plane:310
Plane(const Vec3_type &norm, const Vec3_type &point)
Constructor.
Definition Plane:96
int intersect(const BoundingSphere &bs) const
Definition Plane:296
void set(const Vec4d &vec)
Definition Plane:109
void set(const Plane &pl)
Definition Plane:105
Plane(value_type a, value_type b, value_type c, value_type d)
Constructor.
Definition Plane:63
double dotProductNormal(const osg::Vec3d &v) const
Definition Plane:227
Vec4_type asVec4() const
Definition Plane:189
void calculateUpperLowerBBCorners()
Definition Plane:151
void set(const Vec3_type &norm, const Vec3_type &point)
Definition Plane:122
Plane(const Vec4f &vec)
Constructor.
Definition Plane:68
int intersect(const std::vector< Vec3f > &vertices) const
Definition Plane:238
int intersect(const std::vector< Vec3d > &vertices) const
Definition Plane:267
const value_type * ptr() const
Definition Plane:187
double distance(const osg::Vec3d &v) const
Definition Plane:210
value_type * ptr()
Definition Plane:186
Vec3d Vec3_type
Definition Plane:46
Vec4d Vec4_type
Definition Plane:47
void set(const Vec4f &vec)
Definition Plane:108
float distance(const osg::Vec3f &v) const
Definition Plane:200
void flip()
Definition Plane:129
unsigned int _lowerBBCorner
Definition Plane:355
void transform(const osg::Matrix &matrix)
Definition Plane:330
float dotProductNormal(const osg::Vec3f &v) const
Definition Plane:219
void set(const Vec3_type &norm, double d)
Definition Plane:111
double value_type
Definition Plane:45
void set(const Vec3_type &v1, const Vec3_type &v2, const Vec3_type &v3)
Definition Plane:113
Plane()
Default constructor.
Definition Plane:58
Plane(const Vec4d &vec)
Constructor.
Definition Plane:72
void transformProvidingInverse(const osg::Matrix &matrix)
Definition Plane:339
bool valid() const
Checks if all internal values describing the plane have valid numbers.
Definition Plane:165
unsigned int _upperBBCorner
Definition Plane:354
void makeUnitLength()
Definition Plane:140
void set(value_type a, value_type b, value_type c, value_type d)
Definition Plane:106
Plane(const Plane &pl)
Definition Plane:59
value_type _fv[4]
Definition Plane:351
bool isNaN() const
Definition Plane:166
Vec3_type getNormal() const
Definition Plane:195
value_type & z()
Definition Vec3d:87
void set(value_type x, value_type y, value_type z)
Definition Vec3d:72
value_type & x()
Definition Vec3d:85
value_type & y()
Definition Vec3d:86
value_type length() const
Definition Vec3d:181
value_type & z()
Definition Vec3f:82
value_type & y()
Definition Vec3f:81
value_type & x()
Definition Vec3f:80
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
bool isNaN(float v)
Definition Math:133
#define OSG_EXPORT
Definition osg/Export:39