00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef TOXIC_RENDERER_IPHOTONTRACER_H
00024 #define TOXIC_RENDERER_IPHOTONTRACER_H
00025
00026 #include "common/misc/progressmonitor.h"
00027 #include "globals.h"
00028
00029 namespace toxic {
00030
00031 class Color3;
00032 class Context;
00033 class ILight;
00034 class PhotonMap;
00035 class Ray;
00036 class Scene;
00037
00038 class IPhotonTracer {
00039 public:
00040 virtual ~IPhotonTracer() {}
00041
00042
00043
00044 virtual void BuildPhotonMap(
00045 const Context &context,
00046 PhotonMap *photonmap,
00047 const Scene *scene,
00048 int photon_count,
00049 sheep::ProgressMonitor *progmon = 0
00050 ) const;
00051
00052 protected:
00053 virtual void emit_photons(
00054 const Context &context,
00055 PhotonMap *photonmap,
00056 const Scene *scene,
00057 const ILight *light,
00058 int photon_count,
00059 sheep::ProgressMonitor *progmon
00060 ) const;
00061
00062 virtual void trace_photon(
00063 const Context &context,
00064 PhotonMap *photonmap,
00065 const Scene *scene,
00066 Ray ray,
00067 Color3 power
00068 ) const = 0;
00069 };
00070
00071 #include "iphotontracer.inl"
00072
00073 }
00074
00075 #endif // !TOXIC_RENDERER_IPHOTONTRACER_H