|
本帖最后由 1638403221 于 2016-3-17 15:13 编辑
仅为日后回忆梳理
void ViewerBase::frame(double simulationTime)
{
if (_done) return;
// OSG_NOTICE<<std::endl<<"CompositeViewer::frame()"<<std::endl<<std::endl;
if (_firstFrame)
{
//Viewer::viewerInit函数只做了一件事,就是调用View::init()函数,而这个init函数的工
//作似乎也是一目了然的:无非就是完成视景器的初始化工作而已
。
//阅读某个函数的源代码过程中,如果能够大致知道这个函数的主要工作,并了解其中用
//到的变量的功能,那么即使只有很少的注释内容,应该也可以顺利地读完所有代码。如果对
//一些命名晦涩的变量不甚理解,或者根本不知道这个函数于运行流程中有何用途,那么理解
//源代码的过程就会麻烦很多。
viewerInit();
if (!isRealized())
{
realize();
}
_firstFrame = false;
}
advance(simulationTime);
//这个函数将负责处理系统产生的各种事件,诸
//如鼠标的移动,点击,键盘的响应,窗口的关闭等等,
//以及摄像机与场景图形的事件回调(EventCallback)。
eventTraversal();
//这个函数负责遍历所有的更新回调(UpdateCallback);
//除此之外,它的另一个重要任务就是负责更新DatabasePager与ImagePager这两个重要的分
//页数据处理组件。
updateTraversal();
//这里将使用较为复杂的线程处理方法,完成场景的筛
//选(cull)和绘制(draw)工作。
renderingTraversals();
}
|
|