glVertex  5.5.2
glvertex_scene.h
Go to the documentation of this file.
1 // (c) by Stefan Roettger, licensed under MIT license
2 
5 #ifndef GLVERTEX_SCENE_H
6 #define GLVERTEX_SCENE_H
7 
8 #include "glvertex.h"
9 #include "glvertex_cam.h"
10 #include "glvertex_nodes.h"
11 #include "glvertex_object.h"
12 
17 class lgl_Scene
18 {
19 public:
20 
23  : time_(0),
24  paused_(false),
25  width_(0), height_(0),
26  next_(NULL)
27  {}
28 
29  virtual ~lgl_Scene()
30  {}
31 
32  void updateTime(double dt)
33  {
34  time_ += dt;
35  }
36 
38  double getTime()
39  {
40  return(time_);
41  }
42 
44  void restart()
45  {
46  time_ = 0;
47  }
48 
50  bool paused()
51  {
52  return(paused_);
53  }
54 
56  void pause(bool yes = true)
57  {
58  paused_ = yes;
59  }
60 
63  {
64  paused_ = !paused_;
65  }
66 
67  void setViewport(int width, int height)
68  {
69  width_ = width;
70  height_ = height;
71  }
72 
75  {
76  return(width_);
77  }
78 
81  {
82  return(height_);
83  }
84 
86  double viewportAspect()
87  {
88  return((double)width_/height_);
89  }
90 
92  void update()
93  {
94  update_ = true;
95  }
96 
97  bool check4update()
98  {
99  bool update = update_;
100  update_ = false;
101  return(update);
102  }
103 
106  {
107  next_ = next;
108  }
109 
110  virtual void initScene() {} // reimplement to initialize scene state
111  virtual void clearScene() {} // reimplement to clear the frame buffer
112  virtual int getPasses() {return(1);} // reimplement to specify number of passes
113  virtual int getScene(int pass) {return(pass);} // reimplement to specify a corresponding scene for each pass
114  virtual void setupPass(int pass) {} // reimplement to setup a specific pass
115  virtual void finishPass(int pass) {} // reimplement to finish a specific pass
116  virtual void preupdateScene(double dt) {} // reimplement to pre-update the scene
117  virtual void renderScene(int scene) = 0; // reimplement to render a specific scene
118  virtual void updateScene(double dt) {} // reimplement to update the scene
119  virtual void updateState() {} // reimplement for state updates
120  virtual lglVBO *pickScene(vec3 o, vec3 d) {return(NULL);} // reimplement to pick the scene
121  virtual lgl_Scene *nextScene() {return(next_);} // reimplement to change the scene
122  virtual lgl_Cam *getCam() {return(NULL);} // reimplement to provide a cam
123  virtual bool supportsStereo() {return(false);} // reimplement to signal stereo support
124  virtual void keyPressed(char key) {} // reimplement to check for key press events
125  virtual void keyReleased(char key) {} // reimplement to check for key release events
126  virtual std::string getKeyInfo() {return("");} // reimplement to print key commands
127  virtual void mouseClick(double x, double y) {} // reimplement to track mouse clicks
128  virtual void doubleClick(double x, double y) {} // reimplement to track mouse double clicks
129  virtual void interaction() {} // reimplement to track user interaction
130 
131  virtual void doubleClickCenter() {toggle_animation();}
132  virtual void doubleClickLeftBottom() {}
133  virtual void doubleClickRightBottom() {}
134  virtual void doubleClickLeftTop() {}
135  virtual void doubleClickRightTop() {lglTogglePolygonMode();}
136 
137  virtual std::string getDoubleClickInfo()
138  {
139  const char clicks[] =
140  "center double-click: pause animation\n"
141  "top right double-click: toggle polygon mode\n";
142 
143  return(clicks);
144  }
145 
146 protected:
147 
148  double time_;
149  bool paused_;
150 
151  int width_, height_;
152  bool update_;
153 
154  lgl_Scene *next_;
155 
156  void renderCube()
157  {
158  lglBegin(LGL_QUADS);
159  lglNormal(0,0,-1);
160  lglVertex(-0.5,-0.5,-0.5);
161  lglVertex(-0.5,0.5,-0.5);
162  lglVertex(0.5,0.5,-0.5);
163  lglVertex(0.5,-0.5,-0.5);
164  lglNormal(0,0,1);
165  lglVertex(0.5,-0.5,0.5);
166  lglVertex(0.5,0.5,0.5);
167  lglVertex(-0.5,0.5,0.5);
168  lglVertex(-0.5,-0.5,0.5);
169  lglNormal(-1,0,0);
170  lglVertex(-0.5,-0.5,0.5);
171  lglVertex(-0.5,0.5,0.5);
172  lglVertex(-0.5,0.5,-0.5);
173  lglVertex(-0.5,-0.5,-0.5);
174  lglNormal(1,0,0);
175  lglVertex(0.5,-0.5,-0.5);
176  lglVertex(0.5,0.5,-0.5);
177  lglVertex(0.5,0.5,0.5);
178  lglVertex(0.5,-0.5,0.5);
179  lglNormal(0,-1,0);
180  lglVertex(-0.5,-0.5,0.5);
181  lglVertex(-0.5,-0.5,-0.5);
182  lglVertex(0.5,-0.5,-0.5);
183  lglVertex(0.5,-0.5,0.5);
184  lglNormal(0,1,0);
185  lglVertex(0.5,0.5,0.5);
186  lglVertex(0.5,0.5,-0.5);
187  lglVertex(-0.5,0.5,-0.5);
188  lglVertex(-0.5,0.5,0.5);
189  lglEnd();
190  }
191 
192  void renderScreen()
193  {
194  // matrix setup
195  lglProjection();
196  lglModelView();
197 
198  // render quad /w unit texture coordinates
199  lglDepthTest(false);
200  lglColor(1,1,1);
201  lglBegin(LGL_QUADS);
202  lglTexCoord(0,0);
203  lglVertex(-1,-1,0);
204  lglTexCoord(1,0);
205  lglVertex(1,-1,0);
206  lglTexCoord(1,1);
207  lglVertex(1,1,0);
208  lglTexCoord(0,1);
209  lglVertex(-1,1,0);
210  lglEnd();
211  lglDepthTest(true);
212  }
213 
214  void renderLeftRight(bool left)
215  {
216  // matrix setup
217  lglProjection();
218  lglModelView();
219 
220  // render L or R for stereo setup
221  if (left)
222  lglColor(1,0,0);
223  else
224  lglColor(0,1,1);
225  lglLineWidth(8);
226  lglBegin(LGL_LINE_STRIP);
227  lglNormal(0,0,1);
228  if (left)
229  {
230  // L
231  lglVertex(-0.25,0.5,0);
232  lglVertex(-0.25,-0.5,0);
233  lglVertex(0.25,-0.5,0);
234  }
235  else
236  {
237  // R
238  lglVertex(-0.25,-0.5,0);
239  lglVertex(-0.25,0.5,0);
240  lglVertex(0.25,0.5,0);
241  lglVertex(0.25,0,0);
242  lglVertex(-0.25,0,0);
243  lglVertex(0.25,-0.5,0);
244  }
245  lglEnd();
246  }
247 
248 };
249 
250 class lgl_TestScene: public lgl_Scene
251 {
252 public:
253 
254  lgl_TestScene() : lgl_Scene(), teapot(NULL), loaded(false) {}
255  virtual ~lgl_TestScene() {if (teapot) delete teapot;}
256 
257 protected:
258 
259  lglVBO *teapot;
260  bool loaded;
261 
262  void renderTable()
263  {
264  lglPushMatrix();
265  lglTranslate(vec3(0,1,0));
266  lglScale(vec3(3.1,0.1,1.1));
267  renderCube();
268  lglPopMatrix();
269  lglPushMatrix();
270  lglTranslate(vec3(-1.5,0.5,-0.5));
271  lglScale(vec3(0.1,1,0.1));
272  renderCube();
273  lglPopMatrix();
274  lglPushMatrix();
275  lglTranslate(vec3(-1.5,0.5,0.5));
276  lglScale(vec3(0.1,1,0.1));
277  renderCube();
278  lglPopMatrix();
279  lglPushMatrix();
280  lglTranslate(vec3(1.5,0.5,-0.5));
281  lglScale(vec3(0.1,1,0.1));
282  renderCube();
283  lglPopMatrix();
284  lglPushMatrix();
285  lglTranslate(vec3(1.5,0.5,0.5));
286  lglScale(vec3(0.1,1,0.1));
287  renderCube();
288  lglPopMatrix();
289  }
290 
291  void renderTestScene(bool color = true)
292  {
293  // load teapot
294  if (!loaded)
295  {
296  teapot = lglLoadObj("teapot.obj", true);
297  if (!teapot) teapot = new lglCube();
298  loaded = true;
299  }
300 
301  // render table
302  renderTable();
303 
304  // render colored cubes on table
305  lglPushMatrix();
306  lglTranslate(-0.5,1.1,0);
307  lglScale(0.2);
308  if (color) lglColor(1,0,0);
309  renderCube();
310  lglRotate(30, 0,1,0);
311  lglTranslate(-2,0,0);
312  if (color) lglColor(0,1,0);
313  renderCube();
314  lglRotate(-45, 0,1,0);
315  lglTranslate(-2,0,0);
316  if (color) lglColor(0,0,1);
317  renderCube();
318  lglPopMatrix();
319 
320  // render teapot on table
321  if (teapot)
322  {
323  lglPushMatrix();
324  lglTranslate(vec3(0.3,1.2,0));
325  lglScale(0.005);
326  if (color) teapot->lglColor(1.2,1.2,1.1);
327  teapot->lglCloneProgram(getGL());
328  teapot->lglCloneState(getGL());
329  teapot->lglRender();
330  lglPopMatrix();
331  }
332  }
333 
334 };
335 
338 {
339 public:
340 
343  : lgl_Scene(),
344  root_(root),
345  shadow_(false),
346  shadow_p_(0,0,0), shadow_n_(0,1,0), shadow_d_(0,1,0),
347  shadow_c_(0),
348  cull_(true),
349  cull_minsize_(50)
350  {}
351 
352  virtual ~lgl_SceneGraphScene()
353  {
354  if (root_)
355  delete root_;
356  }
357 
360  {
361  return(root_);
362  }
363 
366  {
367  if (root_)
368  delete root_;
369 
370  root_ = root;
371  }
372 
375  {
376  return(shadow_);
377  }
378 
380  void enableShadowPlane(bool on)
381  {
382  shadow_ = on;
383  }
384 
387  {
388  return(shadow_p_);
389  }
390 
393  {
394  return(shadow_n_);
395  }
396 
399  {
400  return(shadow_d_);
401  }
402 
404  void setShadowPlane(vec3 p, vec3 n, vec3 d)
405  {
406  shadow_p_ = p;
407  shadow_n_ = n;
408  shadow_d_ = d;
409  }
410 
413  {
414  shadow_c_ = c;
415  }
416 
418  void enableViewCulling(int minsize = 0)
419  {
420  cull_ = true;
421  cull_minsize_ = minsize;
422  }
423 
426  {
427  cull_ = false;
428  }
429 
430 protected:
431 
432  lgl_Node *root_;
433 
434  bool shadow_;
435  vec3 shadow_p_, shadow_n_, shadow_d_;
436  vec4 shadow_c_;
437 
438  bool cull_;
439  int cull_minsize_;
440 
441  virtual void clearScene() {lglClear();}
442 
443  virtual int getPasses() {return(2);}
444 
445  virtual void renderScene(int scene)
446  {
447  if (scene == 0)
448  {
449  if (root_)
450  {
451  // set camera aspect
452  if (lgl_Cam *cam = getCam())
453  cam->setAspect(viewportAspect());
454 
455  // enable view culling
456  if (cull_)
457  lglEnableViewCulling(cull_minsize_);
458 
459  // render pass #1
460  root_->drawSceneGraph();
461 
462  // disable view culling
463  if (cull_)
465  }
466  }
467  else if (scene == 1)
468  {
469  if (shadow_)
470  {
471  if (root_)
472  {
473  bool disabled = false;
474 
475  // check shadow plane
476  if (shadow_n_==vec3(0) || shadow_d_==vec3(0))
477  disabled = true;
478 
479  // get eye point
480  if (lgl_Cam *cam = getCam())
481  {
482  vec3 eye = cam->getEyeManip();
483 
484  if ((eye-shadow_p_).dot(shadow_n_) <= 0)
485  disabled = true;
486  }
487 
488  if (!disabled)
489  {
490  // shadow color
491  lglColor(shadow_c_);
492 
493  // disable lighting etc.
494  lglDisableColoring(true);
495  lglDisableLighting(true);
496  lglDisableTexturing(true);
497 
498  // shadow projection matrix
499  mat4 P = mat4::parallel(shadow_p_, shadow_n_, shadow_d_);
500 
501  // render pass #2
502  root_->drawSceneGraph(P);
503 
504  // enable lighting etc.
505  lglDisableColoring(false);
506  lglDisableLighting(false);
507  lglDisableTexturing(false);
508  }
509  }
510  }
511  }
512  }
513 
514  virtual void preupdateScene(double dt)
515  {
516  if (root_)
517  root_->preupdateSceneGraph(dt);
518  }
519 
520  virtual void updateScene(double dt)
521  {
522  if (root_)
523  root_->updateSceneGraph(dt);
524  }
525 
526  virtual lglVBO *pickScene(vec3 o, vec3 d)
527  {
528  if (root_)
529  return(root_->pickSceneGraph(o, d));
530 
531  return(NULL);
532  }
533 
534  virtual lgl_Cam *getCam()
535  {
536  if (root_)
537  return(root_->find<lgl_CameraNode>());
538 
539  return(NULL);
540  }
541 
542  virtual bool supportsStereo()
543  {
544  return(true);
545  }
546 
547 };
548 
552 {
553 public:
554 
556  lgl_GraphicalObjectScene(lgl_Cam *cam = NULL, lgl_Objects *objs = NULL)
557  : lgl_Scene(),
558  cam_(cam),
559  objects_(objs),
560  depth_sorting_(true)
561  {}
562 
563  virtual ~lgl_GraphicalObjectScene()
564  {
565  if (cam_)
566  delete cam_;
567 
568  if (objects_)
569  delete objects_;
570  }
571 
573  void setCam(lgl_Cam *cam)
574  {
575  if (cam_)
576  delete cam_;
577 
578  cam_ = cam;
579  }
580 
583  {
584  if (objects_)
585  delete objects_;
586 
587  objects_ = objs;
588  }
589 
592  {
593  return(objects_);
594  }
595 
597  void enableDepthSorting(bool on = true)
598  {
599  depth_sorting_ = on;
600  }
601 
602 protected:
603 
604  lgl_Cam *cam_;
605  lgl_Objects *objects_;
606  bool depth_sorting_;
607 
608  virtual void clearScene()
609  {
610  lglClear();
611  }
612 
613  virtual void renderScene(int scene)
614  {
615  if (scene == 0)
616  {
617  // begin camera
618  if (cam_)
619  {
620  cam_->setAspect(viewportAspect());
621  cam_->begin();
622  }
623 
624  // render graphical objects
625  if (objects_)
626  {
627  if (depth_sorting_)
628  objects_->drawObjects(cam_->getEyeManip());
629  else
630  objects_->drawObjects();
631  }
632 
633  // end camera
634  if (cam_)
635  {
636  cam_->end();
637  }
638  }
639  }
640 
641  virtual void preupdateScene(double dt)
642  {
643  if (objects_)
644  objects_->preupdateObjects(dt);
645  }
646 
647  virtual void updateScene(double dt)
648  {
649  if (objects_)
650  objects_->updateObjects(dt);
651  }
652 
653  virtual lgl_Cam *getCam()
654  {
655  return(cam_);
656  }
657 
658  virtual bool supportsStereo()
659  {
660  return(true);
661  }
662 
663 };
664 
671 {
672 public:
673 
676  : scene_(NULL),
677  modified_(false),
678  interlacing_(LGL_INTERLACE_NONE)
679  {}
680 
681  virtual ~lgl_Renderer()
682  {
683  if (scene_) delete scene_;
684  }
685 
687  void setScene(lgl_Scene *scene)
688  {
689  if (scene_) delete scene_;
690  scene_ = scene;
691  modified_ = true;
692  update();
693  }
694 
697  {
698  return(scene_);
699  }
700 
703  {
704  if (scene_)
705  return(scene_->pickScene(o, d));
706 
707  return(NULL);
708  }
709 
711  void setStereoMode(lgl_interlacing_enum interlacing = LGL_INTERLACE_VERTICAL_TOP)
712  {
713  interlacing_ = interlacing;
714  }
715 
716 protected:
717 
718  lgl_Scene *scene_;
719  bool modified_;
720 
721  lgl_interlacing_enum interlacing_;
722 
723  virtual void config() {}
724  virtual int getViewportWidth() = 0;
725  virtual int getViewportHeight() = 0;
726  virtual void update() = 0;
727 
728  virtual void initializeOpenGL()
729  {
730  // setup OpenGL
731  lglInitializeOpenGL(1,1,1);
732  }
733 
734  virtual void renderOpenGL(double dt)
735  {
736  if (scene_)
737  {
738  // update viewport
739  scene_->setViewport(getViewportWidth(), getViewportHeight());
740 
741  // init scene
742  if (modified_)
743  {
744  scene_->initScene();
745  modified_ = false;
746  config();
747  }
748 
749  // check for stereo cam
750  bool stereo = false;
751  lgl_Cam *cam = NULL;
752  if (scene_)
753  {
754  if (scene_->supportsStereo())
755  cam = scene_->getCam();
756  }
757  if (cam)
758  {
759  stereo = cam->isStereoCam();
760  if (interlacing_ == LGL_INTERLACE_NONE) stereo = false;
761  }
762 
763  // clear scene
764  scene_->clearScene();
765 
766  // pre-update scene
767  scene_->preupdateScene(scene_->paused()?0:dt);
768 
769  // render scene
770  if (!stereo)
771  {
772  for (int i=0; i<scene_->getPasses(); i++)
773  {
774  scene_->setupPass(i);
775  scene_->renderScene(scene_->getScene(i));
776  scene_->finishPass(i);
777  }
778  }
779  else
780  {
781  cam->useLeftEye();
782  lglInterlacingMode(interlacing_);
783 
784  for (int i=0; i<scene_->getPasses(); i++)
785  {
786  scene_->setupPass(i);
787  scene_->renderScene(scene_->getScene(i));
788  scene_->finishPass(i);
789  }
790 
791  cam->useRightEye();
792  lglComplementaryInterlacingMode(interlacing_);
793 
794  for (int i=0; i<scene_->getPasses(); i++)
795  {
796  scene_->setupPass(i);
797  scene_->renderScene(scene_->getScene(i));
798  scene_->finishPass(i);
799  }
800 
801  lglInterlacingMode(LGL_INTERLACE_NONE);
802  }
803 
804  // update scene
805  scene_->updateScene(scene_->paused()?0:dt);
806 
807  // update state
808  scene_->updateState();
809 
810  // check for updates
811  if (scene_->check4update()) update();
812 
813  // update current time
814  scene_->updateTime(scene_->paused()?0:dt);
815 
816  // next scene
817  lgl_Scene *scene = scene_->nextScene();
818 
819  // proceed to next scene
820  if (scene != NULL) setScene(scene);
821  }
822  }
823 
824  virtual void keyPressed(char key)
825  {
826  if (scene_)
827  scene_->keyPressed(key);
828  }
829 
830  virtual void keyReleased(char key)
831  {
832  if (scene_)
833  scene_->keyReleased(key);
834  }
835 
836  virtual std::string getKeyInfo()
837  {
838  if (scene_)
839  return(scene_->getKeyInfo());
840 
841  return("");
842  }
843 
844  virtual void mouseClick(double x, double y)
845  {
846  if (scene_)
847  scene_->mouseClick(x, y);
848  }
849 
850  virtual void doubleClick(double x, double y)
851  {
852  static const double corner = 0.15;
853 
854  if (scene_)
855  {
856  scene_->doubleClick(x, y);
857 
858  if (x<=corner && y<=corner) scene_->doubleClickLeftTop();
859  else if (x>=1-corner && y<=corner) scene_->doubleClickRightTop();
860  else if (x<=corner && y>=1-corner) scene_->doubleClickLeftBottom();
861  else if (x>=1-corner && y>=1-corner) scene_->doubleClickRightBottom();
862  else scene_->doubleClickCenter();
863  }
864  }
865 
866  virtual std::string getDoubleClickInfo()
867  {
868  if (scene_)
869  return(scene_->getDoubleClickInfo());
870 
871  return("");
872  }
873 
874  virtual void interaction()
875  {
876  if (scene_)
877  scene_->interaction();
878  }
879 
880 };
881 
882 #endif
lgl_Objects::drawObjects
virtual void drawObjects()
draw all objects without updating
Definition: glvertex_object.h:691
lgl_Objects::updateObjects
virtual void updateObjects(double dt)
update all objects
Definition: glvertex_object.h:744
lgl_Objects::preupdateObjects
virtual void preupdateObjects(double dt)
pre-update all objects
Definition: glvertex_object.h:732
lglInitializeOpenGL
void lglInitializeOpenGL(float r=0, float g=0, float b=0, float a=1, bool ztest=true, bool culling=false)
initialize OpenGL state (clear color, depth test, back-face culling)
Definition: glvertex_api.h:367
lgl_GraphicalObjectScene::setObjects
void setObjects(lgl_Objects *objs)
set scene objects
Definition: glvertex_scene.h:582
lglDisableLighting
void lglDisableLighting(bool off)
entirely disable vertex normals
Definition: glvertex_api.h:824
lgl_Cam::setAspect
void setAspect(double aspect)
set camera aspect
Definition: glvertex_cam.h:59
lglComplementaryInterlacingMode
void lglComplementaryInterlacingMode(lgl_interlacing_enum mode)
change OpenGL state (complementary interlacing mode)
Definition: glvertex_api.h:476
lgl_SceneGraphScene::getShadowPlaneDirection
vec3 getShadowPlaneDirection()
get shadow plane light direction
Definition: glvertex_scene.h:398
lgl_GraphicalObjectScene::getObjects
lgl_Objects * getObjects()
get scene objects
Definition: glvertex_scene.h:591
lgl_Node::preupdateSceneGraph
void preupdateSceneGraph(double dt)
pre-update the entire scene subgraph
Definition: glvertex_nodes.h:404
lgl_SceneGraphScene::setSceneGraph
void setSceneGraph(lgl_Node *root)
set scene graph
Definition: glvertex_scene.h:365
glvertex_nodes.h
lglLineWidth
void lglLineWidth(float width=1.0f)
specify line width (as defined by OpenGL 1.2)
Definition: glvertex_api.h:164
lgl_Cam::end
void end() const
pop viewing and projection matrix
Definition: glvertex_cam.h:288
lgl_Scene::paused
bool paused()
is the scene paused?
Definition: glvertex_scene.h:50
lgl_Node
scene graph node (base class)
Definition: glvertex_nodes.h:22
lgl_Scene::viewportAspect
double viewportAspect()
get the current viewport aspect
Definition: glvertex_scene.h:86
lgl::lglCloneProgram
void lglCloneProgram(const lgl *vbo)
clone GLSL program and uniforms from vbo
Definition: glvertex_core.h:4106
lgl_Objects
container class for multiple graphical objects
Definition: glvertex_object.h:584
lglEnd
void lglEnd()
end vertex series (as defined by OpenGL 1.2)
Definition: glvertex_api.h:54
lglProjection
void lglProjection()
reset the actual projection matrix
Definition: glvertex_api.h:238
lgl_Renderer::lgl_Renderer
lgl_Renderer()
ctor
Definition: glvertex_scene.h:675
lgl_Node::find
virtual lgl_Node * find(const std::string &id)
find a node with a specific identifier
Definition: glvertex_nodes.h:315
lgl_SceneGraphScene::lgl_SceneGraphScene
lgl_SceneGraphScene(lgl_Node *root=NULL)
ctor
Definition: glvertex_scene.h:342
lgl_Cam::useRightEye
void useRightEye(bool right=true)
use right eye for stereo rendering
Definition: glvertex_cam.h:219
lgl_GraphicalObjectScene::setCam
void setCam(lgl_Cam *cam)
set scene camera
Definition: glvertex_scene.h:573
vec4
4D double vector
Definition: glslmath.h:713
lgl_Scene::restart
void restart()
restart time
Definition: glvertex_scene.h:44
lgl_Scene::pause
void pause(bool yes=true)
pause the scene
Definition: glvertex_scene.h:56
glvertex.h
lglPopMatrix
void lglPopMatrix()
pop matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:78
lglTogglePolygonMode
void lglTogglePolygonMode()
toggle OpenGL state (polygon mode)
Definition: glvertex_api.h:464
lglModelView
void lglModelView()
reset the actual modelview matrix
Definition: glvertex_api.h:270
lglRotate
void lglRotate(double angle, const vec3 &v)
multiply with rotation matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:102
lglColor
void lglColor(const vec4f &c)
specify vertex color attribute (as defined by OpenGL 1.2)
Definition: glvertex_api.h:30
lgl_SceneGraphScene
scene class container for a scene graph
Definition: glvertex_scene.h:337
glvertex_cam.h
lgl_Scene::viewportHeight
int viewportHeight()
get the current viewport height
Definition: glvertex_scene.h:80
lglClear
void lglClear(GLuint bits=GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
clear color and depth buffer (as defined by OpenGL 1.2)
Definition: glvertex_api.h:144
lgl_Renderer::setScene
void setScene(lgl_Scene *scene)
set the actual scene
Definition: glvertex_scene.h:687
lglNormal
void lglNormal(const vec3f &n)
specify vertex normal attribute (as defined by OpenGL 1.2)
Definition: glvertex_api.h:38
lglInterlacingMode
void lglInterlacingMode(lgl_interlacing_enum mode)
change OpenGL state (interlacing mode)
Definition: glvertex_api.h:472
lgl_interlacing_enum
lgl_interlacing_enum
interlacing mode enum
Definition: glvertex_core.h:90
lgl_Scene
scene class
Definition: glvertex_scene.h:17
lglEnableViewCulling
void lglEnableViewCulling(int minsize=0)
enable view culling
Definition: glvertex_api.h:876
lgl_CameraNode
camera node
Definition: glvertex_nodes.h:1914
lgl_Scene::provideNextScene
void provideNextScene(lgl_Scene *next)
provide scene that will replace the actual one on next frame
Definition: glvertex_scene.h:105
lglDepthTest
void lglDepthTest(bool on=false)
change OpenGL state (depth test)
Definition: glvertex_api.h:388
lgl::lglCloneState
void lglCloneState(const lgl *vbo)
clone state from vbo (coloring, lighting and texturing)
Definition: glvertex_core.h:4341
lglDisableTexturing
void lglDisableTexturing(bool off)
entirely disable texture coordinates
Definition: glvertex_api.h:828
vec3
3D double vector
Definition: glslmath.h:372
lgl_Node::updateSceneGraph
void updateSceneGraph(double dt)
update the entire scene subgraph
Definition: glvertex_nodes.h:410
lglBegin
void lglBegin(lgl_primitive_enum primitive)
begin vertex series (as defined by OpenGL 1.2)
Definition: glvertex_api.h:18
lglLoadObj
bool lglLoadObj(lglVBO *vbo, const char *path, bool silent=false, lgl_texgenmode_enum texgen=LGL_TEXGEN_NONE, bool flip_v=true)
load OBJ into vbo from file path (and from default installation paths)
Definition: glvertex_objformat.h:313
mat4
4x4 double matrix
Definition: glslmath.h:2116
lglTranslate
void lglTranslate(const vec4 &v)
multiply with translation matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:94
lgl_SceneGraphScene::enableViewCulling
void enableViewCulling(int minsize=0)
enable view culling
Definition: glvertex_scene.h:418
lgl_Cam::isStereoCam
bool isStereoCam() const
is stereo cam?
Definition: glvertex_cam.h:207
lgl_Node::pickSceneGraph
lglVBO * pickSceneGraph(vec3 origin, vec3 direction, double mindist=0)
pick the entire scene subgraph
Definition: glvertex_nodes.h:614
lgl_GraphicalObjectScene::lgl_GraphicalObjectScene
lgl_GraphicalObjectScene(lgl_Cam *cam=NULL, lgl_Objects *objs=NULL)
ctor
Definition: glvertex_scene.h:556
lgl_Cam::begin
void begin(bool left=true) const
push viewing and projection matrix
Definition: glvertex_cam.h:273
lgl_Scene::viewportWidth
int viewportWidth()
get the current viewport width
Definition: glvertex_scene.h:74
lgl_Scene::toggle_animation
void toggle_animation()
toggle the animation
Definition: glvertex_scene.h:62
lgl_Scene::lgl_Scene
lgl_Scene()
ctor
Definition: glvertex_scene.h:22
lglCube
unit cube vbo
Definition: glvertex_geometry.h:19
lgl_SceneGraphScene::isShadowPlaneEnabled
bool isShadowPlaneEnabled()
is the shadow plane enabled?
Definition: glvertex_scene.h:374
lgl_SceneGraphScene::getShadowPlaneOrigin
vec3 getShadowPlaneOrigin()
get shadow plane origin position
Definition: glvertex_scene.h:386
lgl::lglRender
virtual void lglRender(const lgl *vbo=NULL)
render the series of vertices contained in vbo
Definition: glvertex_core.h:1079
lgl_SceneGraphScene::setShadowColor
void setShadowColor(vec4 c)
set shadow color
Definition: glvertex_scene.h:412
dot
double dot(const vec2 &a, const vec2 &b)
inner product
Definition: glslmath.h:241
lgl_SceneGraphScene::disableViewCulling
void disableViewCulling()
disable view culling
Definition: glvertex_scene.h:425
lgl_Cam::useLeftEye
void useLeftEye(bool left=true)
use left eye for stereo rendering
Definition: glvertex_cam.h:213
lglVBO
LGL API: vbo class definition.
Definition: glvertex_core.h:5827
lgl_SceneGraphScene::enableShadowPlane
void enableShadowPlane(bool on)
enable the shadow plane
Definition: glvertex_scene.h:380
lgl_Cam
camera convenience class
Definition: glvertex_cam.h:11
lgl_Renderer::pickScene
lglVBO * pickScene(vec3 o, vec3 d)
pick the actual scene
Definition: glvertex_scene.h:702
lglTexCoord
void lglTexCoord(const vec4f &t)
specify vertex texture coordinate attribute (as defined by OpenGL 1.2)
Definition: glvertex_api.h:46
lgl_Cam::getEyeManip
vec3 getEyeManip(bool left=true) const
get manipulated eye point
Definition: glvertex_cam.h:99
lgl_GraphicalObjectScene
scene class container for multiple graphical objects
Definition: glvertex_scene.h:551
glvertex_object.h
lgl_Scene::update
void update()
trigger an update
Definition: glvertex_scene.h:92
lglPushMatrix
void lglPushMatrix()
push matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:74
lglDisableViewCulling
void lglDisableViewCulling()
disable view culling
Definition: glvertex_api.h:880
lgl_Scene::getTime
double getTime()
get current time
Definition: glvertex_scene.h:38
lglDisableColoring
void lglDisableColoring(bool off)
entirely disable vertex colors
Definition: glvertex_api.h:820
lgl_SceneGraphScene::setShadowPlane
void setShadowPlane(vec3 p, vec3 n, vec3 d)
set shadow plane
Definition: glvertex_scene.h:404
lgl_GraphicalObjectScene::enableDepthSorting
void enableDepthSorting(bool on=true)
enable depth sorting of semi-transparent objects
Definition: glvertex_scene.h:597
lgl_Renderer::setStereoMode
void setStereoMode(lgl_interlacing_enum interlacing=LGL_INTERLACE_VERTICAL_TOP)
set the stereo interlacing mode
Definition: glvertex_scene.h:711
lglScale
void lglScale(const vec4 &c)
multiply with scale matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:82
lgl_Renderer::getScene
lgl_Scene * getScene()
get the actual scene
Definition: glvertex_scene.h:696
lgl_SceneGraphScene::getShadowPlaneNormal
vec3 getShadowPlaneNormal()
get shadow plane normal vector
Definition: glvertex_scene.h:392
lglVertex
void lglVertex(const vec4 &v)
specify vertex (as defined by OpenGL 1.2)
Definition: glvertex_api.h:22
lgl_Node::drawSceneGraph
void drawSceneGraph(vec4 color=vec4(1))
draw the entire scene subgraph without updating
Definition: glvertex_nodes.h:359
lgl_Renderer
multi-pass renderer
Definition: glvertex_scene.h:670
mat4::parallel
static mat4 parallel(const vec3 &p, const vec3 &n, const vec3 &d)
create parallel projection matrix
Definition: glslmath.h:2698
lgl_SceneGraphScene::getSceneGraph
lgl_Node * getSceneGraph()
get scene graph
Definition: glvertex_scene.h:359