/* File: ex_simple_viewer_better.c */ #include #include #include #include #include #include #include #include void usage() { std::cout << "usage: ex_simple_viewer_better model\n"; exit(0); } int main( int argc, char **argv ) { if (argc != 2) usage(); // initialize the viewer. osgViewer::Viewer viewer; // load the nodes from the commandline arguments. osg::Node* model = osgDB::readNodeFile(argv[1]); if (!model) { std::cerr << "Problem opening model " << argv[1] << "\n"; exit(1); } // make a root node so that you can change the orientation of the whole // scene by changing one node. // tilt the scene so the default eye position is looking down on the model. osg::MatrixTransform* rootnode = new osg::MatrixTransform; rootnode->setMatrix(osg::Matrix::rotate(osg::inDegrees(30.0f),1.0f,0.0f,0.0f)); rootnode->addChild(model); // run optimization over the scene graph osgUtil::Optimizer optimzer; optimzer.optimize(rootnode); // set the scene to render viewer.setSceneData(rootnode); viewer.setCameraManipulator(new osgGA::TrackballManipulator()); // normal viewer usage. return viewer.run(); }