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
OpenSceneGraph程序设计 www.osgChina.ong 第一章:绪论 3.1.2超级指针…56 3.2移动/旋转/缩放模型.… .57 示例八:移动/旋转/缩放模型 58 3.3小结.… 59 3.4本章所用类参考.… .59 3.4.1 osg:Node.... …59 3.4.2osg:Group.… 65 3.4.3 osg:Switch...... …67 3.4.4 osg:MatrixTransform 70 第四章 基本几何图元. 73 4.1概述.… .73 4.1.1基本绘制方法… .73 示例九:绘制正方形… 73 4.1.2所有可绘制图元… 75 示例十:绘制线宽… 76 4.2内置几何类型. .78 示例十一:内置几何类型 78 4.3本章小节… 80 4.4本章类参考. .80 4.4.10sg:Geode.… .80 4.4.2osg:Drawable.… 83 4.4.30sg:Shape.… .89 4.4.4osg:Geometry… .90 第五章 交互… .103 5.1交互过程… .103 5.2交互详解… .104 5.2.1经典示例.… .104 示例十二:响应键盘鼠标 .104 5.2.1事件类型与响应 .106 5.3pick… .108 示例什三:pick… 109 5.4小结 ...112 5.5本章所用类参考… .112 5.5.1 osgGA:GUIEventHandler......... 112 5.5.2 osgFX:Scribe… .114 第六章 漫游.. ….116 6.1 Matr ixManipulator............ .116 6.1.1操作器概述.… .116 6.1.2操作器实例. 116 示例什四:浸游实例… 117 6.2制作路径漫游… .126 6.2.1使用path文件.… .126 示例十五:使用path文件 .127 6.2.2路径编辑器… .128
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 8 3.1.2 超级指针....................................................................................................................... 56 3.2 移动/旋转/缩放模型................................................................................................................. 57 示例八:移动/旋转/缩放模型........................................................................................... 58 3.3 小结 ......................................................................................................................................... 59 3.4 本章所用类参考........................................................................................................................ 59 3.4.1 osg::Node ..................................................................................................................... 59 3.4.2 osg::Group.................................................................................................................... 65 3.4.3 osg::Switch ................................................................................................................ 67 3.4.4 osg::MatrixTransform .................................................................................................. 70 第四章 基本几何图元 ..................................................................73 4.1 概述 ......................................................................................................................................... 73 4.1.1 基本绘制方法................................................................................................................ 73 示例九:绘制正方形......................................................................................................... 73 4.1.2 所有可绘制图元 ............................................................................................................. 75 示例十:绘制线宽............................................................................................................. 76 4.2 内置几何类型 ........................................................................................................................... 78 示例十一:内置几何类型.................................................................................................. 78 4.3 本章小节 .................................................................................................................................. 80 4.4 本章类参考............................................................................................................................... 80 4.4.1 osg::Geode.................................................................................................................... 80 4.4.2 osg::Drawable .............................................................................................................. 83 4.4.3 osg::Shape.................................................................................................................... 89 4.4.4 osg::Geometry .............................................................................................................. 90 第五章 交互 ........................................................................103 5.1 交互过程 .................................................................................................................................103 5.2 交互详解 .................................................................................................................................104 5.2.1 经典示例.......................................................................................................................104 示例十二:响应键盘鼠标.................................................................................................104 5.2.1 事件类型与响应 ............................................................................................................106 5.3 pick........................................................................................................................................108 示例十三:pick ...............................................................................................................109 5.4 小结 ........................................................................................................................................112 5.5 本章所用类参考.......................................................................................................................112 5.5.1 osgGA::GUIEventHandler..............................................................................................112 5.5.2 osgFX::Scribe .............................................................................................................114 第六章 漫游 ........................................................................116 6.1 MatrixManipulator.................................................................................................................116 6.1.1 操作器概述 ...................................................................................................................116 6.1.2 操作器实例...................................................................................................................116 示例十四:漫游实例........................................................................................................117 6.2 制作路径漫游 ..........................................................................................................................126 6.2.1 使用 path 文件..............................................................................................................126 示例十五:使用 path 文件...............................................................................................127 6.2.2 路径编辑器 ...................................................................................................................128
OpenSceneGraph程序设计 www.osgChina.ong 第一章:绪论 示例六:建立MfC单文档0SG程序 .128 示例十七:路径漫游程序.… .141 6.3小结.… .154 6.4本章所用类参考.… .154 第七章 更新&回调.… …….156 7.1回调… .156 7.1.1使用已有回调.… .156 示例十八:callback… 156 7.1.2自定义回调.… .158 示例十九:自定义cal lback类, .158 7.2 NodeVisitor… .160 示例二十:输出模型所有顶点 160 7.3小结… 162 7.4本章所用类参考… 162 7.4.1 osg:Nodevisitor............ .162 第八章 粒子系统 .167 8.10SG中粒子系统要素… .167 8.1.1粒子系统的模拟过程… .167 8.1.2 osgParticle中的类. ..169 8.2粒子系统实例.… .180 8.2.1雨雪效果. .180 示例二十一:雨雪效果… 180 8.2.2喷泉模拟 .181 示例二十二:喷泉… .181 8.3本章小节… .185 8.4本章所用类参考… .185 8.4.1 osgParticle:Particle................. 185 8.4.2 osgParticle:ParticleSystem....... .190 8.4.3 osgParticle:ConstantRateCounter............. .193 8.4.4 osgParticle:VariableRateCounter........ .194 8.4.5 osgParticle:RandomRateCounter............. 195 8.4.6 osgParticle:SegmentPlacer...... .197 8.4.7 osgParticle:MultiSegmentPlacer .198 8.4.8 osgParticle:CenteredPlacer........... .200 8.4.9 osgParticle:BoxP lacer............... .201 8.4.10 osgParticle:PointPlacer................ .203 8.4.11 osgParticle:SectorPlacer..... .203 8.4.12 osgParticle:ParticleEffect..... 205 8.4.13 osgParticle:FluidProgram... .208 第九章:视口L0D8多通道. …210 9.1多视☐… .210 9.1.1多视口过程… 210 9.1.2创建前后左右视图. .210 示例二十三:创建前后左右视图… .210
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 9 示例十六:建立 MFC 单文档 OSG 程序................................................................................128 示例十七:路径漫游程序.................................................................................................141 6.3 小结......................................................................................................................................154 6.4 本章所用类参考.......................................................................................................................154 第七章 更新&回调 ......................................................................156 7.1 回调 ........................................................................................................................................156 7.1.1 使用已有回调................................................................................................................156 示例十八:callback ........................................................................................................156 7.1.2 自定义回调 ...................................................................................................................158 示例十九:自定义 callback 类........................................................................................158 7.2 NodeVisitor ...........................................................................................................................160 示例二十:输出模型所有顶点..........................................................................................160 7.3 小结 ........................................................................................................................................162 7.4 本章所用类参考.......................................................................................................................162 7.4.1 osg::NodeVisitor ........................................................................................................162 第八章 粒子系统 ......................................................................167 8.1 OSG 中粒子系统要素..............................................................................................................167 8.1.1 粒子系统的模拟过程...................................................................................................167 8.1.2 osgParticle 中的类...........................................................................................................169 8.2 粒子系统实例 ..........................................................................................................................180 8.2.1 雨雪效果.......................................................................................................................180 示例二十一:雨雪效果.....................................................................................................180 8.2.2 喷泉模拟.......................................................................................................................181 示例二十二:喷泉............................................................................................................181 8.3 本章小节 .................................................................................................................................185 8.4 本章所用类参考.......................................................................................................................185 8.4.1 osgParticle::Particle ......................................................................................................185 8.4.2 osgParticle::ParticleSystem.....................................................................................190 8.4.3 osgParticle::ConstantRateCounter ............................................................................193 8.4.4 osgParticle::VariableRateCounter ............................................................................194 8.4.5 osgParticle::RandomRateCounter................................................................................195 8.4.6 osgParticle::SegmentPlacer.......................................................................................197 8.4.7 osgParticle::MultiSegmentPlacer..............................................................................198 8.4.8 osgParticle::CenteredPlacer.....................................................................................200 8.4.9 osgParticle::BoxPlacer..............................................................................................201 8.4.10 osgParticle::PointPlacer.......................................................................................203 8.4.11 osgParticle::SectorPlacer.......................................................................................203 8.4.12 osgParticle::ParticleEffect ...................................................................................205 8.4.13 osgParticle::FluidProgram.......................................................................................208 第九章: 视口&LOD&多通道 ................................................................210 9.1 多视口.....................................................................................................................................210 9.1.1 多视口过程 ...................................................................................................................210 9.1.2 创建前后左右视图........................................................................................................210 示例二十三:创建前后左右视图.......................................................................................210
OpenSceneGraph程序设计 www.osgChina.ong 第一章:绪论 示例二十四:多窗口渲染 .213 9.2L00215 9.2.1文件的输出… 215 示例二十五:输出结点到文件 .215 9.2.2在模型中加L0D头结点 .215 示例二十六:给模型加L0D头结点输出 .216 9.3多通道… .216 示例二十七:组建和使用osgCluster.. .216 9.4lmp0ster.… .218 示例二十九:Imposter. 218 9.5本章小节… .219 9.6本章所用类参考… 219 9.6.1osg:Camera.… .219 9.6.20Sg:L00. .228 9.6.3 osgSim:Impostor ........... .231 第十章文字&模型阴影..... .233 10.1显示汉字 .233 示例二十九:汉字HUD 235 10.2显示当前位置 .236 示例三十:HUD动态更新当前位置. .237 10.3阴影. .241 10.4小结…… 241 10.5本章所用类参考 .241 10.5.1 osg:Text.... .241 第十一章 地形VPB初步.. .248 11.1VPB简介… 248 11.1.1VPB的获得.… .248 11.1.2VPB的编译.… .248 11.2VPB使用.… .250 11.3小结.…… 253 附录:Step Into OpenSceneGraph中MFC基础章节. ….254 1.1最精简的单文档MFC框架. .254 1.2MFC常用的几种基本操作. 270 1.2.1修改鼠标 270 1.2.2透明对话框… .271 1.2.3客户区全屏 .273 1.2.4音乐播放.… .276 10
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 10 示例二十四:多窗口渲染.................................................................................................213 9.2 LOD........................................................................................................................................215 9.2.1 文件的输出 ...................................................................................................................215 示例二十五:输出结点到文件..........................................................................................215 9.2.2 在模型中加 LOD 头结点..................................................................................................215 示例二十六:给模型加 LOD 头结点输出............................................................................216 9.3 多通道..............................................................................................................................216 示例二十七:组建和使用 osgCluster...............................................................................216 9.4 Imposter..........................................................................................................................218 示例二十九:Imposter.....................................................................................................218 9.5 本章小节 ..........................................................................................................................219 9.6 本章所用类参考................................................................................................................219 9.6.1 osg::Camera.................................................................................................................219 9.6.2 osg::LOD ......................................................................................................................228 9.6.3 osgSim::Impostor ......................................................................................................231 第十章 文字&模型阴影 ..................................................................233 10.1 显示汉字................................................................................................................................233 示例二十九:汉字 HUD .....................................................................................................235 10.2 显示当前位置.........................................................................................................................236 示例三十:HUD 动态更新当前位置....................................................................................237 10.3 阴影.......................................................................................................................................241 10.4 小结.......................................................................................................................................241 10.5 本章所用类参考...................................................................................................................241 10.5.1 osg::Text.................................................................................................................241 第十一章 地形 VPB 初步 ...............................................................248 11.1 VPB 简介..............................................................................................................................248 11.1.1 VPB 的获得................................................................................................................248 11.1.2 VPB 的编译................................................................................................................248 11.2 VPB 使用.......................................................................................................................250 11.3 小结................................................................................................................................253 附录:Step Into OpenSceneGraph 中 MFC 基础章节.............................................254 1.1 最精简的单文档 MFC 框架.........................................................................................................254 1.2 MFC 常用的几种基本操作.......................................................................................................270 1.2.1 修改鼠标 ....................................................................................................................270 1.2.2 透明对话框.................................................................................................................271 1.2.3 客户区全屏.................................................................................................................273 1.2.4 音乐播放 ....................................................................................................................276
OpenSceneGraph程序设计 www.osgChina.ong 第一章:绪论 第一章绪论 OsG诞生于大概是1997年,可以在osgChina[www.osgChina.org】上查阅到关于OSG的来龙去脉。笔者使用 OSG也已经有三到四年的时间了。当初偶然接触OSG到现在,OSG己经在国内外得到广泛的应用,国内己 经有好几家专门使用OSG的公司,他们分布在杭州、西安、深圳以及还有一些我不知道的地方。 然而,更让人兴慰的是国内的各重点院校与研究所都己经开始使用OSG。我做为一直使用OSG做开发的图 形工作者,感觉非常兴慰。当每一次在群里或论坛说OSG又有什么什么消息时,看到很多人说:看来选OSG 是选对了,OSG明天更好等等类似的话,我热泪盈框。 OSG进入中国己经有七到八年了,在这期间,OSG经历了数次变迁,青丝变白发。使用OSG的开发者从无 到有,从草根开发者到成立专门使用OSG的公司。 1.1 0SG简介 1.1.10SG的诞生 在1997年时,Don Burns由于喜欢滑翔机运动且对计算机图形学非常熟悉,在INUX上写了一个控制滑翔 机的小引擎,这便是OSG的最初雏形。 后来在1998年,Don Burns在滑翔机爱好者邮件列表中遇到了Robert Osfield,对OSG的命运起到了决定性 的改变。我们现在在邮件列表中也会经常看到Robert的名字,从98年至今,Robert一直担当OSG开发组 长,权衡OSG的各种利弊。 有很多人在刚开始接触OSG时感觉到非常痛苦,咋一看一点儿都看不懂,疑是什么鬼怪新语言。其实OSG 是语法是标准C+的。 您可以登录:http:/www.osgchina.org/与http:/www.openscenegraph..org查看关于OSG历史的更多信 息。也可以查阅《osG快速入门指南》[:]的第一章的相关章节来获得OsG 的发展更详细信息。 1.1.20SG在中国 OSG在2000年或更早时候进入的中国,据个人了解,FLMN在2003年接触的OSG,并在2005年创立了 VRDEV[www.vrdev..net)网站。VRDV是国内OSG爱好者交流的中心,把无数OSG爱好者引入大门。 3DVRI[www.3dvri.com是基于OSG的VR引擎,在大中院校及公司得到广泛的应用。关于3DVRI的相关案例 可以查看osgChina的企业展示版面http:/www.osgchina..org/projects/,osgChina/enterprise.php。 在今年初二,由FreeSouth牵头,联合国内众多爱好者共同建立了OSG中国官方网站[www.osgChina.org】, 以及osG中国讨论区[bbs.osgChina.orgl,组建了OSG在中国的大本营。 11
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 11 第一章 绪论 OSG 诞生于大概是 1997 年,可以在 osgChina[www.osgChina.org]上查阅到关于 OSG 的来龙去脉。笔者使用 OSG 也已经有三到四年的时间了。当初偶然接触 OSG 到现在,OSG 已经在国内外得到广泛的应用,国内已 经有好几家专门使用 OSG 的公司,他们分布在杭州、西安、深圳以及还有一些我不知道的地方。 然而,更让人兴慰的是国内的各重点院校与研究所都已经开始使用 OSG。我做为一直使用 OSG 做开发的图 形工作者,感觉非常兴慰。当每一次在群里或论坛说 OSG 又有什么什么消息时,看到很多人说:看来选 OSG 是选对了,OSG 明天更好等等类似的话,我热泪盈框。 OSG 进入中国已经有七到八年了,在这期间,OSG 经历了数次变迁,青丝变白发。使用 OSG 的开发者从无 到有,从草根开发者到成立专门使用 OSG 的公司。 1.1 OSG 简介 1.1.1 OSG 的诞生 在 1997 年时,Don Burns 由于喜欢滑翔机运动且对计算机图形学非常熟悉,在 LINUX 上写了一个控制滑翔 机的小引擎,这便是 OSG 的最初雏形。 后来在 1998 年,Don Burns 在滑翔机爱好者邮件列表中遇到了 Robert Osfield,对 OSG 的命运起到了决定性 的改变。我们现在在邮件列表中也会经常看到 Robert 的名字,从 98 年至今,Robert 一直担当 OSG 开发组 长,权衡 OSG 的各种利弊。 有很多人在刚开始接触 OSG 时感觉到非常痛苦,咋一看一点儿都看不懂,疑是什么鬼怪新语言。其实 OSG 是语法是标准 C++的。 您可以登录:http://www.osgchina.org/ 与 http://www.openscenegraph.org 查看关于 OSG 历史的更多信 息。也可以查阅《OSG 快速入门指南》[]的第一章的相关章节来获得 OSG 的发展更详细信息。 1.1.2 OSG 在中国 OSG 在 2000 年或更早时候进入的中国,据个人了解,FLMN 在 2003 年接触的 OSG,并在 2005 年创立了 VRDEV[www.vrdev.net]网站。VRDEV 是国内 OSG 爱好者交流的中心,把无数 OSG 爱好者引入大门。 3DVRI[www.3dvri.com]是基于 OSG 的 VR 引擎,在大中院校及公司得到广泛的应用。关于 3DVRI 的相关案例 可以查看 osgChina 的企业展示版面[http://www.osgchina.org/projects/osgChina/enterprise.php]。 在今年初二,由 FreeSouth 牵头,联合国内众多爱好者共同建立了 OSG 中国官方网站[www.osgChina.org], 以及 OSG 中国讨论区[bbs.osgChina.org],组建了 OSG 在中国的大本营
OpenSceneGraph程序设计 www.osgChina.ong 第一章:绪论 目前在国内使用OSG的大概有上千人,专做OSG相关项目的公司有三到五家。各高校与研究所与仿真相关 的实验室等等都在不同程度的在OSG这个方向上投入人力与物力。 您可以登录www.vrdev..net查看OSG国内爱好者使用OSG的历程,也可以登录bbs.osgChina..org来查看最新 的讨论。 1.2如何学习0SG 1.2.10$G的书籍 OSG官方出过两本书,一本是《OpenSceneGraph参考手册》[OpenSceneGraph Reference Manuals],这本书 有基于1.2与2.20双版本。该书大概成于07年六月左右,当时记得是在五一的时候,我当时正在家中吃饭, 朋友通知说出书了。然而就在今天中午,3DV的唐先生刚刚打电话来告知喜讯,说他们方才己经购买到了 这本书。这是我听到的第一个购买到这本书的相关消息。这本书是一本参考大全,大家应该有不少都看过C 语言参考大全,C+参考大全,PowerBuilder参考大全。换句话说,里面介绍的是函数与函数说明,并不涉 及原理的讲述与案例。当然从某种意义上讲OSG更侧重于当作工具库来使用,做二次开发相对少一些,OSG 的结构与体现在人们面前的使用方法与发展趋势也是越来越方便人们使用,这样应用会是OSG最重要的一 环,二次开发则次之。 另一本则不得不重重的提一下了,书名叫《oSG快速入门指南》[OpenSceneGraph Quick Start Guide]。这本 书由于是官方出的第一本书,而且早就放出话去,故千呼万唤始出来。记得我听见这本书出来的时候饭都 没顾上吃,上网吧就下下来了,又打电话又写邮件,不亦乐乎。记得那个时候Array好像己经开始做OsG 了。VDEV上英文版被帖出来后,大家争相翻译,现在记不清楚了,武大的有位夜间登录网友记得曾经译 过几节,但是没有坚持下来。最后清华的王锐Array]与他的好友钱学雷博士完成了最终的翻译并与OSG开 发组联系发行了中文版。这本书是免费的中英文版本均可以在OsG中国讨论区[bbs.osgChina.orgl上下载到。 不得不说,这是一本好书。虽然讲的没什么大的应用,但是是OSG众多书籍中唯一讲原理的书籍,所以不 管怎样一定要看看才行。在随书的光盘当中,我也会把这本书的中英文都整理出来。 还有一本有书的模样的是很早很早的未完成的书籍,书名为《oSG基本渲染理论》[A Short Introduction to the Basic Principles of the Open Scene Graph]。这本书由我翻译完成,英文可以在www.osgChina.org下载得到,或 在书的随赠光盘当中,而中文则在随书光盘与bbs.osgChina.org上都可以下载得到。这本小书应该是最早的 介绍OSG的专业书籍,可惜的是并没有完成,估计以后也不会再继续写了。这本书是基于OSG1.20的。 另外在Google.上可以搜索到更多的关于OSG的论文,有些论文写的非常精彩且长,曾记得有位博士写的关于 多通道,整整几十页,字还很小。可以到http:/www.google..cn/advanced_search?hl=zh-CN也就是www.google.cn 的高级搜索子项里填入相关信息来搜索关键字为OsG或Ope nSceneGraph的资源。我一般喜欢搜索PDF与Doc 格式的文档。如图1.1所示。 除此之外再也没有英文的专业书籍来介绍OSG了,大概是OSG的书卖的并不是十分的好。曾记得我以前问过 FLMN为什么不买一本参考大全,FLMN当时说:有Doxygen就行了。后来我琢磨一下也是的,一来那玩易儿 很贵,在外国便宜,顺差过来就贵了。二来有Doxygent确实就行了,所以没有买。而且OSG快速入门指南是 12
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 12 目前在国内使用 OSG 的大概有上千人,专做 OSG 相关项目的公司有三到五家。各高校与研究所与仿真相关 的实验室等等都在不同程度的在 OSG 这个方向上投入人力与物力。 您可以登录 www.vrdev.net 查看 OSG 国内爱好者使用 OSG 的历程,也可以登录 bbs.osgChina.org 来查看最新 的讨论。 1.2 如何学习 OSG 1.2.1 OSG 的书籍 OSG 官方出过两本书,一本是《OpenSceneGraph 参考手册》[OpenSceneGraph Reference Manuals],这本书 有基于 1.2 与 2.20 双版本。该书大概成于 07 年六月左右,当时记得是在五一的时候,我当时正在家中吃饭, 朋友通知说出书了。然而就在今天中午,3DVRI 的唐先生刚刚打电话来告知喜讯,说他们方才已经购买到了 这本书。这是我听到的第一个购买到这本书的相关消息。这本书是一本参考大全,大家应该有不少都看过 C 语言参考大全,C++参考大全,PowerBuilder 参考大全。换句话说,里面介绍的是函数与函数说明,并不涉 及原理的讲述与案例。当然从某种意义上讲 OSG 更侧重于当作工具库来使用,做二次开发相对少一些,OSG 的结构与体现在人们面前的使用方法与发展趋势也是越来越方便人们使用,这样应用会是 OSG 最重要的一 环,二次开发则次之。 另一本则不得不重重的提一下了,书名叫《OSG 快速入门指南》[OpenSceneGraph Quick Start Guide]。这本 书由于是官方出的第一本书,而且早就放出话去,故千呼万唤始出来。记得我听见这本书出来的时候饭都 没顾上吃,上网吧就下下来了,又打电话又写邮件,不亦乐乎。记得那个时候 Array 好像已经开始做 OSG 了。VRDEV 上英文版被帖出来后,大家争相翻译,现在记不清楚了,武大的有位夜间登录网友记得曾经译 过几节,但是没有坚持下来。最后清华的王锐[Array]与他的好友钱学雷博士完成了最终的翻译并与 OSG 开 发组联系发行了中文版。这本书是免费的中英文版本均可以在 OSG 中国讨论区[bbs.osgChina.org]上下载到。 不得不说,这是一本好书。虽然讲的没什么大的应用,但是是 OSG 众多书籍中唯一讲原理的书籍,所以不 管怎样一定要看看才行。在随书的光盘当中,我也会把这本书的中英文都整理出来。 还有一本有书的模样的是很早很早的未完成的书籍,书名为《OSG基本渲染理论》[A Short Introduction to the Basic Principles of the Open Scene Graph]。这本书由我翻译完成,英文可以在www.osgChina.org下载得到,或 在书的随赠光盘当中,而中文则在随书光盘与bbs.osgChina.org上都可以下载得到。这本小书应该是最早的 介绍OSG的专业书籍,可惜的是并没有完成,估计以后也不会再继续写了。这本书是基于OSG1.20的。 另外在Google上可以搜索到更多的关于OSG的论文,有些论文写的非常精彩且长,曾记得有位博士写的关于 多通道,整整几十页,字还很小。可以到http://www.google.cn/advanced_search?hl=zh-CN也就是www.google.cn 的高级搜索子项里填入相关信息来搜索关键字为OSG或OpenSceneGraph的资源。我一般喜欢搜索PDF与DOC 格式的文档。如图1.1所示。 除此之外再也没有英文的专业书籍来介绍OSG了,大概是OSG的书卖的并不是十分的好。曾记得我以前问过 FLMN为什么不买一本参考大全,FLMN当时说:有Doxygen就行了。后来我琢磨一下也是的,一来那玩易儿 很贵,在外国便宜,顺差过来就贵了。二来有Doxygen确实就行了,所以没有买。而且OSG快速入门指南是