Go to the documentation of this file.
5 #ifndef GLVERTEX_SCENE_H
6 #define GLVERTEX_SCENE_H
25 width_(0), height_(0),
32 void updateTime(
double dt)
67 void setViewport(
int width,
int height)
88 return((
double)width_/height_);
110 virtual void initScene() {}
111 virtual void clearScene() {}
112 virtual int getPasses() {
return(1);}
113 virtual int getScene(
int pass) {
return(pass);}
114 virtual void setupPass(
int pass) {}
115 virtual void finishPass(
int pass) {}
116 virtual void preupdateScene(
double dt) {}
117 virtual void renderScene(
int scene) = 0;
118 virtual void updateScene(
double dt) {}
119 virtual void updateState() {}
121 virtual lgl_Scene *nextScene() {
return(next_);}
122 virtual lgl_Cam *getCam() {
return(NULL);}
123 virtual bool supportsStereo() {
return(
false);}
124 virtual void keyPressed(
char key) {}
125 virtual void keyReleased(
char key) {}
126 virtual std::string getKeyInfo() {
return(
"");}
127 virtual void mouseClick(
double x,
double y) {}
128 virtual void doubleClick(
double x,
double y) {}
129 virtual void interaction() {}
132 virtual void doubleClickLeftBottom() {}
133 virtual void doubleClickRightBottom() {}
134 virtual void doubleClickLeftTop() {}
137 virtual std::string getDoubleClickInfo()
139 const char clicks[] =
140 "center double-click: pause animation\n"
141 "top right double-click: toggle polygon mode\n";
214 void renderLeftRight(
bool left)
254 lgl_TestScene() :
lgl_Scene(), teapot(NULL), loaded(false) {}
255 virtual ~lgl_TestScene() {
if (teapot)
delete teapot;}
291 void renderTestScene(
bool color =
true)
297 if (!teapot) teapot =
new lglCube();
326 if (color) teapot->lglColor(1.2,1.2,1.1);
346 shadow_p_(0,0,0), shadow_n_(0,1,0), shadow_d_(0,1,0),
421 cull_minsize_ = minsize;
435 vec3 shadow_p_, shadow_n_, shadow_d_;
441 virtual void clearScene() {
lglClear();}
443 virtual int getPasses() {
return(2);}
445 virtual void renderScene(
int scene)
473 bool disabled =
false;
476 if (shadow_n_==
vec3(0) || shadow_d_==
vec3(0))
482 vec3 eye = cam->getEyeManip();
484 if ((eye-shadow_p_).
dot(shadow_n_) <= 0)
514 virtual void preupdateScene(
double dt)
520 virtual void updateScene(
double dt)
542 virtual bool supportsStereo()
608 virtual void clearScene()
613 virtual void renderScene(
int scene)
641 virtual void preupdateScene(
double dt)
647 virtual void updateScene(
double dt)
658 virtual bool supportsStereo()
678 interlacing_(LGL_INTERLACE_NONE)
683 if (scene_)
delete scene_;
689 if (scene_)
delete scene_;
705 return(scene_->pickScene(o, d));
713 interlacing_ = interlacing;
723 virtual void config() {}
724 virtual int getViewportWidth() = 0;
725 virtual int getViewportHeight() = 0;
726 virtual void update() = 0;
728 virtual void initializeOpenGL()
734 virtual void renderOpenGL(
double dt)
739 scene_->setViewport(getViewportWidth(), getViewportHeight());
754 if (scene_->supportsStereo())
755 cam = scene_->getCam();
760 if (interlacing_ == LGL_INTERLACE_NONE) stereo =
false;
764 scene_->clearScene();
767 scene_->preupdateScene(scene_->
paused()?0:dt);
772 for (
int i=0; i<scene_->getPasses(); i++)
774 scene_->setupPass(i);
775 scene_->renderScene(scene_->getScene(i));
776 scene_->finishPass(i);
784 for (
int i=0; i<scene_->getPasses(); i++)
786 scene_->setupPass(i);
787 scene_->renderScene(scene_->getScene(i));
788 scene_->finishPass(i);
794 for (
int i=0; i<scene_->getPasses(); i++)
796 scene_->setupPass(i);
797 scene_->renderScene(scene_->getScene(i));
798 scene_->finishPass(i);
805 scene_->updateScene(scene_->
paused()?0:dt);
808 scene_->updateState();
811 if (scene_->check4update()) update();
814 scene_->updateTime(scene_->
paused()?0:dt);
824 virtual void keyPressed(
char key)
827 scene_->keyPressed(key);
830 virtual void keyReleased(
char key)
833 scene_->keyReleased(key);
836 virtual std::string getKeyInfo()
839 return(scene_->getKeyInfo());
844 virtual void mouseClick(
double x,
double y)
847 scene_->mouseClick(x, y);
850 virtual void doubleClick(
double x,
double y)
852 static const double corner = 0.15;
856 scene_->doubleClick(x, y);
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();
866 virtual std::string getDoubleClickInfo()
869 return(scene_->getDoubleClickInfo());
874 virtual void interaction()
877 scene_->interaction();
virtual void drawObjects()
draw all objects without updating
Definition: glvertex_object.h:691
virtual void updateObjects(double dt)
update all objects
Definition: glvertex_object.h:744
virtual void preupdateObjects(double dt)
pre-update all objects
Definition: glvertex_object.h:732
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
void setObjects(lgl_Objects *objs)
set scene objects
Definition: glvertex_scene.h:582
void lglDisableLighting(bool off)
entirely disable vertex normals
Definition: glvertex_api.h:824
void setAspect(double aspect)
set camera aspect
Definition: glvertex_cam.h:59
void lglComplementaryInterlacingMode(lgl_interlacing_enum mode)
change OpenGL state (complementary interlacing mode)
Definition: glvertex_api.h:476
vec3 getShadowPlaneDirection()
get shadow plane light direction
Definition: glvertex_scene.h:398
lgl_Objects * getObjects()
get scene objects
Definition: glvertex_scene.h:591
void preupdateSceneGraph(double dt)
pre-update the entire scene subgraph
Definition: glvertex_nodes.h:404
void setSceneGraph(lgl_Node *root)
set scene graph
Definition: glvertex_scene.h:365
void lglLineWidth(float width=1.0f)
specify line width (as defined by OpenGL 1.2)
Definition: glvertex_api.h:164
void end() const
pop viewing and projection matrix
Definition: glvertex_cam.h:288
bool paused()
is the scene paused?
Definition: glvertex_scene.h:50
scene graph node (base class)
Definition: glvertex_nodes.h:22
double viewportAspect()
get the current viewport aspect
Definition: glvertex_scene.h:86
void lglCloneProgram(const lgl *vbo)
clone GLSL program and uniforms from vbo
Definition: glvertex_core.h:4106
container class for multiple graphical objects
Definition: glvertex_object.h:584
void lglEnd()
end vertex series (as defined by OpenGL 1.2)
Definition: glvertex_api.h:54
void lglProjection()
reset the actual projection matrix
Definition: glvertex_api.h:238
lgl_Renderer()
ctor
Definition: glvertex_scene.h:675
virtual lgl_Node * find(const std::string &id)
find a node with a specific identifier
Definition: glvertex_nodes.h:315
lgl_SceneGraphScene(lgl_Node *root=NULL)
ctor
Definition: glvertex_scene.h:342
void useRightEye(bool right=true)
use right eye for stereo rendering
Definition: glvertex_cam.h:219
void setCam(lgl_Cam *cam)
set scene camera
Definition: glvertex_scene.h:573
4D double vector
Definition: glslmath.h:713
void restart()
restart time
Definition: glvertex_scene.h:44
void pause(bool yes=true)
pause the scene
Definition: glvertex_scene.h:56
void lglPopMatrix()
pop matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:78
void lglTogglePolygonMode()
toggle OpenGL state (polygon mode)
Definition: glvertex_api.h:464
void lglModelView()
reset the actual modelview matrix
Definition: glvertex_api.h:270
void lglRotate(double angle, const vec3 &v)
multiply with rotation matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:102
void lglColor(const vec4f &c)
specify vertex color attribute (as defined by OpenGL 1.2)
Definition: glvertex_api.h:30
scene class container for a scene graph
Definition: glvertex_scene.h:337
int viewportHeight()
get the current viewport height
Definition: glvertex_scene.h:80
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
void setScene(lgl_Scene *scene)
set the actual scene
Definition: glvertex_scene.h:687
void lglNormal(const vec3f &n)
specify vertex normal attribute (as defined by OpenGL 1.2)
Definition: glvertex_api.h:38
void lglInterlacingMode(lgl_interlacing_enum mode)
change OpenGL state (interlacing mode)
Definition: glvertex_api.h:472
lgl_interlacing_enum
interlacing mode enum
Definition: glvertex_core.h:90
scene class
Definition: glvertex_scene.h:17
void lglEnableViewCulling(int minsize=0)
enable view culling
Definition: glvertex_api.h:876
camera node
Definition: glvertex_nodes.h:1914
void provideNextScene(lgl_Scene *next)
provide scene that will replace the actual one on next frame
Definition: glvertex_scene.h:105
void lglDepthTest(bool on=false)
change OpenGL state (depth test)
Definition: glvertex_api.h:388
void lglCloneState(const lgl *vbo)
clone state from vbo (coloring, lighting and texturing)
Definition: glvertex_core.h:4341
void lglDisableTexturing(bool off)
entirely disable texture coordinates
Definition: glvertex_api.h:828
3D double vector
Definition: glslmath.h:372
void updateSceneGraph(double dt)
update the entire scene subgraph
Definition: glvertex_nodes.h:410
void lglBegin(lgl_primitive_enum primitive)
begin vertex series (as defined by OpenGL 1.2)
Definition: glvertex_api.h:18
4x4 double matrix
Definition: glslmath.h:2116
void lglTranslate(const vec4 &v)
multiply with translation matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:94
void enableViewCulling(int minsize=0)
enable view culling
Definition: glvertex_scene.h:418
bool isStereoCam() const
is stereo cam?
Definition: glvertex_cam.h:207
lglVBO * pickSceneGraph(vec3 origin, vec3 direction, double mindist=0)
pick the entire scene subgraph
Definition: glvertex_nodes.h:614
lgl_GraphicalObjectScene(lgl_Cam *cam=NULL, lgl_Objects *objs=NULL)
ctor
Definition: glvertex_scene.h:556
void begin(bool left=true) const
push viewing and projection matrix
Definition: glvertex_cam.h:273
int viewportWidth()
get the current viewport width
Definition: glvertex_scene.h:74
void toggle_animation()
toggle the animation
Definition: glvertex_scene.h:62
lgl_Scene()
ctor
Definition: glvertex_scene.h:22
unit cube vbo
Definition: glvertex_geometry.h:19
bool isShadowPlaneEnabled()
is the shadow plane enabled?
Definition: glvertex_scene.h:374
vec3 getShadowPlaneOrigin()
get shadow plane origin position
Definition: glvertex_scene.h:386
virtual void lglRender(const lgl *vbo=NULL)
render the series of vertices contained in vbo
Definition: glvertex_core.h:1079
void setShadowColor(vec4 c)
set shadow color
Definition: glvertex_scene.h:412
double dot(const vec2 &a, const vec2 &b)
inner product
Definition: glslmath.h:241
void disableViewCulling()
disable view culling
Definition: glvertex_scene.h:425
void useLeftEye(bool left=true)
use left eye for stereo rendering
Definition: glvertex_cam.h:213
LGL API: vbo class definition.
Definition: glvertex_core.h:5827
void enableShadowPlane(bool on)
enable the shadow plane
Definition: glvertex_scene.h:380
camera convenience class
Definition: glvertex_cam.h:11
lglVBO * pickScene(vec3 o, vec3 d)
pick the actual scene
Definition: glvertex_scene.h:702
void lglTexCoord(const vec4f &t)
specify vertex texture coordinate attribute (as defined by OpenGL 1.2)
Definition: glvertex_api.h:46
vec3 getEyeManip(bool left=true) const
get manipulated eye point
Definition: glvertex_cam.h:99
scene class container for multiple graphical objects
Definition: glvertex_scene.h:551
void update()
trigger an update
Definition: glvertex_scene.h:92
void lglPushMatrix()
push matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:74
void lglDisableViewCulling()
disable view culling
Definition: glvertex_api.h:880
double getTime()
get current time
Definition: glvertex_scene.h:38
void lglDisableColoring(bool off)
entirely disable vertex colors
Definition: glvertex_api.h:820
void setShadowPlane(vec3 p, vec3 n, vec3 d)
set shadow plane
Definition: glvertex_scene.h:404
void enableDepthSorting(bool on=true)
enable depth sorting of semi-transparent objects
Definition: glvertex_scene.h:597
void setStereoMode(lgl_interlacing_enum interlacing=LGL_INTERLACE_VERTICAL_TOP)
set the stereo interlacing mode
Definition: glvertex_scene.h:711
void lglScale(const vec4 &c)
multiply with scale matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:82
lgl_Scene * getScene()
get the actual scene
Definition: glvertex_scene.h:696
vec3 getShadowPlaneNormal()
get shadow plane normal vector
Definition: glvertex_scene.h:392
void lglVertex(const vec4 &v)
specify vertex (as defined by OpenGL 1.2)
Definition: glvertex_api.h:22
void drawSceneGraph(vec4 color=vec4(1))
draw the entire scene subgraph without updating
Definition: glvertex_nodes.h:359
multi-pass renderer
Definition: glvertex_scene.h:670
static mat4 parallel(const vec3 &p, const vec3 &n, const vec3 &d)
create parallel projection matrix
Definition: glslmath.h:2698
lgl_Node * getSceneGraph()
get scene graph
Definition: glvertex_scene.h:359