Assignments
Assignments
scene.h
Go to the documentation of this file.
1#ifndef SCENE_INCLUDED
2#define SCENE_INCLUDED
3#include <unordered_map>
4#include <vector>
5#include <Util/geometry.h>
6#include <Image/image.h>
7#include "shape.h"
8#include "light.h"
9#include "shapeList.h"
10#include "keyFrames.h"
11#include "camera.h"
12
13namespace Ray
14{
15 class Material;
16 class Texture;
17 class File;
18 class KeyFrameFile;
19 class Shader;
20 class Vertex;
21
23 std::string ReadDirective( std::istream &stream );
24
26 void UnreadDirective( std::istream &stream , const std::string &directive );
27
29 Shape *ReadShape( std::istream &stream , const std::unordered_map< std::string , Util::BaseFactory< Shape > * > &shapeFactories );
30
33 {
34 public:
37
39 std::vector< Light * > lights;
40
43
45 GlobalSceneData( void );
46
48 ~GlobalSceneData( void );
49
51 static std::unordered_map< std::string , Util::BaseFactory< Light > * > LightFactories;
52 };
53
55 std::ostream &operator << ( std::ostream &stream , const GlobalSceneData &data );
56
58 std::istream &operator >> ( std::istream &stream , GlobalSceneData &data );
59
62 {
63 public:
65 std::vector< Vertex > vertices;
66
68 std::vector< Material > materials;
69
71 std::vector< Texture > textures;
72
74 std::vector< File > files;
75
78
80 template< typename ParameterType >
81 void setKeyFrameEvaluator( void );
82
84 void setCurrentTime( double t , int curveFit );
85
87 LocalSceneData( void );
88
90 ~LocalSceneData( void );
91 };
92
94 std::ostream &operator << ( std::ostream &stream , const LocalSceneData &data );
95
97 std::istream &operator >> ( std::istream &stream , LocalSceneData &data );
98
100 class SceneGeometry : public Shape
101 {
104
107
108 public:
110 void init( void );
111
113 template< typename ParameterType >
114 void setKeyFrameEvaluator( void );
115
117 void setCurrentTime( double t , int curveFit );
118
120 // Shape methods //
122 private:
123 void _write( std::ostream &stream ) const;
124 void _read( std::istream &stream );
125 public:
126 std::string name( void ) const { return "scene geometry"; }
127 void init( const LocalSceneData &sceneData );
128 void initOpenGL( void );
129 void updateBoundingBox( void );
130 bool processFirstIntersection( const Util::Ray3D &ray , const Util::BoundingBox1D &range , const RayIntersectionFilter &rFilter , const RayIntersectionKernel &rKernel , ShapeProcessingInfo spInfo , unsigned int tIdx ) const;
131 int processAllIntersections( const Util::Ray3D &ray , const Util::BoundingBox1D &range , const RayIntersectionFilter &rFilter , const RayIntersectionKernel &rKernel , ShapeProcessingInfo spInfo , unsigned int tIdx ) const;
132 void processOverlapping( const Filter &filter , const Kernel &kernel , ShapeProcessingInfo tInfo ) const;
133 bool isInside( Util::Point3D p ) const;
134 void drawOpenGL( GLSLProgram *glslProgram ) const;
135 };
136
138 class Scene : public SceneGeometry
139 {
140 friend class Window;
141 friend class FileInstance;
142 friend std::ostream &operator << ( std::ostream & , const Scene & );
143 friend std::istream &operator >> ( std::istream & , Scene & );
144
147
148 public:
150 static std::string BaseDir;
151
154
157 static bool Refract( Util::Point3D v , Util::Point3D n , double ir , Util::Point3D& refract );
158
162 Util::Point3D getColor( Util::Ray3D ray , int rDepth , Util::Point3D cLimit , unsigned int lightSamples , unsigned int tIdx );
163
165 Image::Image32 rayTrace( int width , int height , int rLimit , double cLimit , unsigned int lightSamples , bool showProgress );
166
168 void initOpenGL( void );
169
171 void drawOpenGL( void ) const;
172
174 bool processFirstIntersection( const Util::Ray3D &ray , const Util::BoundingBox1D &range , const RayIntersectionFilter &rFilter , const RayIntersectionKernel &rKernel , ShapeProcessingInfo spInfo , unsigned int tIdx ) const;
175 int processAllIntersections( const Util::Ray3D &ray , const Util::BoundingBox1D &range , const RayIntersectionFilter &rFilter , const RayIntersectionKernel &rKernel , ShapeProcessingInfo spInfo , unsigned int tIdx ) const;
176 };
177
179 std::ostream &operator << ( std::ostream &stream , const Scene &scene );
180
182 std::istream &operator >> ( std::istream &stream , Scene &scene );
183
185 class File : public SceneGeometry
186 {
187 friend std::istream &operator >> ( std::istream & , File & );
188 friend class FileInstance;
189 friend class Scene;
190 public:
192 std::string filename;
193 };
194
196 std::ostream &operator << ( std::ostream &stream , const File &file );
197
199 std::istream &operator >> ( std::istream &stream , File &file );
200
202 class Vertex
203 {
204 public:
207
210
213 };
214
216 std::ostream &operator << ( std::ostream &stream , const Vertex &vertex );
217
219 std::istream &operator >> ( std::istream &stream , Vertex &vertex );
220
223 {
224 public:
227
229 double t;
230
233
236
239
241 bool operator < ( const RayShapeIntersectionInfo &iInfo ) const;
242
244 bool operator < ( double t ) const;
245 };
246
249 {
251 friend Scene;
252 friend class File;
253 friend std::ostream &operator << ( std::ostream & , const Material & );
254 friend std::istream &operator >> ( std::istream & , Material & );
255 friend std::istream &operator >> ( std::istream & , Scene & );
256
259 public:
262
265
268
271
274
277
279 double ir;
280
282 const Texture *tex;
283
285 std::string foo;
286
288 Material( void );
289
291 void drawOpenGL( GLSLProgram * glslProgram ) const;
292 };
293
295 std::ostream &operator << ( std::ostream &stream , const Material &material );
296
298 std::istream &operator >> ( std::istream &stream , Material &material );
299
302 {
303 friend Scene;
304 friend Material;
305 friend std::ostream &operator << ( std::ostream & , const Texture & );
306 friend std::istream &operator >> ( std::istream & , Texture & );
307
309 std::string _filename;
310
313
316 public:
318 void initOpenGL( void );
319 };
320
322 std::ostream &operator << ( std::ostream &stream , const Texture &texture );
323
325 std::istream &operator >> ( std::istream &stream , Texture &texture );
326
328 class Shader
329 {
330 public:
333
336
339
341 Shader( void );
342
344 ~Shader( void );
345 };
346
348 std::ostream &operator << ( std::ostream &stream , const Shader &shader );
349
351 std::istream &operator >> ( std::istream &stream , Shader &shader );
352
355 {
356 public:
358 std::string filename;
359
362 };
363
365 std::ostream &operator << ( std::ostream &stream , const KeyFrameFile &keyFrameFile );
366
368 std::istream &operator >> ( std::istream &stream , KeyFrameFile &keyFrameFile );
369}
370
371#include "scene.inl"
372#endif // SCENE_INCLUDED
373
374
Definition: GLSLProgram.h:33
Definition: image.h:35
Definition: camera.h:10
Definition: scene.h:186
friend std::istream & operator>>(std::istream &, File &)
std::string filename
Definition: scene.h:192
Definition: fileInstance.h:11
Definition: scene.h:33
Shader * shader
Definition: scene.h:42
~GlobalSceneData(void)
Definition: scene.cpp:112
Camera camera
Definition: scene.h:36
std::vector< Light * > lights
Definition: scene.h:39
GlobalSceneData(void)
Definition: scene.cpp:110
static std::unordered_map< std::string, Util::BaseFactory< Light > * > LightFactories
Definition: scene.h:51
Definition: scene.h:355
std::string filename
Definition: scene.h:358
KeyFrameMatrices keyFrameMatrices
Definition: scene.h:361
Definition: scene.h:62
KeyFrameFile * keyFrameFile
Definition: scene.h:77
std::vector< Vertex > vertices
Definition: scene.h:65
std::vector< File > files
Definition: scene.h:74
LocalSceneData(void)
Definition: scene.cpp:167
void setCurrentTime(double t, int curveFit)
Definition: scene.cpp:171
std::vector< Material > materials
Definition: scene.h:68
std::vector< Texture > textures
Definition: scene.h:71
void setKeyFrameEvaluator(void)
Definition: scene.inl:7
~LocalSceneData(void)
Definition: scene.cpp:169
Definition: scene.h:249
void drawOpenGL(GLSLProgram *glslProgram) const
Definition: scene.todo.cpp:53
const Texture * tex
Definition: scene.h:282
double ir
Definition: scene.h:279
Util::Point3D ambient
Definition: scene.h:261
friend SceneGeometry
Definition: scene.h:250
double specularFallOff
Definition: scene.h:276
int _texIndex
Definition: scene.h:258
std::string foo
Definition: scene.h:285
friend std::ostream & operator<<(std::ostream &, const Material &)
Material(void)
Definition: scene.cpp:256
Util::Point3D diffuse
Definition: scene.h:264
friend Scene
Definition: scene.h:251
friend std::istream & operator>>(std::istream &, Material &)
Util::Point3D transparent
Definition: scene.h:273
Util::Point3D specular
Definition: scene.h:267
Util::Point3D emissive
Definition: scene.h:270
Definition: scene.h:223
double t
Definition: scene.h:229
Util::Point3D normal
Definition: scene.h:235
RayShapeIntersectionInfo(void)
Definition: scene.cpp:79
bool operator<(const RayShapeIntersectionInfo &iInfo) const
Definition: scene.cpp:81
Util::Point3D position
Definition: scene.h:232
Util::Point2D texture
Definition: scene.h:238
Definition: scene.h:101
void _write(std::ostream &stream) const
Definition: scene.cpp:431
LocalSceneData _localData
Definition: scene.h:103
void updateBoundingBox(void)
Definition: scene.cpp:407
void initOpenGL(void)
Definition: scene.cpp:414
void processOverlapping(const Filter &filter, const Kernel &kernel, ShapeProcessingInfo tInfo) const
Definition: scene.cpp:470
void setKeyFrameEvaluator(void)
Definition: scene.inl:16
int processAllIntersections(const Util::Ray3D &ray, const Util::BoundingBox1D &range, const RayIntersectionFilter &rFilter, const RayIntersectionKernel &rKernel, ShapeProcessingInfo spInfo, unsigned int tIdx) const
Definition: scene.cpp:379
void setCurrentTime(double t, int curveFit)
Definition: scene.cpp:425
std::string name(void) const
Definition: scene.h:126
bool processFirstIntersection(const Util::Ray3D &ray, const Util::BoundingBox1D &range, const RayIntersectionFilter &rFilter, const RayIntersectionKernel &rKernel, ShapeProcessingInfo spInfo, unsigned int tIdx) const
Definition: scene.cpp:374
ShapeList _shapeList
Definition: scene.h:106
void init(void)
Definition: scene.cpp:384
void drawOpenGL(GLSLProgram *glslProgram) const
Definition: scene.cpp:370
bool isInside(Util::Point3D p) const
Definition: scene.cpp:372
void _read(std::istream &stream)
Definition: scene.cpp:437
Definition: scene.h:139
static Util::Point3D Reflect(Util::Point3D v, Util::Point3D n)
Definition: scene.todo.cpp:11
void drawOpenGL(void) const
Definition: scene.cpp:505
GlobalSceneData _globalData
Definition: scene.h:146
static bool Refract(Util::Point3D v, Util::Point3D n, double ir, Util::Point3D &refract)
Definition: scene.todo.cpp:20
Image::Image32 rayTrace(int width, int height, int rLimit, double cLimit, unsigned int lightSamples, bool showProgress)
Definition: scene.cpp:520
bool processFirstIntersection(const Util::Ray3D &ray, const Util::BoundingBox1D &range, const RayIntersectionFilter &rFilter, const RayIntersectionKernel &rKernel, ShapeProcessingInfo spInfo, unsigned int tIdx) const
Definition: scene.cpp:555
static std::string BaseDir
Definition: scene.h:150
void initOpenGL(void)
Definition: scene.cpp:477
friend std::ostream & operator<<(std::ostream &, const Scene &)
int processAllIntersections(const Util::Ray3D &ray, const Util::BoundingBox1D &range, const RayIntersectionFilter &rFilter, const RayIntersectionKernel &rKernel, ShapeProcessingInfo spInfo, unsigned int tIdx) const
Definition: scene.cpp:560
Util::Point3D getColor(Util::Ray3D ray, int rDepth, Util::Point3D cLimit, unsigned int lightSamples, unsigned int tIdx)
Definition: scene.todo.cpp:29
friend std::istream & operator>>(std::istream &, Scene &)
Definition: scene.h:329
GLSLProgram * glslProgram
Definition: scene.h:338
~Shader(void)
Definition: scene.cpp:302
std::string vertexShaderFilename
Definition: scene.h:332
std::string fragmentShaderFilename
Definition: scene.h:335
Shader(void)
Definition: scene.cpp:300
Definition: shape.h:89
std::function< void(const ShapeProcessingInfo &, const Shape &) > Kernel
Definition: shape.h:162
std::function< bool(double) > RayIntersectionFilter
Definition: shape.h:163
std::function< ShapeProcessingInfo::ProcessingType(const ShapeProcessingInfo &, const Shape &) > Filter
Definition: shape.h:161
std::function< void(const ShapeProcessingInfo &, const class RayShapeIntersectionInfo &) > RayIntersectionKernel
Definition: shape.h:164
Definition: shapeList.h:168
Definition: scene.h:302
friend std::istream & operator>>(std::istream &, Texture &)
void initOpenGL(void)
Definition: scene.todo.cpp:67
std::string _filename
Definition: scene.h:309
friend Scene
Definition: scene.h:303
Image::Image32 _image
Definition: scene.h:312
friend std::ostream & operator<<(std::ostream &, const Texture &)
GLuint _openGLHandle
Definition: scene.h:315
friend Material
Definition: scene.h:304
Definition: scene.h:203
Util::Point3D position
Definition: scene.h:206
Util::Point2D texCoordinate
Definition: scene.h:212
Util::Point3D normal
Definition: scene.h:209
Definition: window.h:12
Definition: factory.h:12
Definition: geometry.h:345
Definition: geometry.h:299
Definition: box.h:7
Shape * ReadShape(std::istream &stream, const std::unordered_map< std::string, BaseFactory< Shape > * > &shapeFactories)
Definition: scene.cpp:57
void UnreadDirective(istream &stream, const string &directive)
Definition: scene.cpp:49
string ReadDirective(istream &stream)
Definition: scene.cpp:20
std::istream & operator>>(std::istream &stream, Camera &camera)
Definition: camera.cpp:15
std::ostream & operator<<(std::ostream &stream, const Camera &camera)
Definition: camera.cpp:25
Definition: shape.h:147