DSGFreeS OSG程序设教程 OpenSceneGraph 程序设计 FreeSouth[杨石兴]编著 www.osgChina.org
[键入文字] [键入文字] [键入文字] 1 OSGFreeS OSG 程序设计教程 OpenSceneGraph 程序设计 FreeSouth[杨石兴]编著 www.osgChina.org
This book to my deepest love girl Xiao Nan
[键入文字] [键入文字] [键入文字] 3 This book to my deepest love girl Xiao Nan
引言 很想对看到这个引言的大家说声对不起,虽然在写这些话时,这本书的订价还没有最终定下来,但是也许 在此后您会发现这本书物不所值。但是从Step Into OSG的售出数量以及平时和大家的交流来看,大家需要 一本书和一些代码来帮助理解OSG的编程方法。这本书估计是我平生最后一次再接触OSG了,我已经找到 了我的第一份工作,在西安,不是做OSG的。 在去年的时候Array说一定要写一本好书,关于OSG的好书。在聊天的时候,Aray笑谈自己是写小说出身 的,四十万言不成问题。我听了很激动,后来由于Aray兄有言在先,所以我打消了计划很久的写书念头。 后来Array兄为求书的全面,一直在做OSG的全面研究。从OsG核心到OSG的边缘与繁多的库的结合等等, 他都有提到。但是可惜的是前一段时间FlySky突然说Array写书遇到了困难,恐怕要耽搁一段时间。我突然 发现我离工作的时间越来越近了,还有个把月总得做点什么。于是我又重新计划写本适应OSG2.20版本的 基础教程的念头。以抛砖引玉,期待Array兄的书早日出版。 由于计划取谛的耽搁,时间不允分这是这本书不好的一个原因,主要原因还是因为我使用OSG年限太短, 水平有限。所以还请大家对书的不足多多原谅。市面上关于OSG的书不多,资料也很少,我希望这本书能 给大家以微小的帮助。 眼看着就要工作了,我不知道该发一些关于大学的感慨还是关于OSG的感言。我是从零五年初开始接触OSG 的,那个时候对它还一无所知,记得当时的情况是对着官方网站使劲看,不知道能不能看出几个中文字儿 来。曹明亮师兄搜的点点滴滴的资料给宝贝似的,翻来覆去的看。后来进了VRDEV认识了FLMN并与大家 进行了交流,那时候才真的开始学会使用C+,编程。 到零七年的时候,我已经到了大学三年级了,突然觉得有必要对OSG进行总结一下,于是写了本书,名为 《Step Into OpenSceneGraph.》,由于市面上的资料很少,所以大家争相传阅。后来又借卖书的契机与3DVRI 的朱老师和唐老师合作做OSG方面的培训。大学里本科生写程序很辛苦,钱很少,而且不很正规,不怎么 煅炼人。在慢慢的积累中,我萌发了办一个网站的念头,后来与Robert联系要了办站的主办权,以及网站 的翻译版权等等,我约定二月建好,也就是到大年三十的时候发布。 后来我仔细的研究了OSG官方网站的结构,使用的Trac,发现我使用Trac并不现实,因为买服务器和维护 都很贵。租服务器上的Trac不是太好配置。于是我决定使用php后缀以备后来扩展。后来找了身边好友 FlySky,Array,Hesicong,祝清鲁,夜间和祝清鲁的同学一起来翻译这个网站,大家的热情都很高,所以不久网站 就建立起来了。年前网站工作正紧的时候学校突然封校,我必须回家,家中又没有电脑。于是我天天在网 吧做osgChina这个网站,从早到晚,在夜里一般会给萧发一些短信聊天,除此再没有别的事情了。后来大 概是在年后初二的后半夜四点的时候,终于大功告成。之前购买了虚拟空间,所以一路上都很顺利。记得 当时夜里我往mai训ist上发布消息的时候激动的手都不听使唤了,也可能是网吧条件太简陋,没空调给冻的。 回去的时候U盘还忘在了网吧的机器上,回到家清晨快五点,老爹说U盘是不是很贵,非让我去拿,要不 然肯定丢,就用不成了。后来我又往网吧跑,由于夜里我经常与网吧老板对熬,所以很熟,U盘很容易就找 到了。 后来osgChina顺利的给备上了案,备的案在河南。服务器在浙江,是双线的,但是array还是不停的说龟速 什么的。服务器有一次网速很好,网友立即爆言:太好了,终于可以在白天上咱的论坛了。说起来还是抱 歉,很多人在论坛上发帖说:明早传图,服务器慢。我确实没有管理服务器这方面的经验,所以只能对不
[键入文字] [键入文字] [键入文字] 5 引言 很想对看到这个引言的大家说声对不起,虽然在写这些话时,这本书的订价还没有最终定下来,但是也许 在此后您会发现这本书物不所值。但是从 Step Into OSG 的售出数量以及平时和大家的交流来看,大家需要 一本书和一些代码来帮助理解 OSG 的编程方法。这本书估计是我平生最后一次再接触 OSG 了,我已经找到 了我的第一份工作,在西安,不是做 OSG 的。 在去年的时候 Array 说一定要写一本好书,关于 OSG 的好书。在聊天的时候,Array 笑谈自己是写小说出身 的,四十万言不成问题。我听了很激动,后来由于 Array 兄有言在先,所以我打消了计划很久的写书念头。 后来 Array 兄为求书的全面,一直在做 OSG 的全面研究。从 OSG 核心到 OSG 的边缘与繁多的库的结合等等, 他都有提到。但是可惜的是前一段时间 FlySky 突然说 Array 写书遇到了困难,恐怕要耽搁一段时间。我突然 发现我离工作的时间越来越近了,还有个把月总得做点什么。于是我又重新计划写本适应 OSG2.20 版本的 基础教程的念头。以抛砖引玉,期待 Array 兄的书早日出版。 由于计划取谛的耽搁,时间不允分这是这本书不好的一个原因,主要原因还是因为我使用 OSG 年限太短, 水平有限。所以还请大家对书的不足多多原谅。市面上关于 OSG 的书不多,资料也很少,我希望这本书能 给大家以微小的帮助。 眼看着就要工作了,我不知道该发一些关于大学的感慨还是关于 OSG 的感言。我是从零五年初开始接触 OSG 的,那个时候对它还一无所知,记得当时的情况是对着官方网站使劲看,不知道能不能看出几个中文字儿 来。曹明亮师兄搜的点点滴滴的资料给宝贝似的,翻来覆去的看。后来进了 VRDEV 认识了 FLMN 并与大家 进行了交流,那时候才真的开始学会使用 C++,编程。 到零七年的时候,我已经到了大学三年级了,突然觉得有必要对 OSG 进行总结一下,于是写了本书,名为 《Step Into OpenSceneGraph》,由于市面上的资料很少,所以大家争相传阅。后来又借卖书的契机与 3DVRI 的朱老师和唐老师合作做 OSG 方面的培训。大学里本科生写程序很辛苦,钱很少,而且不很正规,不怎么 煅炼人。在慢慢的积累中,我萌发了办一个网站的念头,后来与 Robert 联系要了办站的主办权,以及网站 的翻译版权等等,我约定二月建好,也就是到大年三十的时候发布。 后来我仔细的研究了 OSG 官方网站的结构,使用的 Trac,发现我使用 Trac 并不现实,因为买服务器和维护 都很贵。租服务器上的 Trac 不是太好配置。于是我决定使用 php 后缀以备后来扩展。后来找了身边好友 FlySky,Array,Hesicong,祝清鲁,夜间和祝清鲁的同学一起来翻译这个网站,大家的热情都很高,所以不久网站 就建立起来了。年前网站工作正紧的时候学校突然封校,我必须回家,家中又没有电脑。于是我天天在网 吧做 osgChina 这个网站,从早到晚,在夜里一般会给萧发一些短信聊天,除此再没有别的事情了。后来大 概是在年后初二的后半夜四点的时候,终于大功告成。之前购买了虚拟空间,所以一路上都很顺利。记得 当时夜里我往 maillist 上发布消息的时候激动的手都不听使唤了,也可能是网吧条件太简陋,没空调给冻的。 回去的时候 U 盘还忘在了网吧的机器上,回到家清晨快五点,老爹说 U 盘是不是很贵,非让我去拿,要不 然肯定丢,就用不成了。后来我又往网吧跑,由于夜里我经常与网吧老板对熬,所以很熟,U 盘很容易就找 到了。 后来 osgChina 顺利的给备上了案,备的案在河南。服务器在浙江,是双线的,但是 array 还是不停的说龟速 什么的。服务器有一次网速很好,网友立即爆言:太好了,终于可以在白天上咱的论坛了。说起来还是抱 歉,很多人在论坛上发帖说:明早传图,服务器慢。我确实没有管理服务器这方面的经验,所以只能对不
起大家了。以后会好起来的。 很多好友问我为什么不做OSG了呢?我觉得这个问题我得好好回答一下,说出我的真实理由,这样才能给 大家以参考。首先,在郑州大学的计算机专业里面,本科生编程编的差不多的很少,有项目经验的也很少。 所以大企业来招工的时候很容易我们这些做图形学的就出线了。从本质上来说是做OSG工资很低,没有做 通信这类工资高。我转的是通信。其次,我没有想过创业,觉得自己经验太少,太单薄了,不太适合这时 候创业,还需要到外面工作一下。然而关于虚拟现实的国内公司最大的员工也不会超过五万人。所以感觉 还是没有办法与类似通信、电信这类大规模工业生产相比。三来,做O$G做久了,突然觉得很虚,用我一 个同学的话说,没有太多的瓶颈,而我又没有读研究生,没有做这方面研究的机会,所以只能放弃了。谢 谢大家对我的关心。四来,3DV1的朱老师说,先成家,后立业。先成家,后立业。好像重复了七八遍。有 句话叫誓不过三,我总算记住了。感觉做OSG要成家比较难,有位做OSG的老大哥,三十了,还光棍,后 来转ava了,马上结婚了。 在最后,我要感谢我的家人,我的家庭是农民出身,父母都非常勤恳、忠厚。感谢OSG圈里一直在一起的 朋友们,和你们在一起让我感觉到了大学里物有所值。感谢女友萧楠,一直都以非常特殊的方式鼓励我。 最后我要为您购买我的书籍表示感谢。谢谢您。 FreeSouth 2008619清晨 于郑州大学菊园 6
[键入文字] [键入文字] [键入文字] 6 起大家了。以后会好起来的。 很多好友问我为什么不做 OSG 了呢?我觉得这个问题我得好好回答一下,说出我的真实理由,这样才能给 大家以参考。首先,在郑州大学的计算机专业里面,本科生编程编的差不多的很少,有项目经验的也很少。 所以大企业来招工的时候很容易我们这些做图形学的就出线了。从本质上来说是做 OSG 工资很低,没有做 通信这类工资高。我转的是通信。其次,我没有想过创业,觉得自己经验太少,太单薄了,不太适合这时 候创业,还需要到外面工作一下。然而关于虚拟现实的国内公司最大的员工也不会超过五万人。所以感觉 还是没有办法与类似通信、电信这类大规模工业生产相比。三来,做 OSG 做久了,突然觉得很虚,用我一 个同学的话说,没有太多的瓶颈,而我又没有读研究生,没有做这方面研究的机会,所以只能放弃了。谢 谢大家对我的关心。四来,3DVRI 的朱老师说,先成家,后立业。先成家,后立业。好像重复了七八遍。有 句话叫誓不过三,我总算记住了。感觉做 OSG 要成家比较难,有位做 OSG 的老大哥,三十了,还光棍,后 来转 Java 了,马上结婚了。 在最后,我要感谢我的家人,我的家庭是农民出身,父母都非常勤恳、忠厚。感谢 OSG 圈里一直在一起的 朋友们,和你们在一起让我感觉到了大学里物有所值。感谢女友萧楠,一直都以非常特殊的方式鼓励我。 最后我要为您购买我的书籍表示感谢。谢谢您。 FreeSouth 2008 6 19 清晨 于郑州大学菊园
INDEX 第一章 绪论 11 1.10SG简介 .11 1.1.10SG的诞生 11 1.1.20SG在中国… 11 1.2如何学习0SG… .12 1.2.10SG的书籍 .12 1.2.20SG的网站… .13 1.2.30SG的教程 .14 1.2.4邮件列表.… .14 1.2.5必备的知识. 15 1.30SG的编译与安装.… …15 1.3.10SG安装包 15 1.3.2编译0SG.… .17 1.3.3开发环境设置… .21 1.4小结. .22 第二章 0SG基础.… 2.1 Hel loWorId........... 23 示例-:Hel|oWor Id .23 2.1.1改进He l loWor|d. 25 示例二:添加状态… …25 示例三:设置操作器… .26 2.1.2最好的Hel loWor Id… .27 示例四:最好的Hel loWor Id.… .28 2.2官方的四个0SG程序 .31 2.2.1 osgViewer模型查看工具. 32 2.2.2 osgVersion库版本检测.… .33 2.2.3 osgArchive数据归档器.… .33 2.2.4 osgConv格式转换与压缩. .35 2.3小结… .36 2.4本章所用类参考.… .36 2.4.1 osgviewer Viewer .............. .36 2.4.2 osgViewer:ViewerBase........... …40 2.4.3 osgGA:KeySwitchMatr ixManipulator ....... 45 2.4.4 osg:ArgumentParser............ .48 第三章 模型简单控制.... 52 3.1读取模型… 52 3.1.1基本操作. 52 示例五:添加模型. 52 示例六:隐藏模型 .54 示例七:结点开关… .55
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 7 INDEX 第一章 绪论 11 1.1 OSG 简介................................................................................................................................. 11 1.1.1 OSG 的诞生................................................................................................................... 11 1.1.2 OSG 在中国................................................................................................................... 11 1.2 如何学习 OSG.......................................................................................................................... 12 1.2.1 OSG 的书籍................................................................................................................... 12 1.2.2 OSG 的网站................................................................................................................... 13 1.2.3 OSG 的教程................................................................................................................... 14 1.2.4 邮件列表 ..................................................................................................................... 14 1.2.5 必备的知识.................................................................................................................. 15 1.3 OSG 的编译与安装................................................................................................................... 15 1.3.1 OSG 安装包................................................................................................................... 15 1.3.2 编译 OSG ...................................................................................................................... 17 1.3.3 开发环境设置 .............................................................................................................. 21 1.4 小结......................................................................................................................................... 22 第二章 OSG 基础.......................................................................23 2.1 HelloWorld .............................................................................................................................. 23 示例一:HelloWorld ......................................................................................................... 23 2.1.1 改进 HelloWorld............................................................................................................ 25 示例二:添加状态............................................................................................................. 25 示例三:设置操作器......................................................................................................... 26 2.1.2 最好的 HelloWorld ........................................................................................................ 27 示例四:最好的 HelloWorld.............................................................................................. 28 2.2 官方的四个 OSG 程序................................................................................................................. 31 2.2.1 osgViewer 模型查看工具 ............................................................................................... 32 2.2.2 osgVersion 库版本检测................................................................................................. 33 2.2.3 osgArchive 数据归档器................................................................................................. 33 2.2.4 osgConv 格式转换与压缩 ............................................................................................... 35 2.3 小结 ......................................................................................................................................... 36 2.4 本章所用类参考........................................................................................................................ 36 2.4.1 osgViewer::Viewer ....................................................................................................... 36 2.4.2 osgViewer::ViewerBase ................................................................................................ 40 2.4.3 osgGA::KeySwitchMatrixManipulator ........................................................................... 45 2.4.4 osg::ArgumentParser.................................................................................................... 48 第三章 模型简单控制 ..................................................................52 3.1 读取模型 .................................................................................................................................. 52 3.1.1 基本操作........................................................................................................................ 52 示例五:添加模型............................................................................................................. 52 示例六:隐藏模型............................................................................................................. 54 示例七:结点开关............................................................................................................. 55