1.预备工作:
(1).编译osg3.0
(2)配置系统环境变量
(3)写下最简单的osg:
include<osgDB/ReadFile> #include<osgDB/WriteFile> #include<osgUtil/Optimizer> #include<osgViewer/viewer> int _tmain(int argc, _TCHAR* argv[]) { // creat viewer osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); // create root osg::ref_ptr<osg::Group> root = new osg::Group(); // read osg file osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("cow.osg"); // add node root->addChild(node.get()); // optimizer osgUtil::Optimizer optimizer; optimizer.optimize(root.get()); // set viewer viewer->setSceneData(root.get()); // initialize window viewer->realize(); // run viewer->run(); return 0; }
2.效果图:
3 线程:
4 渲染线程调用堆栈:
5 最关键的一帧,从这里开始:
void ViewerBase::frame(double simulationTime) { if (_done) return; // OSG_NOTICE<<std::endl<<"CompositeViewer::frame()"<<std::endl<<std::endl; if (_firstFrame) { viewerInit(); if (!isRealized()) { realize(); } _firstFrame = false; } advance(simulationTime); eventTraversal(); updateTraversal(); renderingTraversals(); }
// 在牛的世界里思索,在牛的世界里前行。