查看: 9859|回复: 21

OSG最新教程连载:最长的一帧 (共30话,已放出PDF版本)

[复制链接]

该用户从未签到

发表于 2008-8-14 10:31:45 | 显示全部楼层 |阅读模式
2008年8月14日开始放出“第一日”,以后每天放出一话。欢迎到教程专区阅读并批评指正。
毕竟写这个话题的难度太高,我总得先反复做一些检查;一天一话是给有兴趣的朋友一个缓冲,还有就是这样连载觉得比较好玩~~^_^

===========================

《最长的一帧》
作者:王锐(array @ osgchina.org)
随意转载,请注明原作者,请勿收费


这是一篇有关OpenSceneGraph源代码的拙劣教程,没有任何能赏心悦目的小例子,也不会贡献出什么企业级的绝密的商业代码,标题也只是个噱头(坏了,没人看了^_^)。
本文写作的目的说来很简单,无非就是想要深入地了解一下,OSG在一帧时间,也就是仿真循环的一个画面当中都做了什么。

对OSG有所了解之后,我们也许可以很快地回答这个问题,正如下面的代码所示:
  1. while (!viewer.done())
  2.   viewer.frame();
复制代码
就这样,用一个循环结构来反复地执行frame()函数,直到done()函数的返回值为true为止。每一次执行frame()函数就相当于完成了OSG场景渲染的一帧,配置较好的计算机可以达到每秒钟一二百帧的速率,而通常仿真程序顺利运行的最低帧速在15~25帧/秒即可。

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

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

这样的探索要到什么时候结束呢?从这短短的10毫秒中引申出来的,无比冗长的一帧,又是多么丰富抑或无聊的内容呢?现在笔者也不知道,也许直到最后也不会明了,不过相信深入源代码的过程就是一种享受,希望读者您也可以同我一起享受这份辛苦与快乐。

源代码版本:OpenSceneGraph 2.6.0;操作系统环境假设为Win32平台。为了保证教程的篇幅不致被过多程序代码所占据,文中会适当地改写和缩编所列出的代码,仅保证其执行效果不变,因此可能与实际源文件的内容有所区别。

由于作者水平和精力所限,本文暂时仅对单视景器(即使用osgViewer:: Viewer类)的情形作出介绍。

本文在写作过程中将会用到一些专有名词,它们可能与读者阅读的其它文章中所述有所差异,现列举如下:
场景图形-SceneGraph;场景子树-Subgraph;节点-Node;摄像机-Camera;渲染器-Renderer;窗口-Window;视口-Viewport;场景-Scene;视图-View;视景器-Viewer;漫游器-Manipulator;访问器-Visitor;回调-Callback;事件-Event;更新-Update;筛选-Cull;绘制-Draw。

[ 本帖最后由 array 于 2008-8-16 13:11 编辑 ]

该用户从未签到

发表于 2008-8-14 11:29:11 | 显示全部楼层
期待~~~~~~~~~~~~ :lol :lol

该用户从未签到

发表于 2008-8-16 09:40:14 | 显示全部楼层
斑竹好强!!支持以下................... :lol :lol

该用户从未签到

发表于 2008-8-17 08:40:55 | 显示全部楼层
强烈支持!

该用户从未签到

发表于 2008-8-17 20:09:11 | 显示全部楼层
板凳了
  • TA的每日心情

    1573439774
  • 签到天数: 2 天

    发表于 2008-8-19 11:48:36 | 显示全部楼层
    这个不支持,就真对不起ARRAY兄啦!

    该用户从未签到

    发表于 2008-8-20 23:00:40 | 显示全部楼层
    这个要支持
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-8-23 19:54:51 | 显示全部楼层
    最长的一帧 (已放出9话)

    写小说的,一看就是写小说的,名不虚传呀,哈哈

    该用户从未签到

    发表于 2008-8-30 23:17:30 | 显示全部楼层
    顶array兄章回体小说,哈哈

    该用户从未签到

    发表于 2008-9-2 15:41:59 | 显示全部楼层
    顶,谢谢老大

    该用户从未签到

    发表于 2008-9-4 10:32:16 | 显示全部楼层
    相当支持!!!

    该用户从未签到

    发表于 2008-9-5 11:14:30 | 显示全部楼层
    相当好

    该用户从未签到

    发表于 2008-12-25 20:56:22 | 显示全部楼层
    Array真牛。
    差距啊。我要努力。

    该用户从未签到

    发表于 2009-2-16 14:31:45 | 显示全部楼层
    斑竹厉害,我想更深入的了解osg的机制有没有那方面的资料

    该用户从未签到

     楼主| 发表于 2009-2-16 18:58:22 | 显示全部楼层
    目前看来,国内外应该都只有本人的这篇《最长的一帧》是针对OSG内部实现进行介绍的
    今年计划写一部为OSG初学者查漏补缺的《OSG跬步》教程,其中会详解OSG现有的重要机制,包括多线程,内存管理,节点树,访问器,回调,插件管理,仿函器等。敬请在五月份之后期待~~~~在这之前笔者可能会忙得抽不出空来。

    该用户从未签到

    发表于 2009-3-23 20:19:52 | 显示全部楼层
    PDF版本从哪儿可以获取到啊?

    该用户从未签到

     楼主| 发表于 2009-3-23 22:14:52 | 显示全部楼层
    原帖由 minghongxie 于 2009-3-23 20:19 发表
    PDF版本从哪儿可以获取到啊?


    教程区精华:
    http://bbs.osgchina.org/viewthread.php?tid=696

    该用户从未签到

    发表于 2009-3-24 07:56:46 | 显示全部楼层
    原帖由 array 于 2009-3-23 22:14 发表


    教程区精华:
    http://bbs.osgchina.org/viewthread.php?tid=696


    thanks. 对你的无私奉献表示崇高敬意!

    该用户从未签到

    发表于 2009-4-9 14:58:05 | 显示全部楼层
    楼主真是厚道人啊
    必须向楼主致敬!

    该用户从未签到

    发表于 2009-9-15 16:52:47 | 显示全部楼层
    “不过相信深入源代码的过程就是一种享受,希望读者您也可以同我一起享受这份辛苦与快乐。”
    这是墨子的精神~
    对这种痛并快乐着的变态行为致敬!继续努力多出好东西!
    雄起‘
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表