From a54a3b2bfbfc83c70f68b49821db44abd2ceb738 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 8 Apr 2005 19:40:16 +0000 Subject: [PATCH] From Mike Weiblen, osgGLUTsimple and osgGLUTkeyboardmouse examples --- Make/dependencies | 2 +- Make/makedirdefs | 5 + .../osgGLUTkeyboardmouse.dsp | 97 +++++++++++ .../examples/osgGLUTsimple/osgGLUTsimple.dsp | 97 +++++++++++ examples/osgGLUTkeyboardmouse/GNUmakefile | 18 +++ .../osgGLUTkeyboardmouse/GNUmakefile.inst | 14 ++ .../osgGLUTkeyboardmouse.cpp | 151 ++++++++++++++++++ examples/osgGLUTsimple/GNUmakefile | 18 +++ examples/osgGLUTsimple/GNUmakefile.inst | 14 ++ examples/osgGLUTsimple/osgGLUTsimple.cpp | 95 +++++++++++ 10 files changed, 510 insertions(+), 1 deletion(-) create mode 100644 VisualStudio/examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.dsp create mode 100644 VisualStudio/examples/osgGLUTsimple/osgGLUTsimple.dsp create mode 100644 examples/osgGLUTkeyboardmouse/GNUmakefile create mode 100644 examples/osgGLUTkeyboardmouse/GNUmakefile.inst create mode 100644 examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.cpp create mode 100644 examples/osgGLUTsimple/GNUmakefile create mode 100644 examples/osgGLUTsimple/GNUmakefile.inst create mode 100644 examples/osgGLUTsimple/osgGLUTsimple.cpp diff --git a/Make/dependencies b/Make/dependencies index 78c7773ad..9de04d00a 100644 --- a/Make/dependencies +++ b/Make/dependencies @@ -52,4 +52,4 @@ PERFORMER_INSTALLED ?= no DEMETER_INSTALLED ?= no - +GLUT_INSTALLED ?= no diff --git a/Make/makedirdefs b/Make/makedirdefs index 7abe28225..78c1d00ce 100644 --- a/Make/makedirdefs +++ b/Make/makedirdefs @@ -251,3 +251,8 @@ endif ifeq ($(DEMETER_INSTALLED),yes) EXAMPLE_DIRS += osgdemeter endif + +ifeq ($(GLUT_INSTALLED),yes) + EXAMPLE_DIRS += osgGLUTsimple + EXAMPLE_DIRS += osgGLUTkeyboardmouse +endif diff --git a/VisualStudio/examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.dsp b/VisualStudio/examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.dsp new file mode 100644 index 000000000..8284da932 --- /dev/null +++ b/VisualStudio/examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.dsp @@ -0,0 +1,97 @@ +# Microsoft Developer Studio Project File - Name="Example osgGLUTkeyboardmouse" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=Example osgGLUTkeyboardmouse - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "osgGLUTkeyboardmouse.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "osgGLUTkeyboardmouse.mak" CFG="Example osgGLUTkeyboardmouse - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "Example osgGLUTkeyboardmouse - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "Example osgGLUTkeyboardmouse - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "Example osgGLUTkeyboardmouse - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +MTL=midl.exe +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "../../../include" /I "../../../../OpenThreads/include" /I "../../../../Producer/include" /I "../../../../3rdParty/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 glut32.lib opengl32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"../../../bin/osgGLUTkeyboardmouse.exe" /libpath:"../../../lib" /libpath:"../../../../OpenThreads/lib/win32" /libpath:"../../../../Producer/lib" /libpath:"../../../../3rdParty/lib" + +!ELSEIF "$(CFG)" == "Example osgGLUTkeyboardmouse - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +MTL=midl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MDd /W3 /Gm /vd0 /GR /GX /Zi /Od /I "../../../include" /I "../../../../OpenThreads/include" /I "../../../../Producer/include" /I "../../../../3rdParty/include" /D "_CONSOLE" /D "_MBCS" /D "FL_DLL" /D "WIN32" /D "_DEBUG" /FR /YX /FD /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 glut32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmt" /out:"../../../bin/osgGLUTkeyboardmoused.exe" /pdbtype:sept /libpath:"../../../lib" /libpath:"../../../../OpenThreads/lib/win32" /libpath:"../../../../Producer/lib" /libpath:"../../../../3rdParty/lib" +# SUBTRACT LINK32 /incremental:no + +!ENDIF + +# Begin Target + +# Name "Example osgGLUTkeyboardmouse - Win32 Release" +# Name "Example osgGLUTkeyboardmouse - Win32 Debug" +# Begin Source File + +SOURCE=..\..\..\examples\osgGLUTkeyboardmouse\osgGLUTkeyboardmouse.cpp +# End Source File +# End Target +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Project diff --git a/VisualStudio/examples/osgGLUTsimple/osgGLUTsimple.dsp b/VisualStudio/examples/osgGLUTsimple/osgGLUTsimple.dsp new file mode 100644 index 000000000..17ca5a1ac --- /dev/null +++ b/VisualStudio/examples/osgGLUTsimple/osgGLUTsimple.dsp @@ -0,0 +1,97 @@ +# Microsoft Developer Studio Project File - Name="Example osgGLUTsimple" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=Example osgGLUTsimple - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "osgGLUTsimple.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "osgGLUTsimple.mak" CFG="Example osgGLUTsimple - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "Example osgGLUTsimple - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "Example osgGLUTsimple - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "Example osgGLUTsimple - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +MTL=midl.exe +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "../../../include" /I "../../../../OpenThreads/include" /I "../../../../Producer/include" /I "../../../../3rdParty/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 glut32.lib opengl32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"../../../bin/osgGLUTsimple.exe" /libpath:"../../../lib" /libpath:"../../../../OpenThreads/lib/win32" /libpath:"../../../../Producer/lib" /libpath:"../../../../3rdParty/lib" + +!ELSEIF "$(CFG)" == "Example osgGLUTsimple - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +MTL=midl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MDd /W3 /Gm /vd0 /GR /GX /Zi /Od /I "../../../include" /I "../../../../OpenThreads/include" /I "../../../../Producer/include" /I "../../../../3rdParty/include" /D "_CONSOLE" /D "_MBCS" /D "FL_DLL" /D "WIN32" /D "_DEBUG" /FR /YX /FD /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 glut32.lib opengl32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcmt" /out:"../../../bin/osgGLUTsimpled.exe" /pdbtype:sept /libpath:"../../../lib" /libpath:"../../../../OpenThreads/lib/win32" /libpath:"../../../../Producer/lib" /libpath:"../../../../3rdParty/lib" +# SUBTRACT LINK32 /incremental:no + +!ENDIF + +# Begin Target + +# Name "Example osgGLUTsimple - Win32 Release" +# Name "Example osgGLUTsimple - Win32 Debug" +# Begin Source File + +SOURCE=..\..\..\examples\osgGLUTsimple\osgGLUTsimple.cpp +# End Source File +# End Target +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Project diff --git a/examples/osgGLUTkeyboardmouse/GNUmakefile b/examples/osgGLUTkeyboardmouse/GNUmakefile new file mode 100644 index 000000000..4b2b36ddd --- /dev/null +++ b/examples/osgGLUTkeyboardmouse/GNUmakefile @@ -0,0 +1,18 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgGLUTkeyboardmouse.cpp\ + +LIBS += -losgDB -losgUtil -losg -lglut $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS) + +INSTFILES = \ + $(CXXFILES)\ + GNUmakefile.inst=GNUmakefile + +EXEC = osgGLUTkeyboardmouse + +INC += $(X_INC) +LDFLAGS += -L/usr/X11R6/lib + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgGLUTkeyboardmouse/GNUmakefile.inst b/examples/osgGLUTkeyboardmouse/GNUmakefile.inst new file mode 100644 index 000000000..371f71392 --- /dev/null +++ b/examples/osgGLUTkeyboardmouse/GNUmakefile.inst @@ -0,0 +1,14 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgGLUTkeyboardmouse.cpp\ + +LIBS += -losgDB -losgUtil -losg -lglut $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS) + +EXEC = osgGLUTkeyboardmouse + +INC += $(X_INC) +LDFLAGS += + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.cpp b/examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.cpp new file mode 100644 index 000000000..ab9adaf6b --- /dev/null +++ b/examples/osgGLUTkeyboardmouse/osgGLUTkeyboardmouse.cpp @@ -0,0 +1,151 @@ +// C++ source file - (C) 2003 Robert Osfield, released under the OSGPL. +// (C) 2005 Mike Weiblen http://mew.cx/ released under the OSGPL. +// Simple example using GLUT to create an OpenGL window and OSG for rendering. +// Derived from osgGLUTsimple.cpp and osgkeyboardmouse.cpp + +#include +#ifdef WIN32 +#include +#endif +#include +#include +#include +#include + +osg::ref_ptr sceneView; +osg::Timer_t start_tick; +unsigned int frameNum; +int lastx, lasty; +osg::Vec3 centerPos; +float viewRot, viewElev, viewRadius; + +void display(void) +{ + // set up the frame stamp for current frame to record the current time and frame number so that animtion code can advance correctly + osg::ref_ptr frameStamp = new osg::FrameStamp; + frameStamp->setReferenceTime(osg::Timer::instance()->delta_s(start_tick,osg::Timer::instance()->tick())); + frameStamp->setFrameNumber( frameNum++ ); + + // pass frame stamp to the SceneView so that the update, cull and draw traversals all use the same FrameStamp + sceneView->setFrameStamp( frameStamp.get() ); + + // set the view + osg::Vec3 viewPos( + viewRadius * cos(viewElev) * sin(viewRot), + viewRadius * cos(viewElev) * cos(viewRot), + viewRadius * sin(viewElev)); + sceneView->setViewMatrixAsLookAt( centerPos-viewPos, centerPos, osg::Vec3(0.0f,0.0f,1.0f) ); + + // do the update traversal the scene graph - such as updating animations + sceneView->update(); + + // do the cull traversal, collect all objects in the view frustum into a sorted set of rendering bins + sceneView->cull(); + + // draw the rendering bins. + sceneView->draw(); + + // Swap Buffers + glutSwapBuffers(); + glutPostRedisplay(); +} + +void reshape( int w, int h ) +{ + // update the viewport dimensions, in case the window has been resized. + sceneView->setViewport( 0, 0, w, h ); +} + +void mousedown( int /*button*/, int /*state*/, int x, int y ) +{ + lastx = x; + lasty = y; +} + +void mousemove( int x, int y ) +{ + viewRot += (x - lastx) / 100.0f; + viewElev -= (y - lasty) / 100.0f; + + if( viewElev < -1.5f ) viewElev = -1.5f; + if( viewElev > 1.5f ) viewElev = 1.5f; + + lastx = x; + lasty = y; +} + +void keyboard( unsigned char key, int /*x*/, int /*y*/ ) +{ + switch( key ) + { + case 27: + exit(0); + break; + case ' ': + viewRot = 0.0f; + viewElev = 0.0f; + break; + default: + break; + } +} + +void menu( int selection ) +{ + std::cout << "menu selection = " << selection << std::endl; +} + +int main( int argc, char **argv ) +{ + glutInit(&argc, argv); + + if (argc<2) + { + std::cout << argv[0] <<": requires filename argument." << std::endl; + return 1; + } + + // load the scene. + osg::ref_ptr loadedModel = osgDB::readNodeFile(argv[1]); + if (!loadedModel) + { + std::cout << argv[0] <<": No data loaded." << std::endl; + return 1; + } + + glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_ALPHA ); + glutInitWindowPosition( 100, 100 ); + glutInitWindowSize( 800, 600 ); + glutCreateWindow( argv[0] ); + glutDisplayFunc( display ); + glutReshapeFunc( reshape ); + glutMouseFunc( mousedown ); + glutMotionFunc( mousemove ); + glutKeyboardFunc( keyboard ); + + glutCreateMenu( menu ); + glutAddMenuEntry( "item 0", 0 ); + glutAddMenuEntry( "item 1", 1 ); + glutAttachMenu( GLUT_RIGHT_BUTTON ); + + // create the view of the scene. + sceneView = new osgUtil::SceneView; + sceneView->setDefaults(); + sceneView->setSceneData(loadedModel.get()); + + // initialize the view to look at the center of the scene graph + const osg::BoundingSphere& bs = loadedModel->getBound(); + centerPos = bs.center(); + viewRot = 0.0f; + viewElev = 0.0f; + viewRadius = 2.0f * bs.radius(); + + // record the timer tick at the start of rendering. + start_tick = osg::Timer::instance()->tick(); + frameNum = 0; + + glutMainLoop(); + return 0; +} + +/*EOF*/ diff --git a/examples/osgGLUTsimple/GNUmakefile b/examples/osgGLUTsimple/GNUmakefile new file mode 100644 index 000000000..0cda90555 --- /dev/null +++ b/examples/osgGLUTsimple/GNUmakefile @@ -0,0 +1,18 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgGLUTsimple.cpp\ + +LIBS += -losgDB -losgUtil -losg -lglut $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS) + +INSTFILES = \ + $(CXXFILES)\ + GNUmakefile.inst=GNUmakefile + +EXEC = osgGLUTsimple + +INC += $(X_INC) +LDFLAGS += -L/usr/X11R6/lib + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgGLUTsimple/GNUmakefile.inst b/examples/osgGLUTsimple/GNUmakefile.inst new file mode 100644 index 000000000..60ed1d5d7 --- /dev/null +++ b/examples/osgGLUTsimple/GNUmakefile.inst @@ -0,0 +1,14 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgGLUTsimple.cpp\ + +LIBS += -losgDB -losgUtil -losg -lglut $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS) + +EXEC = osgGLUTsimple + +INC += $(X_INC) +LDFLAGS += + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgGLUTsimple/osgGLUTsimple.cpp b/examples/osgGLUTsimple/osgGLUTsimple.cpp new file mode 100644 index 000000000..fbd16df20 --- /dev/null +++ b/examples/osgGLUTsimple/osgGLUTsimple.cpp @@ -0,0 +1,95 @@ +// C++ source file - (C) 2003 Robert Osfield, released under the OSGPL. +// (C) 2005 Mike Weiblen http://mew.cx/ released under the OSGPL. +// Simple example using GLUT to create an OpenGL window and OSG for rendering. +// Derived from osgsimple.cpp + +#include +#ifdef WIN32 +#include +#endif +#include +#include +#include +#include + +osg::ref_ptr sceneView; +osg::Timer_t start_tick; +unsigned int frameNum; +osg::Matrix viewMatrix; + +void display(void) +{ + // set up the frame stamp for current frame to record the current time and frame number so that animtion code can advance correctly + osg::ref_ptr frameStamp = new osg::FrameStamp; + frameStamp->setReferenceTime(osg::Timer::instance()->delta_s(start_tick,osg::Timer::instance()->tick())); + frameStamp->setFrameNumber( frameNum++ ); + + // pass frame stamp to the SceneView so that the update, cull and draw traversals all use the same FrameStamp + sceneView->setFrameStamp( frameStamp.get() ); + + // set the view + sceneView->setViewMatrix( viewMatrix ); + + // do the update traversal the scene graph - such as updating animations + sceneView->update(); + + // do the cull traversal, collect all objects in the view frustum into a sorted set of rendering bins + sceneView->cull(); + + // draw the rendering bins. + sceneView->draw(); + + // Swap Buffers + glutSwapBuffers(); + glutPostRedisplay(); +} + +void reshape( int w, int h ) +{ + // update the viewport dimensions, in case the window has been resized. + sceneView->setViewport( 0, 0, w, h ); +} + +int main( int argc, char **argv ) +{ + glutInit(&argc, argv); + + if (argc<2) + { + std::cout << argv[0] <<": requires filename argument." << std::endl; + return 1; + } + + // load the scene. + osg::ref_ptr loadedModel = osgDB::readNodeFile(argv[1]); + if (!loadedModel) + { + std::cout << argv[0] <<": No data loaded." << std::endl; + return 1; + } + + glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_ALPHA ); + glutInitWindowPosition( 100, 100 ); + glutInitWindowSize( 800, 600 ); + glutCreateWindow( argv[0] ); + glutDisplayFunc( display ); + glutReshapeFunc( reshape ); + + // create the view of the scene. + sceneView = new osgUtil::SceneView; + sceneView->setDefaults(); + sceneView->setSceneData(loadedModel.get()); + + // initialize the view to look at the center of the scene graph + const osg::BoundingSphere& bs = loadedModel->getBound(); + viewMatrix.makeLookAt(bs.center()-osg::Vec3(0.0,2.0f*bs.radius(),0.0),bs.center(),osg::Vec3(0.0f,0.0f,1.0f)); + + // record the timer tick at the start of rendering. + start_tick = osg::Timer::instance()->tick(); + frameNum = 0; + + glutMainLoop(); + return 0; +} + +/*EOF*/