00001
00002
00003 #ifndef __POINT_3D_H
00004 #define __POINT_3D_H
00005
00006 #include <esg/geometry/Geometry.h>
00007 #include <esg/mesh/PointMesh.h>
00008 #include <math.h>
00009
00010 namespace esg {
00011
00016 class OGSCENE_EXPORT Point3D : public Geometry {
00017 protected:
00018 Vector3 _position;
00019
00020 protected:
00021 virtual Mesh* _mesh (int ) const { return new PointMesh(_position); }
00022 virtual void _duplicate_attributes (const Geometry&);
00023 virtual void _rotateX (float );
00024 virtual void _rotateY (float );
00025 virtual void _rotateZ (float );
00026 virtual void _rotate (float ,const Vector3& );
00027 virtual void _rotate (const Matrix3&);
00028 virtual void _translate (float , float , float );
00029 virtual void _transform (const Matrix4&);
00030 virtual void _scale (float);
00031
00032 public:
00036 Point3D ();
00037
00043 Point3D (const Vector3& v);
00044
00052 Point3D (float x, float y, float z);
00053
00061 Point3D (double x, double y, double z);
00062
00066 virtual ~Point3D() {}
00067
00068 virtual void rayIntersection (PointEnv* pPE,
00069 int mask,
00070 const Vector3& origin,
00071 const Vector3& direction,
00072 float maxD = MAXFLOAT);
00073
00074 virtual bool mapToUV (const Vector3& v, Vector2& uv);
00075
00076 virtual void randomSample (int mask, PointEnv& pe, double* pdf);
00077
00078 virtual bool randomDirection (const Vector3& pov,
00079 Vector3& dir,
00080 double* pdf);
00081
00082 virtual Interval extent (const Vector3& direction) const;
00083
00084 virtual Vector3 centroid (void) const;
00085
00086 virtual double radius (void) const;
00087
00088 virtual double radius (const Vector3& centroid) const;
00089
00090 virtual Geometry* clone (const Matrix4* pTrMat) const;
00091
00092 virtual bool separation (Geometry& geom, Vector3* pDir);
00093
00094 virtual double distance (const Geometry& geom, Vector3* pDir);
00095
00096 virtual void dump (const char* intent, const char* tab);
00097
00101 void setPosition(const Vector3& p) {
00102 _position.set(p);
00103 }
00104
00110 void setPosition(float x, float y, float z) {
00111 _position.set(x,y,z);
00112 }
00113
00117 Vector3 getPosition() const {
00118 return _position;
00119 }
00120 };
00121
00122 };
00123
00124 #endif // __POINT_3D_H