Main Page | Class Hierarchy | Class List | File List | Class Members

media3d.h

00001 /* ************************************************************************* 00002 media3d.h - description 00003 ------------------- 00004 begin : Wed Oct 16 2002 00005 copyright : (C) 2002 by Micha Riser 00006 email : mriser@gmx.net 00007 00008 $Id: media3d_8h-source.html,v 1.1 2005/02/04 21:02:27 micha Exp $ 00009 00010 ************************************************************************* */ 00011 00012 /* ************************************************************************* 00013 * * 00014 * This program is free software; you can redistribute it and/or modify * 00015 * it under the terms of the GNU General Public License as published by * 00016 * the Free Software Foundation; either version 2 of the License, or * 00017 * (at your option) any later version. * 00018 * * 00019 ************************************************************************* */ 00020 00021 #ifndef MEDIA3D_H 00022 #define MEDIA3D_H 00023 00024 #include<vector> 00025 00026 #include "transparenttransformatable.h" 00027 #include "vector.h" 00028 #include "ray.h" 00029 #include "colour.h" 00030 #include "cameraray.h" 00031 #include "lightsource.h" 00032 #include "statistics.h" 00033 #include "pigment3d.h" 00034 00038 class Media3D: public TransparentTransformatable { 00039 00040 public: // Static members 00041 static HitStatistics evaluations; 00042 00043 public: // Public type definitions 00044 enum scattertype { 00045 NONE, 00046 ISOTROPIC, 00047 RAYLEIGH, 00048 MIE_HAZY, 00049 MIE_MURKY, 00050 HENYEY_GREENSTEIN 00051 }; 00052 00053 enum samplingmethod { 00054 LINEAR, 00055 RECURSIVE 00056 }; 00057 00058 public: // Constructors and destructor 00059 Media3D(DBL jitteramouth, CLR tol, FLT variancekeepfactor, samplingmethod m): 00060 jitter(jitteramouth), coltolerance(tol), varkeep(variancekeepfactor), 00061 method(m) {} 00062 00063 virtual ~Media3D() {} 00064 00065 private: 00066 Media3D& operator=(const Media3D&); 00067 00068 public: // Public methods 00071 virtual Media3D* copy() const = 0; 00072 00075 Colour sample(DBL start, DBL end, const CameraRay& r, Colour& absorb); 00076 00079 void sample(DBL start, DBL end, const LightRay& r, Colour& absorb); 00080 00081 public: // Pure virtual methods 00084 virtual Colour evaluateEmit(const Vector3& p, const CameraRay& r, CLR allowederror, FLT& ilength) const = 0; 00085 00088 virtual Colour evaluateAbsorb(const Vector3& p) const = 0; 00089 00090 protected: // Protected attributes 00091 DBL jitter; 00092 CLR coltolerance; 00093 FLT varkeep; 00094 samplingmethod method; 00095 00096 private: // Private Methods 00097 Colour sampleRecursive( 00098 const CameraRay& ray, DBL l, DBL m, DBL r, 00099 const Colour&, const Colour&, const Colour&, 00100 Colour&, const DBL il); 00101 00102 void sampleRecursive(const LightRay& ray, DBL l, DBL m, DBL r, 00103 const Colour&, const Colour&, const Colour&, Colour& end_absorb); 00104 00105 Colour simps(const Colour& c1, const Colour& c2, const Colour& c3); 00106 Colour simpsExp(const Colour& c1, const Colour& c2, const Colour& c3, 00107 const Colour& a1, const Colour& a2, const Colour& a3, 00108 DBL h); 00109 00110 }; 00111 00115 class Media3DSingle : public Media3D { 00116 00117 public: // Constructors and destructor 00118 Media3DSingle(const Colour& emitting, const Colour& absorbing, 00119 const Colour& scattering, scattertype t, const Scene* s, 00120 DBL jitter, CLR tol, FLT variancekeep, samplingmethod m); 00121 00122 ~Media3DSingle(); 00123 00124 private: 00125 Media3DSingle(const Media3DSingle&); 00126 00127 public: // Public methods (inherited from Media3D) 00128 00129 void setDensity(Pigment3D* map) {delete(density); density = map;} 00130 00131 Media3D* copy() const {return new Media3DSingle(*this);} 00132 Colour evaluateEmit(const Vector3& p, const CameraRay& r, CLR maxerror, FLT& ilength) const; 00133 Colour evaluateAbsorb(const Vector3& p) const; 00134 00135 private: // Private attributes 00136 Colour emit, absorb, scatter; 00137 Pigment3D* density; 00138 const Scene* scene; 00139 scattertype stype; 00140 }; 00141 00142 00146 class Media3DMultiple: public Media3D { 00147 00148 public: // Constructor and destructor 00149 Media3DMultiple(DBL jitteramouth, CLR tol, FLT variancekeep, samplingmethod m); 00150 00151 Media3DMultiple(const Media3D* m); 00152 00153 ~Media3DMultiple(); 00154 00155 private: 00156 Media3DMultiple(const Media3DMultiple& m); 00157 00158 public: // Public methods 00159 00160 void addMedia(const Media3D* m) { 00161 list.push_back(m); 00162 } 00163 00164 // Inherited from Media3D 00165 Media3D* copy() const {return new Media3DMultiple(*this);} 00166 Colour evaluateEmit(const Vector3& p, const CameraRay& r, CLR maxerror, FLT& ilength) const; 00167 Colour evaluateAbsorb(const Vector3& p) const; 00168 00169 00170 private: // Private attributes 00171 std::vector<const Media3D*> list; 00172 00173 }; 00174 00175 #endif

Generated on Thu Jan 27 12:16:05 2005 for raytracer.kdevelop by doxygen 1.3.8