Sphere.h

Go to the documentation of this file.
00001 /* $Id: Sphere.h,v 1.3 2002/11/05 14:31:15 anonymous Exp $ */
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 /* density */) const; 
00025         virtual void  _duplicate_attributes (const Geometry&);
00026         virtual void  _rotateX   (float /* angle */);
00027         virtual void  _rotateY   (float /* angle */);
00028         virtual void  _rotateZ   (float /* angle */);
00029         virtual void  _rotate    (float /* angle */,const Vector3& /* axis */);
00030         virtual void  _rotate    (const Matrix3&);
00031         virtual void  _translate (float /* x */, float /* y */, float /* z */);
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 }; // namespace
00151 
00152 #endif // __SPHERE_H

Generated on Wed Jun 28 12:24:28 2006 for esg by  doxygen 1.4.6