int main( int argc, char** argv ) { osg::ArgumentParser arguments( &argc, argv ); bool shadowed = false; if ( arguments.read("--shadowed") ) shadowed = true; osg::Node* model = osgDB::readNodeFiles( arguments ); if ( !model ) model = osgDB::readNodeFile( "lz.osg" ); osg::ref_ptr<osg::LightSource> ls = new osg::LightSource; ls->getLight()->setLightNum( 0 ); ls->getLight()->setPosition( osg::Vec4(0.5f, 0.5f, 0.5f, 0.0f) ); ls->getLight()->setAmbient( osg::Vec4(0.2f, 0.2f, 0.2f, 1.0f) ); ls->getLight()->setDiffuse( osg::Vec4(0.49f, 0.465f, 0.494f, 1.0f) ); ls->getLight()->setSpecular( osg::Vec4(1.0f, 0.98f, 0.95f, 1.0f) ); osg::ref_ptr<SilverLiningNode> silverLining = new MySilverLiningNode( "Your user name", "Your license code" ); silverLining->setGlobalLight( ls->getLight() ); // The light will be changed on the fly by SilverLining osg::ref_ptr<osg::MatrixTransform> scene = new osg::MatrixTransform; scene->addChild( shadowed ? createShadowedScene(model, ls.get()) : model ); scene->addChild( silverLining.get() ); osgViewer::Viewer viewer; #if 0 // With correct sky/cloud bound, we don't need to disable near/far computation now viewer.getCamera()->setComputeNearFarMode( osg::Camera::DO_NOT_COMPUTE_NEAR_FAR ); #endif viewer.getCamera()->setClearMask( GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT ); // No need for OSG to clear the color buffer now viewer.addEventHandler( new SilverLiningTester(silverLining.get()) ); viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); viewer.addEventHandler( new osgViewer::StatsHandler ); viewer.addEventHandler( new osgViewer::WindowSizeHandler ); viewer.setSceneData( scene.get() ); viewer.setUpViewOnSingleScreen( 0 ); return viewer.run(); }
int main( int argc, char** argv ) { osg::ArgumentParser arguments( &argc, argv ); int displayMode = 1; if ( arguments.read("--simple-mode") ) displayMode = 0; else if ( arguments.read("--analysis-mode") ) displayMode = 1; else if ( arguments.read("--compare-mode") ) displayMode = 2; std::string effectFile("test.xml"); arguments.read( "--effect", effectFile ); bool shadowed = false; if ( arguments.read("--shadowed") ) shadowed = true; float lodscale = 1.0f; arguments.read( "--lod-scale", lodscale ); std::string normalSceneFile; arguments.read( "--normal-scene", normalSceneFile ); // Create the scene osg::Node* model = osgDB::readNodeFiles( arguments ); if ( !model ) model = osgDB::readNodeFile( "lz.osg" ); osg::ref_ptr<osg::Group> scene = new osg::Group; scene->addChild( createSkyBox() ); scene->addChild( shadowed ? createShadowedScene(model) : model ); // Create the effect compositor from XML file #ifdef HAVE_SILVERLINING osg::ref_ptr<osgDB::XmlNode> xmlRoot = osgDB::readXmlFile( effectFile ); if ( !xmlRoot ) { OSG_WARN << "Effect file " << effectFile << " can't be loaded!" << std::endl; return 1; } // FIXME: SilverLining seems to be uncomfortable with default FBO settings? // I'm not sure if this is a SilverLining bug or mine osgFX::EffectCompositor::XmlTemplateMap templateMap; osgFX::EffectCompositor* compositor = new osgFX::EffectCompositor; //compositor->setRenderTargetImplementation( osg::Camera::PIXEL_BUFFER ); // FIXME: PIXEL_BUFFER can't work with NVIDIA 310.70 driver? compositor->loadFromXML( xmlRoot.get(), templateMap, NULL ); #else osgFX::EffectCompositor* compositor = osgFX::readEffectFile( effectFile ); if ( !compositor ) { OSG_WARN << "Effect file " << effectFile << " can't be loaded!" << std::endl; return 1; } #endif // For the fastest and simplest effect use, this is enough! compositor->addChild( scene.get() ); // Add all to the root node of the viewer osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild( compositor ); if ( !normalSceneFile.empty() ) { // root->addChild( osgDB::readNodeFile(normalSceneFile) ); } osgViewer::Viewer viewer; viewer.getCamera()->setLODScale( lodscale ); viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); viewer.addEventHandler( new osgViewer::StatsHandler ); viewer.addEventHandler( new osgViewer::WindowSizeHandler ); viewer.setSceneData( root.get() ); if ( displayMode>0 ) configureViewerForMode( viewer, compositor, scene.get(), displayMode ); viewer.setUpViewOnSingleScreen( 0 ); return viewer.run(); }