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();
}
// 在牛的世界里思索,在牛的世界里前行。