00001
00002
00003 #ifndef __SPHERE_H
00004 #define __SPHERE_H
00005
00006 #include <esg/geometry/Geometry.h>
00007 #include <esg/List.h>
00008
00009 namespace esg {
00010
00015 class OGSCENE_EXPORT Sphere : public Geometry {
00016 protected:
00017 float _radius;
00018 float _radius2;
00019 double _epsPlus;
00020 double _epsMinus;
00021 Vector3 _centre;
00022
00023 protected:
00024 virtual Mesh* _mesh (int ) const;
00025 virtual void _duplicate_attributes (const Geometry&);
00026 virtual void _rotateX (float );
00027 virtual void _rotateY (float );
00028 virtual void _rotateZ (float );
00029 virtual void _rotate (float ,const Vector3& );
00030 virtual void _rotate (const Matrix3&);
00031 virtual void _translate (float , float , float );
00032 virtual void _transform (const Matrix4&);
00033 virtual void _scale (float);
00034
00035 public:
00039 Sphere ();
00040
00047 Sphere (const Vector3& c, float r);
00048
00057 Sphere (float x, float y, float z, float r);
00058
00064 Sphere (const Geometry& g);
00065
00072 Sphere (const Geometry& g1, const Geometry& g2);
00073
00079 Sphere (SceneGraphObject& obj);
00080
00086 Sphere (List<SceneGraphObject>& list);
00087
00088 virtual void rayIntersection (PointEnv* pPE,
00089 int mask,
00090 const Vector3& origin,
00091 const Vector3& direction,
00092 float maxD = MAXFLOAT);
00093
00094 virtual bool mapToUV (const Vector3& v, Vector2& uv);
00095
00096
00097
00098 virtual void randomSample (int mask, PointEnv& pe, double* pdf);
00099
00100 virtual bool randomDirection (const Vector3& pov,
00101 Vector3& dir,
00102 double* pdf);
00103
00104 virtual Interval extent (const Vector3& direction) const;
00105
00106 virtual Vector3 centroid (void) const;
00107
00108 virtual double radius (void) const;
00109
00110 virtual double radius (const Vector3& centroid) const;
00111
00112 virtual Geometry* clone (const Matrix4* pTrMat) const;
00113
00114 virtual bool separation (Geometry& geom, Vector3* pDir);
00115
00116 virtual double distance (const Geometry& geom, Vector3* pDir);
00117
00118 virtual void dump (const char* intent, const char* tab);
00119
00123 Vector3 centre (void) const { return _centre; }
00124
00128 void setCentre(const Vector3&);
00129
00135 void setCentre(float x, float y, float z);
00136
00140 void setRadius(float radius);
00141
00145 virtual void __debug() {
00146 fprintf(stderr,"Sphere: %f %f %f, %f\n", _centre.x,_centre.y,_centre.z,_radius);
00147 }
00148 };
00149
00150 };
00151
00152 #endif // __SPHERE_H