【VC++开源代码栏目提醒】:网学会员VC++开源代码为您提供OSG简介 - 大学课件参考,解决您在OSG简介 - 大学课件学习中工作中的难题,参考学习。
本文翻译自 Don Burns 和 Robert Osfield(缺席)在 Image 2003 会议上的演讲幻灯片。
原文下载地址:http://www.openscenegraph.com/osgwiki/pmwiki.php/ProgrammingGuides/ProgrammingGuides1、什么是 Open Scene Graph?OpenSceneGraph 使用 OpenGL 技术开发,是一套基于 C平台的应用程序接口(API)。
OpenGL 技术为图形元素(多边形、线、点……)和状态(光照、材质、阴影……)的编程提供了标准化的接口。
而 OSG 开发的主要意义在于,将 3D 场景定义为空间中一系列连续的对象,以进行三维世界的管理。
正是由于场景及其参数定义的特点,通过状态转化、绘图管道和自定制等操作,OSG 还可以用于优化渲染性能。
可以运行 OSG 的平台,需要具备 OpenGL 的支持能力,以及 C的编译环境,支持 OSG 的系统包括 Solaris,IRIX, Mac Windows, OSX, HP-UX,Sony Platystation等等,不过 XBox 除外。
和 OpenGL 类似,OSG 的核心并没有提供窗口系统的功能。
因此用户可以自由选择所需的图形开发接口,如 GLUT,X11/Motif,Win32,MacOS X,Qt,wxWindows,Fox 等。
OSG 是一个
开源系统。
自 Robert Osfield 主持这个项目以来,OSG 就作为一个开放源
代码的图形开发工程开始在全球运作了。
OSG 包括一系列的标准库。
其核心是 OSG 本身。
下图中的树状结构包括了场景管理的各个功能节点node。
节点可以用于绘图,或者设置几何体和渲染属性。
例如,有的节点可以用于管理细节层次,场景转换,或者一个区域内几何体的拣选。
OSGUtil 提供了场景操作的工具。
如场景的精简(cull)和绘制,优化渲染,提供快捷方式等。
OSGDB 提供了文件管理和插件管理的功能。
所有的文件和图片都使用插件进行读取,以下是目前支持的文件格式列表:3dc、3ds、ac3、dw、flt、Freetype、iv、ive、logo、lwo、md2、obj、osg、osgtgz、tgz、txp、directX、zip 等文件格式;bmp、dds、pic、png、pnm、qt、rgb、tga 等图像格式。
osg 是 OSG 自身的格式,使用 ASCII 编码,便于阅读和编辑。
这些格式的文件都可以通过已有的插件读取,这其中也包括久负盛名的OpenFLT,Inventor,TXP(包括多重和异步的页),最近还增加了 ive 格式(osg格式的二进制版本)。
此外,OSG 还提供了提供特殊功能和组件的一系列节点,如文本的字体和风格化显示,OSGSim 用于模拟特定对象(天空,光,天候),以及粒子特效的显示。
用户可以自由地使用以上的库,也可以自定义新的库。
2、为什么
开源?之前已经提到过,OSG 是一个完全
开源的项目。
而
开源项目经常被认为是低质量的,“所予即所得”的,不适合产品化的。
事实上,对于 OSG 这种还未产品化的开发层软件(middleware)而言,
开源是一个极好的战略选择,当然这并不是对所有软件而言。
考虑软件开发的流程:首先是一个概念性的想法或者一个用户需求,软件工程师随后提出的方案,最后将方案转化为
代码。
不幸的是,大部分商业软件将
代码的部分作为“家传之宝”,深藏起来,生怕这些看起来汇集了智慧结晶的资料外泄。
。
然而,软件真正的价值是在开发流程的第二步,而且这一步完全可以被重新演绎成别的
代码。
我们经常见到大型企业之间为了
代码之争将对方告上法庭的例子,但是这显得毫无用处。
在软件的“食物链”当中,处于最底层的是系统开发者,他们针对硬件编写接口和驱动程序;其上一层是开发层软件的编写者,他们提供抽象层,并整合硬件接口(声音、图像、网络等),以方便应用软件的开发者使用。
应用层软件的开发者比较特殊,他们不仅要理解开发平台的特性,还要十分理解应用程序的工作配置和上级用户的需求。
最上一层是应用软件的用户,和开发者不同,他们将计算机作为一种工具,他们不关心软件的技术细节,只要软件易用而且有用,他们就愿意为之付款。
这些人包括办公室的白领,培训学员,老师,飞行员,等等。
在开发者的层级,事实上也有一条分界线存在。
在这个层级中,最下面的两层(系统开发者和开发层软件开发者)是由硬件厂商支持的。
而开发层软件开发者和应用软件开发者之间,却存在了明显的差别。
以上的场景存在了两条主要问题:一、应用程序开发者要依赖于开发层软件开发者和系统开发者,这决定了产品的质量;二、开发层软件开发者要开发出令人满意的产品,就必须与应用程序开发者分享设计的方案。
而软件的真正价值也就在这里。
OSG
开源后带来的益处主要有:(1)自由分享智慧:OSG 有 OSGPL 的授权(派生自 LGPL,但有所修改以适应商业软件的需求),这个授权将开发者从源
代码保密的桎枯中解放出来,带来了诸多的便利。
(2)没有商业规范的限制:商业软件的编写要时常发布日程表、新特性和新版本,以实现市场战略的需要。
开源软件纯粹从技术的角度出发,开发者可以集中精力解决技术上的难题。
(3)带给应用软件开发者的便利:不用购买;可参与开发;彻底进行调试;错误的反馈和解决。
(4)带给开发软件开发者的便利:高效的软件开发;用户参与;直接反馈;思想的共享。
(5)提升软件质量:不会总是忍受重复的错误。
开源的产品并不等价于成功的产品。
网络上存在着许多
开源软件(可以浏览一下Source Forge),它们之间一直在进行着“适者生存”的战争。
一个优秀的软件,无论它
开源与否,都必须物有所值,即,必须为最终用户提供唯一的解决方案;它必须稳定,没有哪个应用程序开发者愿意在有问题的软件基础上进行编程;它必须有良好的设计,必须提供一种适合用户的开发方法,而不是对开发者和用户加以限制。
它必须有很好的交流渠道,经常性地为用户的问题提供回答,解决疑难,而且要做到谦恭有礼。
3、设计思想(1)适应性开发:早期的开发往往做出各种例行的限制,而 OSG 有意去适应用户。
(2)主要特性:可移植性;可扩展性(Design Patterns,STL……);多显示、多线程环境;宽松的模块关系足以适应 OpenGL 技术的发展和各个方面(例如 CGShading 语言);可以在最少的重绘时间里提供最好的显示性能;提供简单的实时配置和各种特效(蜡板效果,阴影、基于图片的渲染、扭曲校正等)。
大部分的交流都在 OSG 的邮件组中进行。
我们每天都会抽出数个小时的时间回答 和问题, OSG 的用户进行各种交流。
我们在 OSG 的主页上通过在线的参考指南向用户提供各种信息,其中也包括大量的示例。
我们还负责维护一个主机,用于收集邮件组的问答资料,用户提供的的示例
代码,以及一些软件的部分程序段。
4、多线程、多显示(Multi-threaded Multi-display)单线程低负荷的设计特性允许我们的程序“朴实无华”,即,我们不必关注不必要的损耗。
可升级性也是呈线性的,系统负荷不会随着进程单元的增加而增加。
我们不需要在运行时实现数据保护,而是在编译时进行这项工作。
我们使用 C常量来保证源
代码中的数据只读,编译器会要求我们按照规定的方式写入数据,从而避免覆盖危险的数据。
因此,在运行时,我们不需要再建立额外的进程来保护多进程共享的数据。
当然危险依然存在。
在任何多进程程序运行时,都需要遵守一定的规则。
其中最重要的是,程序只有在更新段(UpdatePhase)的时候才可以传递数据。
如下所示:如上的程序拥有传统的多线程、多显示和多缓冲特性。
每个相(Phase)都有自己的 CPU 时间,使得程序保持高度的并行化。
在 1990 年时,这显然是一个优秀的设计,但是在 2003 年就不尽然了。
处理器的速度比起过去已经快了 60 倍。
现在,我们如果要描述每个相的处理时间,那么大致如下图所示。
更新时间(Update)不到一毫秒,标准数据库的拣选时间(Cull)约 23 毫秒,绘图时间(Draw)则没有变化,除非我们有意在绘图时为程序添加更多的工作。
可以明显看出,CPU 资源的使用少得可怜,更多的时间它处于空闲状态。
Producer 是 OSG 的姊妹产品,它为 OSG 良好地实现了多线程、多显示的环境。
其基本概念是运用抽象的“摄相机”(Camera)。
Producer 中的每一个摄相机都是一个对象,也是一个进程单元,可以自行、与其他摄相机异步地并行工作。
Producer/OSG 的多显示运用,其原理如下图所示:绘图(Draw)事实上是两个并行的进程。
在现代的图形设备上,一般至少有两个处理器在进行工作。
CPU 并不负责图形的渲染,而是执行 OpenGL 的指令,也就是“分发” 。
(Dispatch) 图形处理器(也就是 GPU)负责执行 CPU 分发的 OpenGL指令,并异步进行执行。
这样的硬件结构有几个特点:一、分发进程仅仅由 CPU 和 GPU 之间管道(FIFO)的传输速率决定;二、使用大容量的管道,可以使分发的时间远远少于和快于GPU 绘图的时间。
基于以上的信息,Producer/OSG 使用了称为“移相”(phase shifted)的技术:在进行移相时,我们使用了两种周期进行计算。
其中一种是由图形设备的帧扫描(vertical retrace)得来的,它用于图形硬件设备的绘图工作。
在 CPU 一端,我们使用的时间周期与图形设备帧同步(vertical sync)的周期相同,但是通过移相使得更新(update)、拣选(cull)和分发(dispatch)过程与绘图(draw)过程交迭。
在理想情况下,我们可以在一次分发结束后立即开始下一次的更新。
更新/拣选/分发的过程连续地运行,简化了多线程的模型,也提高了资源的使用效率。
--------------------------------------------------------------------------------------关于作者:Don Burns,OSG 的创始者,1996 年,他在 Performer 的基础上建立了这个 PC 自平台上的视觉模拟工程, 2001 年开始全职承担 OSG 及其相关工程的开发工作。
Robert Osfield,自 1999 年开始担任项目负责人,并将其作为
开源项目发布,自 2000 年开始全职承担 OSG 的开发工作。
关于 Image:Image 大会(The IMAGE Conference)开始于 1977 年,是目前世界上首屈一指的视觉仿真技术会议。
它是由 IMAGE Society 发起,旨在探讨视觉仿真技术的发展和应用的会议。
每次会议的内容主要由致辞、 论文讲演、展览和技术教学组成。
OSG 相关下载汇总OSG 学习光盘 1.0:http://download.mapalpha.com/vrdev/VRDEV-OSG-STUDY-KIT-1.0.isoOSG1.0
vc7:http://download.mapalpha.com/vrdev/OSG1.0_
vc71.rarOSG1.1
vc7:http://download.mapalpha.com/vrdev/OSG1.1_
vc71.rarOSG1.1
vc8:http://download.mapalpha.com/vrdev/OSG1.1_
vc80.rarOSG1.2
vc7:http://download.mapalpha.com/vrdev/OSG1.2_
vc71.rarOSG1.2
vc8:http://download.mapalpha.com/vrdev/OSG1.2_
vc80.rarOSG 源文件:http://download.mapalpha.com/vrdev/OSG_OP_OT-0.9.9.ziphttp://download.mapalpha.com/vrdev/OSG_OP_OT-1.0.ziphttp://download.mapalpha.com/vrdev/OSG_OP_OT-1.1.ziphttp://download.mapalpha.com/vrdev/OSG_OP_OT-1.2.zipMicrosoft Visual C 2005 Redistributable Package x86:http://www.microsoft.com/downloa ... 3-9C99-220B62A191EE
上一篇:
赤兔远控程序(学习之用)v10
下一篇:
浮生若萍