initial commit of the fluid simulator.
[blender.git] / intern / elbeem / intern / ntl_raytracer.h
1 /******************************************************************************
2  *
3  * El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
4  * Copyright 2003,2004 Nils Thuerey
5  *
6  * Main renderer class
7  *
8  *****************************************************************************/
9 #ifndef NTL_RAYTRACER_HH
10 #define NTL_RAYTRACER_HH
11
12 #include "ntl_vector3dim.h"
13 #include "ntl_ray.h"
14 #include "ntl_geometryobject.h"
15 #include "ntl_lightobject.h"
16 #include "ntl_renderglobals.h"
17 #include "ntl_material.h"
18 #include "simulation_object.h"
19 class ntlOpenGLRenderer;
20
21 class ntlRaytracer
22 {
23         public:
24                 /*! Constructor */
25                 ntlRaytracer(string filename, bool commandlineMode);
26                 /*! Destructor */
27                 virtual ~ntlRaytracer( void );
28
29                 /*! render a whole animation (command line mode) */
30                 int renderAnimation( void );
31                 /*! render a whole animation (visualization mode) */
32                 int renderVisualization( bool );
33                 /*! render a single step for viz mode */
34                 int singleStepVisualization( void );
35                 /*! advance simulations by time frame time */
36                 int advanceSims();
37                 /*! advance simulations by a single step */
38                 void singleStepSims(double targetTime);
39
40                 /*! set stop rend viz flag */
41                 void setStopRenderVisualization(bool set) { mStopRenderVisualization = set; }
42                 /*! should the rendering viz thread be stopped? */
43                 bool getStopRenderVisualization() { return mStopRenderVisualization; }
44
45                 /*! render scene (a single pictures) */
46                 virtual int renderScene( void );
47
48                 /*! display world with opengl */
49                 //int draw( void );
50                 /*! set single frame rendering to filename */
51                 void setSingleFrameOut( string singleframeFilename );
52
53                 /* access functions */
54
55                 /*! set&get render globals */
56                 inline void setRenderGlobals( ntlRenderGlobals *set) { mpGlob = set; }
57                 inline ntlRenderGlobals *getRenderGlobals( void )    { return mpGlob; }
58
59                 /*! set&get render globals */
60                 inline void setSimulationTime( double set) { mSimulationTime = set; }
61                 inline double getSimulationTime( void ) { return mSimulationTime; }
62
63                 /*! set&get single step debug mode */
64                 inline void setSingleStepDebug( bool set) { mSingleStepDebug = set; }
65                 inline bool getSingleStepDebug( void ) { return mSingleStepDebug; }
66
67                 /*! &get simulation object vector (debugging) */
68                 inline vector<SimulationObject*> *getSimulations( void ) { return mpSims; }
69
70                 /*! get opengl renderer */
71                 inline ntlOpenGLRenderer *getOpenGLRenderer() { return mpOpenGLRenderer; }
72
73         private:
74
75         protected:
76
77                 /*! global render settings needed almost everywhere */
78                 ntlRenderGlobals        *mpGlob;
79
80                 /*! a list of lights in the scene (geometry is store in ntl_scene) */
81                 vector<ntlLightObject*> *mpLightList;
82                 /*! surface materials */
83                 vector<ntlMaterial*>    *mpPropList;
84                 /*! sims list */
85                 vector<SimulationObject*> *mpSims;
86
87                 /*! opengl display */
88                 ntlOpenGLRenderer *mpOpenGLRenderer;
89
90                 /*! stop rend viz? */
91                 bool mStopRenderVisualization;
92
93                 /*! rend viz thread currently running? */
94                 bool mThreadRunning;
95
96                 /*! remember the current simulation time */
97                 double mSimulationTime;
98                 /*! first simulation that is valid */
99                 int mFirstSim;
100
101                 /*! single step mode for debugging */
102                 bool mSingleStepDebug;
103 };
104
105 #endif