PrimitiveRep.h

00001 
00007 #ifndef PRIMITIVE_REP_H
00008 #define PRIMITIVE_REP_H
00009 
00010 
00011 /*
00012 ** ---------------------------------------------------------------
00013 ** Includes:
00014 */
00015 #include <iostream>
00016 #include "Vector3.h"
00017 #include "AffineTransform.h"
00018 
00019 /*
00020 ** ---------------------------------------------------------------
00021 ** Definitions:
00022 */
00023 
00024 #define PRIM_IN  1
00025 #define PRIM_OUT -1
00026 #define PRIM_ON  0
00027 
00028 
00029 using namespace std;
00030 
00032 
00042 class PrimitiveRep {
00043 
00044 
00045 public:
00046 
00048         const AffineTransform &td() const;
00050         const AffineTransform &ti() const;
00051 
00053         virtual void transform( const AffineTransform &md, const AffineTransform &mi);
00054 
00055 
00057         int id(PrimitiveRep *p) const = 0;
00059         Box3d bbox() const = 0;
00061         virtual int classify( Vector3 q) const = 0;
00063         virtual Vector3 point( Real u, Real v) const = 0;
00065         virtual Vector3 normal( Real u, Real v) const = 0;
00067         virtual Vector3 gradient( const Vector3 &q) const = 0;
00069         virtual Inode *intersect( const Ray &r) const = 0;
00071         virtual Poly   *uv_decomp( Real level) const = 0;
00073         virtual Vector3 texc( Real u, Real v) const = 0;
00075         virtual Vector3 du( Real u, Real v) const = 0;
00077         virtual Vector3 dv( Real u, Real v) const = 0;
00079         virtual AffineTransform local(PrimitiveRep *p) const = 0;
00080 
00082         virtual ofstream &operator<<(ofstream &out) = 0;
00083 
00084 protected :
00085 
00087         Box3d b;
00089         AffineTransform &td;
00091         AffineTransform &ti;
00092 };
00093 
00094 inline const AffineTransform &
00095 PrimitiveRep::td() const { return td;}
00096         
00097 inline const AffineTransform &
00098 PrimitiveRep::ti() const { return ti;}
00099 
00100 inline void
00101 PrimitiveRep::transform(Prim *p, const AffineTransform &md, const AffineTransform &mi)
00102 {
00103         td = md*td;
00104         ti = ti*mi;
00105 }
00106 
00107 #endif //PRIMITIVE_REP_H

Generated on Thu Jul 5 00:16:33 2007 for S3D by  doxygen 1.4.6