2006年07月10日

可能glut很久没更新的缘故,stdlib.h里面的声明已经变了,把glut.h中的这句:extern _CRTIMP  void __cdecl exit(int); 改为extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);就好了。

2005年06月03日

摘要:
本文泛泛地叙述有趣实用的3D图形开发技术,介绍一些主流的开发库和工具软件,并不涉及底层的图形学知识,可作为初学者入门读物。作者希望通过这个文档,能够为新手提供一些信息,使他们更容易找到自己想要的东西,降低入门门槛。

一.引言
目前计算机3D技术确实达到了一个相当高的程度,所能完成的效果令人美不胜收,惊叹不已。3D技术被广泛应用于游戏娱乐、商业仿真、战场和空间仿真、计算机可视化、城市仿真、计算机教育等领域。

(From MultiGen-Paradigm Vega)

二.主流的底层渲染3D API
尽管有如NVIDIA的GL、SGI的OpenGL Shading Language等专门的图形语言的出现,但是对普通程序员而言,OpenGL和Direct3D仍然是最底层渲染API,大部分3D应用是在它们的基础上开发的。
1.OpenGL
OpenGL当前版本为2.0,是一个性能卓越的三维图形标准,早先在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等,涉及到建筑、产品设计、医学、地球科学、计算流体力学等领域。OpenGL作为一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植,并有使用简便,效率高的优点。OpenGL在微机中也得到了广泛的应用。
2.Direct3D(DirectX Graphics)
Direct3D是Microsoft DirectX9.0的一个组件,主要用于游戏开发,但是由于Microsoft的巨大投入,目前已经成为足以与OpenGL相抗衡的3D标准。DirectX 9.0 基于COM (Component Object Model)技术,它由下列组件组成:
•DirectX Graphics:集成了9.0以前版本里的Microsoft DirectDraw和Microsoft Direct3两大组件,统一了2D和3D的编程接口。该组件包括了可以简化许多图形编程任务的Direct3D 扩展实用库(Direct3D extensions utility library)。
•Microsoft DirectInput提供对多种输入设备的支持,包括对力反馈技术的支持;
•Microsoft DirectPlay提供多用玩家网络游戏的支持;
•Microsoft DirectSound用来开发高品质的音频应用,可播放或抓取波形音频;
•Microsoft DirectMusic为基于波形的游戏音乐提供了完整的解决方案;
•Microsoft DirectShow提供了抓取和回放高品质多媒体流的支持;
•DirectSetup提供安装DirectX组件简单API支持;
•DirectX Media Objects提供读写包括视频、音频编码、解码和效果等数据流对象的支持。
如果直接用OpenGL或Direct3D来开发3D应用,则开发效率低,对开发人员素质要求高,低手很难开发出象样的3D产品。幸好人们已经作了很多努力,98年以后就有很多商业的或免费的图形工具包可供使用。所以,我们可以在掌握OpenGL和Direct3D基本使用方法后,再去学习使用这些高层的工具包,就可以使我们的3D开发一开始就站在高手们的肩膀上,迅速进入这个陌生的领域。

三.高级3D开发库介绍
目前,3D开发库算得上数不胜数,
GLUT – OpenGL Utility Toolkit
GLUT 是一个与操作系统无关的OpenGL程序工具库, 它实现了可移植的OpenGL窗口编程接口,GLUT支持C/C++、FORTRAN、ADA。工具包当前版本号为3.7,支持OpenGL多窗口渲染、回调事件处理、复杂的输入设备控制、计时器、层叠菜单、常见物体绘制函数、各种窗口管理函数等。GLUT不是一个全功能的开发包,并不适合大型应用的开发,它只为中小应用而设计,特别适合初学者学习和应用OpenGL,由此入门相对容易。
SGI OpenGL Peformer
SGI公司是业界的领导厂商之一,在实时可视化仿真或其它对显示性能要求高的专业3D图形应用领域里,OpenGL Performer为创建此类应用提供的强大而容易理解的编程接口。Performer可以大幅度减轻3D开发人员的编程工作,并可以容易地提高3D应用程序的性能。它的软件模块对数据的组织和显示做了广泛的优化。
OpenGL Performer是SGI可视化仿真系统的一部分。它提供了访问Onyx4 UltimateVision、SGI Octane、SGI VPro图形子系统等SGI视景显示高级特性的接口。Performer和SGI图形硬件一起提供了一套基于强大的、灵活的、可扩展的专业图形生成系统。Performer已经被移植到多种图形平台,在使用的过程中,用户不需要考虑各种平台的硬件差异。
我们在试用的过程中发现,OpenGL Performer的通用性非常好,它并不是专门为某一种视景仿真而设计,API功能强大,提供的C和C++接口相当复杂。除了可以满足各种视景显示需要,它还提供了美观的GUI开发支持。
Quamtum3D OpenGVS
OpenGVS是Quantum3D公司的早期成功的产品,用于场景图形的视景仿真的实时开发,易用性和重用性较好,有良好的模块性、巨大的编程灵活性和可移植性。OpenGVS提供了各种软件资源,利用资源自身提供的API,可以很好地以接近自然和面向对象的方式组织视景诸元和进行编程,来模拟视景仿真的各个要素。目前,OpenGVS的最新版本为4.6,支持Windows和Linux等操作系统。
由于Quamtum3D已经收购了CG2,而OpenGVS又是基于C的老套架构,对OpenGVS的后续开发投入不足,Quamtum3D可能把战略眼光投放在VTree和Quantum3D IG(整套解决方案Mantis )上边。
Quamtum3D Mantis
Mantis系统是Quamtum3D推出的一整套视景仿真解决方案。Mantis系统作为一种图形生成器开发平台,提供了使用现有计算机和图形硬件,得到高效率,高性能,高帧速率,以及较好的图形质量。CG2公司的VTree是实时3D可视化仿真的首选开发包,此前已经为美国国防部投入了多年的研究和开发工作。Mantis合并了VTree开发包和可扩展图形生成器架构,从而创造了强大的,可伸缩的,可配置的图形生成器。重要的特征包括:跨平台:Mantis可以在包括Win32和Linux等多种操作系统上运行;公共接口:Mantis支持分布式交互仿真(DIS),也支持更现代的公共图形生成接口(CIGI);Mantis支持许多高级特性,包括同步的多通道,包括各种特效:比如仪表、天气、灯光、地形碰撞检测等;可伸缩性:多线程可视化仿真应用可能有多种多样的显示需求,Mantis可以根据需要进行器件的裁减;灵活性和可配置性:Mantis作为一个开放系统硬件平台,可以利用最新的硬件和图形卡,而基于客户端/服务器端的架构,又可以使Mantis的配置可以通过网络在客户端上即可进行,可配置功能极为丰富;可扩展性:不象传统的硬件图形生成器,Mantis系统的扩展和修改并不昂贵,软件模块可以通过插件的形式增强软件功能;Mantis支持地形数据库,支持场景管理。
MultiGen-Paradigm Vega
Vega是MultiGen-Paradigm公司应用于实时视景仿真、声音仿真和虚拟现实等领域的世界领先的软件环境。使用Vega 可以迅速地创建各种实时交互的三维环境,以满足各行各业的需求。它还拥有一些特定的功能模块,可以满足特定的仿真要求,例如:船舶、红外、雷达、照明系统、人体、大面积地理信息和分布式交互仿真等等。附带的Lynx程序,这是一个用来组织管理Vega场景的GUI工具。
MultiGen Creator系列产品是世界上领先的实时三维数据库生成系统,它可以用来对战场仿真、娱乐、城市仿真和计算可视化等领域的视景数据库进行产生、编辑和查看。这种先进的技术由包括自动化的大型地形和三维人文景观产生器、道路产生器等强有力的集成选项来支撑。MultiGen Creator是一个完整的交互式实时三维建模系统,广泛的选项增强了其特性和功能。
MultiGen-Paradigm公司已经计划用Vega Prime取代Vega,Vega Prime全部用C++写成,是全新的产品,而不是Vega的后续版本,虽然目前在功能上比Vega3.7没有大的提高,但是Vega Prime的核心Vega Scene Graph是完全面向对象的先进架构,采用了许多现代C++的特性和技术,比如泛型,设计模式等,大大增加了软件功能和灵活性、通用性;此外,目前大部分程序员都有面向对象编程经验,Vega Prime提供的接口恰好符合其编程思维,易于上手,因此特别有吸引力。Vega Prime有很好的发展前景,但是Vega Prime是新推出的产品,最新版本号是1.2,很明显,有的方面还不够成熟。
OpenSceneGraph(OSG)
OSG是一个可移植的、高层图形工具箱中,它为战斗机仿真、游戏、虚拟现实、或科学可视化等高性能图形应用而设计。它提供了基于OpenGL的面向对象的框架,使开发者不需要实现、优化低层次图形功能调用,并提供了很多附加的功能模块来加速图形应用开发。
OSG通过动态加载插件的技术,广泛支持目前流行的2D、3D数据格式,包括OpenFlight (.flt),TerraPage (.txp) (多线程支持),LightWave (.lwo),Alias Wavefront (.obj),Carbon Graphics GEO (.geo), 3D Studio MAX (.3ds),Peformer (.pfb),Quake Character Models (.md2),Direct X (.x),以及Inventor Ascii 2.0 (.iv),VRML 1.0 (.wrl),Designer Workshop (.dw)、AC3D (.ac) ;.rgb,.gif,.jpg,.png,.tiff,.pic,.bmp,.dds,.tga 和 qucktime。另外还可通过freetype插件支持一整套高品质、反走样字体(英文)。OSG内含LADBM模块,加载大地形速度较快,帧速率高,在运行过程中占用计算机资源少。
另外,OSG是自由软件,公开源码,完全免费。用户可自由修改,来进一步完善功能。目前已经有很多成功的基于OSG的3D应用,效果不亚于商业视景渲染软件。如果要自主开发视景渲染软件,OSG是最佳的基础架构选择。
CG2 VTree
CG2 VTree是一个面向对象,基于便携平台的图象开发软件包(SDK)。前面提到Mantis系统的强大功能,其中的一个重要原因是Mantis的软件部分主要基于VTree。VTree SDK包括大量的C++类和压缩抽象OpenGL图形库、数组类型及操作的方法。VTreeSDK功能强大,能够节省开发时间,获得高性能的仿真效果。利用此工具包开发者可充分展开想象力,置身于鲜活的虚拟世界中.比如战场战术的实现、探索火星表面的过程等。对于希望得到跨平台、高性能低成本、可实时响应虚拟仿真应用VTree无疑是最佳选择。
CG2设计、优化了代码,使得在同一硬件上得到更快的实时显示速度变成可能。Vtree能用于多平台的三维可视化应用,它既可用在高端的SGI工作站上,也能用在普通PC上。VTreeSDK是开发交互式仿真应用优秀开发包。VTree 包含一系列的配套C++类库适用于开发高品质,高效的VTree应用。VTree提供的扩展功能成功地兼容并融合了复杂的OpenGL-API接口。VTree应用可运行于支持OpenGL的Windows和Unix类型的平台。
Vtree显示效率非常高,实际使用过程中给人感觉是非常快的。其原因一方面在于Vtree全新设计和优化了程序代码,另一方面在于Vtree显示控制的策略。Vtree生成和连接不同节点到一个附属于景物实体的可视化树状结构,这个可视化树状结构定义了如何对实体进行渲染和处理。一个实体由一个所有图形原始状态组成的渲染树和定义如何使实体显示的接合部分所组成。实体的渲染树包含所有这些实体的几何特性、运动特性和纹理节点。这些树状结构对于实体的细节描述能变得非常精细,并且通过不同的路径能够显示用于优化的不同的细节等级划分(LOD)。
VTree针对仿真视景显示中可能用到的技术和效果,如仪表、平显、雷达显示、红外显示、雨雪天气、多视口、大地形数据库管理、3D声音、游戏杆、数据手套等等,均有相应的支持模块。
Vtree开发包附带例子代码结构清晰,实现的功能全面,用户容易在阅读例子代码的基础上开发自定义应用。


名称 对比项 产品性质 平台支持 开发人员要求 购买费用 产品服务   
SGI Peformer 商业SDK IRIX, Linux, Window2000, WindowsXP,  中     
Quamtum3D OpenGVS 商业SDK Windows2000, WindowsXP, Unix,Linux 中     
Quamtum3D Mantis 全套商业
解决方案 本身提供系统平台 低     
MultiGen-Paradigm Vega Prime 商业SDK Window2000, WindowsXP, Unix,Linux 低     
OpenSceneGraph(OSG) 自由软件,
免费SDK Windows2000, WindowsXP, Unix,Linux 高     
CG2 VTree 商业SDK Windows2000, WindowsXP, Unix,Linux 低     
      


参考资源:
http://www.sgi.com/software/opengl/glut.html GLUT库页面
www.opengl.org OpenGL官方站点
www.multigen-paradigm.com multigen-paradigm公司主页
http://www.microsoft.com/windows/directx/default.aspx 微软公司directx页面
http://www.sgi.com/software/performer/ SGI OpenGL Performer页面
http://www.quantum3d.com/ Quantum3D主页
openscenegraph.sourceforge.net OpenSceneGraph主页

关于作者:
hujinshan 从事飞行仿真系统的设计和开发。对软件工程和3D技术感兴趣。您可以通过电子邮件 tohjs#163.com 和他联系。