int main (int argc, char **argv) { osgInit(argc,argv); // GLUT init glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); int winid = glutCreateWindow("OpenSG"); glutKeyboardFunc(key); glutVisibilityFunc(vis); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(display); // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); // OSG SceneFileHandler::the().print(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); DirectionalLightPtr dl = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore( dl ); endEditCP(dlight); beginEditCP(dl); dl->setAmbient( .3, .3, .3, 1 ); dl->setDiffuse( 1, 1, 1, 1 ); dl->setDirection(0,0,1); dl->setBeacon( b1n); endEditCP(dl); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Load the file NodePtr file = NullFC; if ( argc > 1 ) file = SceneFileHandler::the().read(argv[1]); if ( file == NullFC ) { std::cerr << "Couldn't load file, ignoring" << std::endl; file = makeTorus( .5, 2, 16, 16 ); } file->updateVolume(); Vec3f min,max; file->getVolume().getBounds( min, max ); std::cout << "Volume: from " << min << " to " << max << std::endl; beginEditCP(dlight); dlight->addChild( file ); endEditCP(dlight); std::cerr << "Tree: " << std::endl; // root->dump(); // Camera cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 90 ) ); cam->setNear( 0.1 ); cam->setFar( 10000 ); // Background SolidBackgroundPtr bkgnd = SolidBackground::create(); // Foreground GrabForegroundPtr fgnd = GrabForeground::create(); image = Image::create(); beginEditCP(image); image->set(Image::OSG_RGB_PF, 1); endEditCP(image); fgnd->setImage(image); // Viewport vp = Viewport::create(); vp->setCamera( cam ); vp->setBackground( bkgnd ); vp->editMFForegrounds()->push_back( fgnd ); vp->setRoot( root ); vp->setSize( 0,0, 1,1 ); // Window std::cout << "GLUT winid: " << winid << std::endl; GLUTWindowPtr gwin; GLint glvp[4]; glGetIntegerv( GL_VIEWPORT, glvp ); gwin = GLUTWindow::create(); gwin->setId(winid); gwin->setSize( glvp[2], glvp[3] ); win = gwin; win->addPort( vp ); win->init(); // Action ract = DrawAction::create(); // tball Vec3f pos( 0, 0, max[2] + ( max[2] - min[2] ) * 1.5 ); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); // run... glutMainLoop(); return 0; }
int main (int argc, char **argv) { osgInit(argc,argv); // GLUT init glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); int winid = glutCreateWindow("OpenSG"); glutKeyboardFunc(key); glutVisibilityFunc(vis); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(display); if ( argc > 1 && isdigit(argv[1][0]) ) { nhviewports = atoi( argv[1] ); argv++; argc--; } if ( argc > 1 && isdigit(argv[1][0]) ) { nvviewports = atoi( argv[1] ); argv++; argc--; } else nvviewports = nhviewports; // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); // OSG SceneFileHandler::the().print(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); DirectionalLightPtr dl = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore( dl ); endEditCP(dlight); beginEditCP(dl); dl->setAmbient( .3, .3, .3, 1 ); dl->setDiffuse( 1, 1, 1, 1 ); dl->setDirection(0,0,1); dl->setBeacon( b1n); endEditCP(dl); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Load the file NodePtr file = NullFC; if ( argc > 1 ) file = SceneFileHandler::the().read(argv[1]); if ( file == NullFC ) { std::cerr << "Couldn't load file, ignoring" << std::endl; file = makeTorus( .5, 2, 16, 16 ); file = makeBox( 1,1,1, 1,1,1 ); } file->updateVolume(); Vec3f min,max; file->getVolume().getBounds( min, max ); std::cout << "Volume: from " << min << " to " << max << std::endl; beginEditCP(dlight); dlight->addChild( file ); endEditCP(dlight); std::cerr << "Tree: " << std::endl; root->dump(); // Camera cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 90 ) ); cam->setNear( 0.1 ); cam->setFar( 100 ); // Background #if 1 // doesn't work right now SkyBackgroundPtr sbkgnd = SkyBackground::create(); sbkgnd->editMFSkyColor()->push_back(Color4f(1, 0, 0,0.5)); sbkgnd->editMFSkyAngle()->push_back(Pi / 2); sbkgnd->editMFSkyColor()->push_back(Color4f(0, 1, 0,0.5)); sbkgnd->editMFSkyAngle()->push_back(Pi); sbkgnd->editMFSkyColor()->push_back(Color4f(0, 0, 1,0.5)); #else SolidBackgroundPtr sbkgnd = SolidBackground::create(); sbkgnd->setColor( Color3f(.5, .5, 1) ); #endif // Window std::cout << "GLUT winid: " << winid << std::endl; GLUTWindowPtr gwin; GLint glvp[4]; glGetIntegerv( GL_VIEWPORT, glvp ); gwin = GLUTWindow::create(); gwin->setId(winid); gwin->setSize( glvp[2], glvp[3] ); win = gwin; // Viewports & Decorators vp = new ViewportPtr [ nhviewports * nvviewports ]; deco = new TileCameraDecoratorPtr [ nhviewports * nvviewports ]; for ( int i = 0; i < nhviewports; i++ ) { for ( int j = 0; j < nvviewports; j++ ) { int ind = i * nvviewports + j; vp[ind] = Viewport::create(); vp[ind]->setBackground( sbkgnd ); vp[ind]->setRoot( root ); vp[ind]->setSize( 1./nhviewports * i,1./nvviewports * j, 1./nhviewports * (i+1),1./nvviewports * (j+1) ); deco[ind] = TileCameraDecorator::create(); deco[ind]->setDecoratee( cam ); deco[ind]->setSize( 1./nhviewports * i,1./nvviewports * j, 1./nhviewports * (i+1),1./nvviewports * (j+1) ); deco[ind]->setFullSize( 800, 800 ); vp[ind]->setCamera( deco[ind] ); // for debugging: vp[ind]->setCamera( cam ); win->addPort( vp[ind] ); } } win->init(); #if 0 // Test write, to check generic access ofstream outFileStream( "test.osg" ); if( !outFileStream ) { std::cerr << "Can not open output stream to file" << std::endl; return -1; } OSGWriter writer( outFileStream, 4 ); writer.write( win ); #endif // Action ract = DrawAction::create(); ract->setFrustumCulling( false ); // tball Vec3f pos( 0, 0, max[2] + ( max[2] - min[2] ) * 1.5 ); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); // run... glutMainLoop(); return 0; }
virtual void initialize(void) { // Check necessary stuff if(_win == NullFC) { FWARNING(("SceneManager::initialize: window not set, " "ignoring!\n")); return; } // the rendering action _ownAction = RenderAction::create(); _action = _ownAction; // the camera and light beacon NodePtr cartN = Node::create(); _cart = Transform::create(); beginEditCP(cartN); cartN->setCore(_cart); endEditCP(cartN); // the headlight _internalRoot = Node::create(); _headlight = DirectionalLight::create(); addRefCP(_internalRoot); beginEditCP(_internalRoot); _internalRoot->setCore(_headlight); _internalRoot->addChild(cartN); endEditCP(_internalRoot); beginEditCP(_headlight); _headlight->setAmbient (.3, .3, .3, 1); _headlight->setDiffuse ( 1, 1, 1, 1); _headlight->setSpecular ( 1, 1, 1, 1); _headlight->setDirection( 0, 0, 1); _headlight->setBeacon (cartN); endEditCP(_headlight); // the camera _camera = PerspectiveCamera::create(); addRefCP(_camera); beginEditCP(PerspectiveCameraPtr::dcast(_camera)); PerspectiveCameraPtr::dcast(_camera)->setBeacon(cartN); PerspectiveCameraPtr::dcast(_camera)->setFov (deg2rad(60.f)); PerspectiveCameraPtr::dcast(_camera)->setNear (0.1f); PerspectiveCameraPtr::dcast(_camera)->setFar (10000.f); endEditCP(PerspectiveCameraPtr::dcast(_camera)); // need a viewport? if(_win->getPort().size() == 0) { SolidBackgroundPtr bg = SolidBackground::create(); beginEditCP(bg); bg->setColor(Color3f(0, 0, 0)); endEditCP(bg); ViewportPtr vp = Viewport::create(); beginEditCP(vp); vp->setCamera (_camera); vp->setRoot (_internalRoot); vp->setSize (0,0, 1,1); vp->setBackground (bg); endEditCP(vp); beginEditCP(_win); _win->addPort(vp); endEditCP(_win); } }
int main (int argc, char **argv) { osgInit(argc,argv); // GLUT init glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); int winid = glutCreateWindow("OpenSG"); glutKeyboardFunc(key); glutVisibilityFunc(vis); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(display); glEnable( GL_NORMALIZE ); glEnable( GL_DEPTH_TEST ); // OSG // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); headlight = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore( headlight ); endEditCP(dlight); beginEditCP(headlight); headlight->setAmbient( .3, .3, .3, 1 ); headlight->setDiffuse( 1, 1, 1, 1 ); headlight->setSpecular( 1, 1, 1, 1 ); headlight->setDirection(0,0,1); headlight->setBeacon( b1n); endEditCP(headlight); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Create the scene NodePtr sroot = Node::create(); beginEditCP(dlight); dlight->addChild(sroot); endEditCP(dlight); GroupPtr gr = Group::create(); beginEditCP(sroot); sroot->setCore(gr); endEditCP(sroot); // a transform to move it around NodePtr tnode = Node::create(); tr = Transform::create(); beginEditCP(tnode); tnode->setCore( tr ); endEditCP(tnode); beginEditCP(sroot); sroot->addChild(tnode); endEditCP(sroot); // the billboard NodePtr bnode = Node::create(); bill = Billboard::create(); beginEditCP(bnode); bnode->setCore( bill ); endEditCP(bnode); beginEditCP(tnode); tnode->addChild(bnode); endEditCP(tnode); // a geometry to billboard NodePtr geo = makeTorus( .2, 1, 16, 3); beginEditCP(bnode); bnode->addChild( geo ); endEditCP(bnode); // a geometry to lead the render action somewhere else geo = makePlane( 2, 2, 2, 2 ); beginEditCP(sroot); sroot->addChild( geo ); endEditCP(sroot); dlight->updateVolume(); Vec3f min,max; dlight->getVolume().getBounds( min, max ); std::cout << "Volume: from " << min << " to " << max << std::endl; //std::cerr << "Tree: " << std::endl; //root->dump(); // Camera PerspectiveCameraPtr cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 60 ) ); cam->setNear( .1 ); cam->setFar( 20. ); // Background GradientBackgroundPtr bkgnd = GradientBackground::create(); bkgnd->addLine( Color3f( 0,0,0 ), 0 ); bkgnd->addLine( Color3f( .5,.5,0 ), 0.5 ); bkgnd->addLine( Color3f( .7,.7,1 ), 0.5 ); bkgnd->addLine( Color3f( 0,0,1 ), 1 ); // Viewport ViewportPtr vp = Viewport::create(); vp->setCamera( cam ); vp->setBackground( bkgnd ); vp->setRoot( root ); vp->setSize( 0,0, 1,1 ); // Window std::cout << "GLUT winid: " << winid << std::endl; GLUTWindowPtr gwin; GLint glvp[4]; glGetIntegerv( GL_VIEWPORT, glvp ); gwin = GLUTWindow::create(); gwin->setId(winid); gwin->setSize( glvp[2], glvp[3] ); win = gwin; win->addPort( vp ); // Actions dact = DrawAction::create(); ract = RenderAction::create(); // tball Vec3f pos(0, 0, max[2] + 1.5 * (max[2] - min[2])); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); tball.setTranslationScale(10.); // run... glutMainLoop(); return 0; }
ComponentPtr createGLPanel(void) { //Create the nessicary parts for a viewport //Camera Beacon Matrix TransformMatrix; TransformMatrix.setTranslate(0.0f,0.0f, 0.0f); TransformPtr CameraBeaconTransform = Transform::create(); beginEditCP(CameraBeaconTransform, Transform::MatrixFieldMask); CameraBeaconTransform->setMatrix(TransformMatrix); endEditCP(CameraBeaconTransform, Transform::MatrixFieldMask); NodePtr CameraBeaconNode = Node::create(); beginEditCP(CameraBeaconNode, Node::CoreFieldMask); CameraBeaconNode->setCore(CameraBeaconTransform); endEditCP(CameraBeaconNode, Node::CoreFieldMask); //Light Beacon Matrix LightTransformMatrix; LightTransformMatrix.setTranslate(0.0f,0.0f, 0.0f); TransformPtr LightBeaconTransform = Transform::create(); beginEditCP(LightBeaconTransform, Transform::MatrixFieldMask); LightBeaconTransform->setMatrix(TransformMatrix); endEditCP(LightBeaconTransform, Transform::MatrixFieldMask); NodePtr LightBeaconNode = Node::create(); beginEditCP(LightBeaconNode, Node::CoreFieldMask); LightBeaconNode->setCore(CameraBeaconTransform); endEditCP(LightBeaconNode, Node::CoreFieldMask); //Light Node DirectionalLightPtr TheDirectionLight = DirectionalLight::create(); beginEditCP(TheDirectionLight, DirectionalLight::DirectionFieldMask); TheDirectionLight->setDirection(0.0f,1.0f,0.0f); endEditCP(TheDirectionLight, DirectionalLight::DirectionFieldMask); NodePtr LightNode = Node::create(); beginEditCP(LightNode, Node::CoreFieldMask | Node::ChildrenFieldMask); LightNode->setCore(TheDirectionLight); LightNode->addChild(createScene()); endEditCP(LightNode, Node::CoreFieldMask | Node::ChildrenFieldMask); // Make Torus Node (creates Torus in background of scene) NodePtr GeometryNode = makeTorus(.5, 2, 32, 32); // Make Main Scene Node and add the Torus NodePtr DefaultRootNode = osg::Node::create(); beginEditCP(DefaultRootNode, Node::CoreFieldMask | Node::ChildrenFieldMask); DefaultRootNode->setCore(osg::Group::create()); DefaultRootNode->addChild(CameraBeaconNode); DefaultRootNode->addChild(LightBeaconNode); DefaultRootNode->addChild(LightNode); endEditCP(DefaultRootNode, Node::CoreFieldMask | Node::ChildrenFieldMask); //Camera PerspectiveCameraPtr DefaultCamera = PerspectiveCamera::create(); beginEditCP(DefaultCamera); DefaultCamera->setBeacon(CameraBeaconNode); DefaultCamera->setFov (deg2rad(60.f)); DefaultCamera->setNear (0.1f); DefaultCamera->setFar (100.f); endEditCP(DefaultCamera); //Background GradientBackgroundPtr DefaultBackground = GradientBackground::create(); beginEditCP(DefaultBackground, GradientBackground::ColorFieldMask | GradientBackground::PositionFieldMask); DefaultBackground->addLine(Color3f(0.0f,0.0f,0.0f), 0.0f); DefaultBackground->addLine(Color3f(0.0f,0.0f,1.0f), 1.0f); endEditCP(DefaultBackground, GradientBackground::ColorFieldMask | GradientBackground::PositionFieldMask); //Viewport ViewportPtr DefaultViewport = Viewport::create(); beginEditCP(DefaultViewport); DefaultViewport->setCamera (DefaultCamera); DefaultViewport->setRoot (DefaultRootNode); DefaultViewport->setSize (0.0f,0.0f, 1.0f,1.0f); DefaultViewport->setBackground (DefaultBackground); endEditCP(DefaultViewport); //GL Viewport Component GLViewportPtr TheGLViewport = GLViewport::create(); beginEditCP(TheGLViewport, GLViewport::PortFieldMask | GLViewport::PreferredSizeFieldMask | GLViewport::BordersFieldMask); TheGLViewport->setPort(DefaultViewport); TheGLViewport->setPreferredSize(Vec2f(1024.0f,768.0f)); endEditCP(TheGLViewport, GLViewport::PortFieldMask | GLViewport::PreferredSizeFieldMask | GLViewport::BordersFieldMask); TheGLViewport->showAll(); return TheGLViewport; }
int main(int argc, char **argv) { for(int i = 0; i < argc; i++) { std::cout << "Param " << i << ":" << argv[i] << std::endl; } OSG::osgInit(argc, argv); const char *inFileName = "tie.bin"; if(argc > 1) inFileName = argv[1]; std::ifstream in(inFileName, std::ios::binary); if(!in) { std::cerr << "ERROR: Cannot open file " << inFileName << "" << std::endl; return -1; } OSG::BINLoader loader(in); loader.read(); in.close(); std::cout << "MAIN: " << getContainerId(loader.getRootNode()) << " is root" << std::endl; // GLUT init glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); int winid = glutCreateWindow("OpenSG"); glutKeyboardFunc(key); glutVisibilityFunc(vis); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(display); // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glDisable(GL_LIGHTING); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glClearColor(0.5, 0.5, 0.5, 1.); // OSG // OSGSceneFileHandler::the().print(); // FhsFile::touch(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore(b1); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore(t1); t1n->addChild(b1n); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); headlight = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore(headlight); endEditCP(dlight); beginEditCP(headlight); headlight->setAmbient(.3, .3, .3, 1); headlight->setDiffuse(1, 1, 1, 1); headlight->setSpecular(1, 1, 1, 1); headlight->setDirection(0, 0, 1); headlight->setBeacon(b1n); endEditCP(headlight); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore(gr1); root->addChild(t1n); root->addChild(dlight); endEditCP(root); // Load the file NodePtr fileRoot = Node::create(); // OSGActivateColMatPtr colMat = OSGActivateColMat::create(); GroupPtr gr = Group::create(); beginEditCP(fileRoot); // fileRoot->setCore(colMat); fileRoot->setCore(gr); endEditCP(fileRoot); beginEditCP(dlight); dlight->addChild(fileRoot); endEditCP(dlight); // for(UInt32 numFiles = 1; numFiles < argc; numFiles++) // { // file = SceneFileHandler::the().read(argv[1]); file = loader.getRootNode(); beginEditCP(fileRoot); fileRoot->addChild(file); fileRoot->invalidateVolume(); endEditCP(fileRoot); // } dlight->updateVolume(); Vec3f min, max; dlight->getVolume().getBounds(min, max); std::cout << "Volume: from " << min << " to " << max << std::endl; //std::cerr << "Tree: " << std::endl; //root->dump(); // Camera PerspectiveCameraPtr cam = PerspectiveCamera::create(); cam->setBeacon(b1n); cam->setFov(deg2rad(60)); cam->setNear(1.); cam->setFar(100000.); // Background GradientBackgroundPtr bkgnd = GradientBackground::create(); bkgnd->addLine(Color3f(0, 0, 0), 0); bkgnd->addLine(Color3f(.5, .5, 0), 0.5); bkgnd->addLine(Color3f(.7, .7, 1), 0.5); bkgnd->addLine(Color3f(0, 0, 1), 1); // Viewport ViewportPtr vp = Viewport::create(); vp->setCamera(cam); vp->setBackground(bkgnd); vp->setRoot(root); vp->setSize(0, 0, 1, 1); // Window std::cout << "GLUT winid: " << winid << std::endl; GLUTWindowPtr gwin; GLint glvp[4]; glGetIntegerv(GL_VIEWPORT, glvp); gwin = GLUTWindow::create(); gwin->setId(winid); gwin->setSize(glvp[2], glvp[3]); win = gwin; win->addPort(vp); // Actions dact = DrawAction::create(); ract = RenderAction::create(); // tball /* Vec3f pos(min[0] + 0.5 * (max[0] - min[0]), min[1] + 0.5 * (max[1] - min[1]), max[2] + 1.5 * (max[2] - min[2])); */ Vec3f pos(0, 0, max[2] + 1.5 * (max[2] - min[2])); tball.setMode(Trackball::OSGObject); tball.setStartPosition(pos, true); tball.setSum(true); tball.setTranslationMode(Trackball::OSGFree); tball.setTranslationScale(10000.); // run... glutMainLoop(); return 0; }
int main( int argc, char **argv ) { Int32 i, retVal; // OSG init osgInit(argc, argv); basetime = getSystemTime(); gThreadManager = ThreadManager::the(); SceneFileHandler::the().print(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); DirectionalLightPtr dl = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore( dl ); endEditCP(dlight); beginEditCP(dl); dl->setAmbient( .3, .3, .3, 1 ); dl->setDiffuse( 1, 1, 1, 1 ); dl->setDirection(0,0,1); dl->setBeacon( b1n); endEditCP(dl); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Load the file NodePtr file = NullFC; if ( argc > 1 ) file = SceneFileHandler::the().read(argv[1]); if ( file == NullFC ) { std::cerr << "Couldn't load file, ignoring" << std::endl; file = makePlane( 2,2,2,2 ); } file->updateVolume(); Vec3f min,max; file->getVolume().getBounds( min, max ); std::cout << "Volume: from " << min << " to " << max << std::endl; beginEditCP(dlight); dlight->addChild( file ); endEditCP(dlight); std::cerr << "Tree: " << std::endl; root->dump(); // Camera PerspectiveCameraPtr cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 60 ) ); cam->setNear( 0.1 ); cam->setFar( 10000 ); // Background GradientBackgroundPtr bkgnd = GradientBackground::create(); bkgnd->addLine( Color3f( 0,0,0 ), 0 ); bkgnd->addLine( Color3f( 0,0,1 ), 0 ); // Action // QT init QApplication::setColorSpec( QApplication::CustomColor ); a = new QApplication( argc, argv ); if ( !QGLFormat::hasOpenGL() ) { qWarning( "This system has no OpenGL support. Exiting." ); return -1; } Vec3f pos( 0, 0, max[2] + ( max[2] - min[2] ) * 1.5 ); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); // Create Windows QGLFormat::setDefaultFormat(QGLFormat(QGL::DirectRendering | QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba )); for ( i = 0; i < NUM_THREADS; i++ ) { glWidget[i] = new MyOSGQGLWidget(); // Viewport vp = Viewport::create(); vp->setCamera( cam ); vp->setBackground( bkgnd ); vp->setRoot( root ); vp->setSize( 0,0, 1,1 ); glWidget[i]->_osgWin = QTWindow::create(); glWidget[i]->_osgWin->setGlWidget( glWidget[i] ); glWidget[i]->_osgWin->addPort( vp ); glWidget[i]->_osgWin->init(); if ( i == 0 ) { a->setMainWidget( glWidget[0] ); } glWidget[i]->show(); } for (i = 0; i < NUM_THREADS; i++) { drawThread[i] = dynamic_cast<Thread *>(gThreadManager->getThread(NULL)); if ( drawThread[i] != NULL ) { drawThreadID[i] = i; drawThread[i]->runFunction( drawThreadProc, 0, (void *) &(drawThreadID[i]) ); } } drawBarrier = gThreadManager->getBarrier( "drawBarrier" ); // glWidget[0]->paintGL(); retVal = a->exec(); // execute QT main loop // stop th ethreads for ( i=0; i<NUM_THREADS; i++ ) glWidget[i]->_stop = true; drawBarrier->enter( NUM_THREADS + 1 ); for ( i=0; i<NUM_THREADS; i++ ) Thread::join( drawThread[i] ); return (retVal); }
int main (int argc, char **argv) { osgInit(argc,argv); FieldContainerPtr pProto = Geometry::getClassType().getPrototype(); GeometryPtr pGeoProto = GeometryPtr::dcast(pProto); if(pGeoProto != NullFC) { pGeoProto->setDlistCache(false); } // GLUT init glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_STENCIL); int winid = glutCreateWindow("OpenSG"); glutKeyboardFunc(key); glutVisibilityFunc(vis); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(display); // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); // glEnable( GL_LIGHT0 ); glEnable(GL_NORMALIZE); // OSG SceneFileHandler::the().print(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light //#define OSG_HLIGHT NodePtr dlight = Node::create(); #ifdef OSG_HLIGHT DirectionalLightPtr dl = DirectionalLight::create(); #else GroupPtr dl = Group::create(); #endif beginEditCP(dlight); dlight->setCore( dl ); endEditCP(dlight); #ifdef OSG_HLIGHT beginEditCP(dl); dl->setAmbient( .2, .2, .2, 1 ); dl->setDiffuse( .8, .8, .8, 1 ); dl->setDirection(0,0,1); dl->setBeacon( b1n); endEditCP(dl); #endif // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Load the file NodePtr file = NullFC; /* if ( argc > 1 ) file = SceneFileHandler::the().read(argv[1]); if ( file == NullFC ) { cerr << "Couldn't load file, ignoring" << endl; file = makeTorus( .5, 2, 16, 16 ); } */ VRMLLoader *pFile = new VRMLLoader; pFile->scanFile(argv[1], 0); VRMLToOSGAction aVRMLToOSG; FieldContainerPtr pFC = NullFC; VRMLBindings::NodeBinderPtr pNodeBinder = NULL; fprintf(stderr, "Resnode %p\n", pFile->getFileTree()); aVRMLToOSG.setNameNodeMap(pFile->getNameNodeMap()); aVRMLToOSG.setDataTransferMode(VRMLToOSGAction::SwapData); aVRMLToOSG.apply(pFile->getFileTree()); /* pNodeBinder = (pFile->getFileTree())->getBinder(); if(pNodeBinder != NULL) { pFC = pNodeBinder->getFCPtr(); if(pFC != NullFC) { file = NodePtr::dcast(pFC); } else { fprintf(stderr, "FCPtr NULL\n"); } } else { fprintf(stderr, "Binder NULL\n"); } */ file = aVRMLToOSG.getRoot(); if(file == NullFC) return 0; file->updateVolume(); Vec3f min,max; file->getVolume().getBounds( min, max ); cout << "Volume: from " << min << " to " << max << endl; beginEditCP(dlight); dlight->addChild( file ); endEditCP(dlight); cerr << "Tree: " << endl; // root->dump(); // Camera cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 90 ) ); cam->setNear( 0.1 ); cam->setFar( 10000 ); // Background SolidBackgroundPtr bkgnd = SolidBackground::create(); // Viewport vp = Viewport::create(); vp->setCamera( cam ); vp->setBackground( bkgnd ); vp->setRoot( root ); vp->setSize( 0,0, 1,1 ); // Window cout << "GLUT winid: " << winid << endl; GLUTWindowPtr gwin; GLint glvp[4]; glGetIntegerv( GL_VIEWPORT, glvp ); gwin = GLUTWindow::create(); gwin->setId(winid); gwin->setSize( glvp[2], glvp[3] ); win = gwin; win->addPort( vp ); win->init(); // Action ract = DrawAction::create(); // tball Vec3f pos(min[0] + ((max[0] - min[0]) * 0.5), min[1] + ((max[1] - min[1]) * 0.5), max[2] + ( max[2] - min[2] ) * 1.5 ); float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6; Pnt3f tCenter(min[0] + (max[0] - min[0]) / 2, min[1] + (max[1] - min[1]) / 2, min[2] + (max[2] - min[2]) / 2); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); tball.setTranslationScale(scale); tball.setRotationCenter(tCenter); // run... #ifdef PAR_SCHEDULER Thread::getCurrent()->getChangeList()->applyTo(1); VSC::VSCScheduler::the()->run(); #endif glutMainLoop(); return 0; }
int main (int argc, char **argv) { osgInit(argc,argv); // GLUT init glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); int winid = glutCreateWindow("OpenSG"); glutKeyboardFunc(key); glutVisibilityFunc(vis); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(display); // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); // OSG SceneFileHandler::the().print(); // create the graph // beacon for camera and light NodePtr b1n = Node::create(); GroupPtr b1 = Group::create(); beginEditCP(b1n); b1n->setCore( b1 ); endEditCP(b1n); // transformation NodePtr t1n = Node::create(); TransformPtr t1 = Transform::create(); beginEditCP(t1n); t1n->setCore( t1 ); t1n->addChild( b1n ); endEditCP(t1n); cam_trans = t1; // light NodePtr dlight = Node::create(); DirectionalLightPtr dl = DirectionalLight::create(); beginEditCP(dlight); dlight->setCore( dl ); endEditCP(dlight); beginEditCP(dl); dl->setAmbient( .3, .3, .3, 1 ); dl->setDiffuse( 1, 1, 1, 1 ); dl->setDirection(0,0,1); dl->setBeacon( b1n); endEditCP(dl); // root root = Node::create(); GroupPtr gr1 = Group::create(); beginEditCP(root); root->setCore( gr1 ); root->addChild( t1n ); root->addChild( dlight ); endEditCP(root); // Load the file NodePtr file = NullFC; NodePtr file1 = NullFC; if ( argc > 1 ) file1 = SceneFileHandler::the().read(argv[1]); if ( file1 == NullFC ) { std::cerr << "Couldn't load file, ignoring" << std::endl; file1 = makeTorus( .5, 2, 16, 16 ); } file1->updateVolume(); // file->dump(); // subRefCP(file); // return 0; Vec3f min,max; file1->getVolume().getBounds( min, max ); std::cout << "Volume: from " << min << " to " << max << std::endl; file = Node::create(); MaterialGroupPtr testMat = MaterialGroup::create(); SimpleMaterialPtr defaultMaterial = SimpleMaterial::create(); beginEditCP(defaultMaterial); defaultMaterial->setDiffuse(Color3f(1,.0,.0)); defaultMaterial->setAmbient(Color3f(0.1,0.1,0.1)); defaultMaterial->setSpecular(Color3f(1,1,1)); defaultMaterial->setShininess(20); endEditCP (defaultMaterial); testMat->setMaterial(defaultMaterial); beginEditCP(file); { // file->setCore(testMat); file->setCore(Group::create()); file->addChild(file1); } endEditCP (file); scene_trans = Transform::create(); NodePtr sceneTrN = Node::create(); beginEditCP(sceneTrN); { sceneTrN->setCore(scene_trans); sceneTrN->addChild(file); sceneTrN->addChild(makeTorus( .5, 2, 16, 16 )); } endEditCP(sceneTrN); beginEditCP(dlight); dlight->addChild(sceneTrN); endEditCP(dlight); std::cerr << "Tree: " << std::endl; // root->dump(); // Camera cam = PerspectiveCamera::create(); cam->setBeacon( b1n ); cam->setFov( deg2rad( 90 ) ); cam->setNear( 0.1 ); cam->setFar( 100000 ); // Background SolidBackgroundPtr bkgnd = SolidBackground::create(); beginEditCP(bkgnd, SolidBackground::ColorFieldMask); bkgnd->setColor(Color3f(1,1,1)); endEditCP(bkgnd, SolidBackground::ColorFieldMask); // Viewport vp = Viewport::create(); vp->setCamera( cam ); vp->setBackground( bkgnd ); vp->setRoot( root ); vp->setSize( 0,0, 1,1 ); // Window std::cout << "GLUT winid: " << winid << std::endl; GLUTWindowPtr gwin; GLint glvp[4]; glGetIntegerv( GL_VIEWPORT, glvp ); gwin = GLUTWindow::create(); gwin->setId(winid); gwin->setSize( glvp[2], glvp[3] ); win = gwin; win->addPort( vp ); win->init(); // Action ract = DrawAction::create(); renact = RenderAction::create(); // tball Vec3f pos; pos.setValues(min[0] + ((max[0] - min[0]) * 0.5), min[1] + ((max[1] - min[1]) * 0.5), max[2] + ( max[2] - min[2] ) * 1.5 ); float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6; Pnt3f tCenter(min[0] + (max[0] - min[0]) / 2, min[1] + (max[1] - min[1]) / 2, min[2] + (max[2] - min[2]) / 2); tball.setMode( Trackball::OSGObject ); tball.setStartPosition( pos, true ); tball.setSum( true ); tball.setTranslationMode( Trackball::OSGFree ); tball.setTranslationScale(scale); tball.setRotationCenter(tCenter); // run... glutMainLoop(); return 0; }