diff --git a/examples/osgsimpleviewerGLUT/GNUmakefile b/examples/osgsimpleviewerGLUT/GNUmakefile new file mode 100644 index 000000000..0ea40de7a --- /dev/null +++ b/examples/osgsimpleviewerGLUT/GNUmakefile @@ -0,0 +1,18 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgsimpleviewerGLUT.cpp\ + +LIBS += -losgGA -losgDB -losgUtil -losg $(GLUT_LIBS) $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS) + +INSTFILES = \ + $(CXXFILES)\ + GNUmakefile.inst=GNUmakefile + +EXEC = osgsimpleviewerGLUT + +INC += $(X_INC) +LDFLAGS += -L/usr/X11R6/lib + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgsimpleviewerGLUT/GNUmakefile.inst b/examples/osgsimpleviewerGLUT/GNUmakefile.inst new file mode 100644 index 000000000..660258928 --- /dev/null +++ b/examples/osgsimpleviewerGLUT/GNUmakefile.inst @@ -0,0 +1,14 @@ +TOPDIR = ../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + osgsimpleviewerGLUT.cpp\ + +LIBS += -losgGA -losgDB -losgUtil -losg -lglut $(GL_LIBS) $(X_LIBS) $(OTHER_LIBS) + +EXEC = osgsimpleviewerGLUT + +INC += $(X_INC) +LDFLAGS += + +include $(TOPDIR)/Make/makerules diff --git a/examples/osgsimpleviewerGLUT/osgsimpleviewerGLUT.cpp b/examples/osgsimpleviewerGLUT/osgsimpleviewerGLUT.cpp new file mode 100644 index 000000000..9ae4b847e --- /dev/null +++ b/examples/osgsimpleviewerGLUT/osgsimpleviewerGLUT.cpp @@ -0,0 +1,100 @@ +// 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 +#ifdef __APPLE__ +# include +#else +# include +#endif + +#include +#include +#include + +osg::ref_ptr viewer; + +void display(void) +{ + // update and render the scene graph + viewer->frame(); + + // Swap Buffers + glutSwapBuffers(); + glutPostRedisplay(); +} + +void reshape( int w, int h ) +{ + // update the window dimensions, in case the window has been resized. + viewer->getEventQueue()->windowResize(0, 0, w, h ); +} + +void mousebutton( int button, int state, int x, int y ) +{ + if (state==0) viewer->getEventQueue()->mouseButtonPress( x, y, button+1 ); + else viewer->getEventQueue()->mouseButtonRelease( x, y, button+1 ); +} + +void mousemove( int x, int y ) +{ + viewer->getEventQueue()->mouseMotion( x, y ); +} + +void keyboard( unsigned char key, int /*x*/, int /*y*/ ) +{ + switch( key ) + { + case 27: + glutDestroyWindow(glutGetWindow()); + break; + default: + viewer->getEventQueue()->keyPress( (osgGA::GUIEventAdapter::KeySymbol) key ); + viewer->getEventQueue()->keyRelease( (osgGA::GUIEventAdapter::KeySymbol) key ); + break; + } +} + +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( mousebutton ); + glutMotionFunc( mousemove ); + glutKeyboardFunc( keyboard ); + + // create the view of the scene. + viewer = new osgGA::SimpleViewer; + viewer->setSceneData(loadedModel.get()); + viewer->setCameraManipulator(new osgGA::TrackballManipulator); + + glutMainLoop(); + return 0; +} + +/*EOF*/