osg最长的一帧

发布时间 2023-03-29 14:09:20作者: 2086nmj

本文写作的目的说来很简单,无非就是想要深入地了解一下,OSG 在一帧时间,也就是仿真循环的一个画面当中都做了什么。

OSG 有所了解之后,我们也许可以很快地回答这个问题,正如下面的代码所示:

while (!viewer.done())
  viewer.frame();

就这样,用一个循环结构来反复地执行 frame()函数,直到 done()函数的返回值为 true为止。每一次执行 frame()函数就相当于完成了 OSG 场景渲染的一帧,配置较好的计算机可以达到每秒钟一二百帧的速率,而通常仿真程序顺利运行的最低帧速在 15~25 /秒即可。

很好,看来笔者的机器运行 frame()函数通常只需要 8~10ms 左右,比一眨眼的工夫都要短。那么本文就到此结束吗?

答案当然是否定的,恰恰相反,这篇繁琐且可能错误百出的文字,其目的正是要深入frame()函数,再深入函数中调用的函数......一直挖掘下去,直到我们期待的瑰宝出现;当然也可能是一无所获,只是乐在其中。

本文用到一些专有名词:场景图形-SceneGraph;场景子树-Subgraph;节点-Node;摄像机-Camera;渲染器-Renderer;窗口-Window;视口-Viewport;场景-Scene;视图-View;视景器-Viewer;漫游器-Manipulator;访问器-Visitor;回调-Callback;事件-Event;更新-Update;筛选-Cull;绘制-Draw。

参考1:《osg最长的一帧》王锐:www.osgchina.org

参考2:调试osg最长的一帧:https://www.zhihu.com/column/c_1343870931421282304