COGRE3D程序设计教程.doc_第1页
COGRE3D程序设计教程.doc_第2页
COGRE3D程序设计教程.doc_第3页
COGRE3D程序设计教程.doc_第4页
COGRE3D程序设计教程.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C OGRE3D 程序设计教程 1C+_OGRE3D_程序设计教程(1)2010-08-07 11:44第一章什么是Ogre Ogre 3D是一个成熟,稳定,可靠,灵活,跨平台,而且拥有丰富功能实时3D图形库。在这一章节中我们会介绍关于Ogre相关的一些基本概念,如果你已经了解的API和SDK这样的软件术语的话,你可以跳过下面的段落直接看下一章节的内容。要是还没有了解的话,下面的一段文字会对你理解基本概念很有帮助。Ogre 3D SDK在具体讨论Ogre3D SDK概念之前,我们先简单介绍一下一些基本的概念,这有助于我们展开具体Ogre3D SDK的讨论。其中最重要的两个概念是API和SDK。API是Application Programming Interface的简称,中文的含义是应用程序编程接口。具体含义指的是底层系统提供给上层应用程序的具体操作方法。应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令(动作)。在Windows系统中API是由核心的DLL库提供。SDK是软件开发包(Software Developers Kit)的简称。一般来说它是一套对系统底层的服务的封装,并且提供了相应的API给应用程序使用。举例来说,如果你想要写一个Microsoft Windows XP上的应用程序,你就需要通过调用Win32的API来实现相应的功能,这些API通常是隐式的,分别包含在liruser32.dll,kernel32.dll等等库里面。理论上,你可以直接通过这些库(DLL)的接口来操作底层的一些技术实现。但是如果你决定使用由Microsoft提供的Microsoft Platform SDK(简称Microsoft SDK)来执行系统应用和服务会让一切更容易。这个SDK提供给你一些包含文件和导入库来帮助你链接到系统底层接口。提示:如果无法理解我所说的包含文件和链接库这些编程术语的含义,建议你先把书放下,去研究一下他们的用法和用途。当使用任何SDK(当然包括Ogre)编程的时候你必须要了解这些基本概念。所以,在阅读下一段文字之前,我建议你去查阅Mirosoft的MSDN网站(Visual Studio中也会附带的3张CD或者一张DVD的MSDN的离线版本。或者直接去看看在线版本)。如果你是Linux使用者,你更不要高兴得太早。如果你不懂得什么是-devel RPM包,或者根本不知道为什么你需用使用他,我建议你花费些时间去Red Hat的网站()寻找答案。不论是操作系统(比如Windows或者Linux)提供的系统级服务,还是其他的非系统级服务以及应用(例如NVIDIA公司的Cg工具包),它们的SDK都提供了相应的包含文件和链接库(在Windows上是.dll文件,在Linux上面是被称为共享对象的.so文件)。Ogre是非系统应用的一个典型的例子,它的SDK将提供给你包含文件以及用于程序发行版本(Release)和调试版(Debug)的两个动态链接库。(其中调试版本的编译时没有进行任何优化,而且附带地进行了内存检查以及变量的初始化。而发行版本编译时最大化的优化了程序运行速度,通常这才是一个3D实时应用程序最需要的能力。)联接动态库时候Windows系统有自己独有的特点:在动态链接对象文件(object file)时额外需要一个文件(源代码中导出以用来得到函数名和类名等信息)辅助。具体点说,就是在Windows平台执行程序的时候,为了链接DLL文件,还额外需要链接一个导入库(import library)。这个文件中包含了链接器(Visual Studio中的LINK.EXE)所需要的信息(其中的信息包括用于运行时库链接到执行文件,以及寻找和处理外部资源等)。而对于Linux系统而言并没有对这种文件的需求,这得益于Linux上共享对象载入器的设计,在链接时有能力正确处理所需外部信息,从而动态库可以在链接时被正确引用。(这里只是跨平台程序众多差异的一个。如果你对这些没什么兴趣,也没有必要去深究这些繁琐的问题。)差点忘了,在Windows中静态库的扩展名也是lib,这和动态库所需的导入库一样,具体链接的时候由链接器来处理具体的应用。而在Linux中的静态库扩展名是另外的.a。如果你希望更多更深入的了解静态库和动态库的相关知识和使用方法,可以去谷歌()或者百度()上搜索相关的文章。Ogre3D(也可以只叫Ogre,这本书里我会交替使用两个名字)让你可以在应用程序中采用面向对象的方式来表现复杂3D的空间。事实上Ogre的全称Object-Oriented Graphics Rendering Engine就是面向对象图形渲染引擎的意思,并且它确实严格做到了这个名称的定义。引擎这个术语暗示Ogre 3D为你的3D图形的应用程序提供了强大的动力,进而允许你更多关注应用程序细节而不是一个3D场景的渲染过程。作为应用程序的中间件,Ogre扮演了一个专注于处理了三维空间场景的角色。如果你熟悉Direct3D或者OpenGL,你会知道直接写一个图形程序需要多少代码,当你了解Ogre让你可以用很少量的代码来构建一个完整的三维场景(也有用在其他的方面,我们将在之后的文章中介绍)的时候,你就会庆幸有Ogre的存在。面向对象是一个模糊的概念,经常被滥用和词不达意的使用。Ogre的开发者们所理解的面向对象的标准含义是:相对于过去把程序看成一些离散任务的集合,面向对象方法把程序看成一些互相协作对象的集合的方法。详细一点的说法可以参考维基百科)中所介绍的:相对于从前人们认为的计算机程序是由计算机指令的序列所组成这种传统看法,面向对象的计算机程序是组合一系列独立的单元或者对象,使他们相互协作。每个对象能够接受消息,操作数据,以及发送消息给其他对象。面向对象设计(OOD)和面向对象编程(OOP)使编程更符合人类的直观认识,因为它是以人类对世界的感知为基础。如果你不熟悉OOD或者OOP技术和实践,你应该在深入了解Ogre之前去了解它们,因为我不想在这本书里过量提及什么是OOD和OOP。但知道它们确实有助于你了解Ogre的很多高级特性。如果你很喜欢享受挑战性的学习,Ogre对你将是非常好的战场。否则,建议你去亚马逊(A)或者互动出版网(),等网站去找到适合你的书来翻阅,也或者直接去网上搜索教程。它能够做什么?图1-1中,展示了一个被用于在实时游戏和交互仿真中比较通用的体系结构。应用层(Application layer)负责封装真正的计算机硬件,并包装产生了诸如系统计时器,HID(用户接口)输入以及文件系统等等接口。逻辑层(Logic layer)负责保存仿真运行的规则和维护状态,并对从应用层(application layer)传来的输入或者网络事件作出相应。最终所有这些状态周期性的通过图象和声音等这些媒体输出设备来展示给用户。图1-1:典型的仿真/游戏结构框架本书讨论的主题是其中视频图像部分:更准确地说,是Ogre 3D渲染库以及如何用它去渲染图象。在Ogre3D的名字中包含3D是很贴切的,因为那就是它所能做的所有事情。它不能处理用户输入,不能管理你的游戏状态,不能做网络通讯,不能播放声音。它只是做为一个3D渲染引擎被设计出来,并且那就是它唯一的应用。因为专业,所以它总是能够很好的完成它本分的任务。(虽然Ogre引擎中也会包含比如输入系统等一些简单的实现,但官方的说法一般是:这只是为了支持演示程序所提供的,不建议你在自己实际的应用中使用。你需要在Ogre去中去寻找其他的库来完善你自己的工具箱。)引擎特性Ogre几乎拥有了商业3D渲染引擎的全部特性,甚至在某些方面超越了它们。全面并同等的支持OpenGL和Direct3D全面支持Windows,Linux以及Mac OS X平台简单并可扩展的对象框架,能方便的插入到已存在的应用程序框架中自动处理渲染状态和空间剪裁强大且成熟的材质管理和脚本系统,可以不动一行代码去进行材质维护支持所有纹理混合和绑定技术,同时支持对GPU编程技术,支持汇编语言和所有高级语言形式的各种着色语言,其中高级语言包括:Cg,HLSL和GLSL支持多种纹理图片格式,包括:PNG,TGA,DDS,TIF,GIF,JPG,同时支持特殊格式的纹理,其中包括:一维纹理(1D),容积纹理(Volumetric textures),体积纹理(Cubemaps)和压缩的纹理格式如:DXTC全面支持渲染到纹理(Render-to-Texture)技术和投影纹理(贴花,Projective Texturing-decals)。全面支持材质LoD(细节层次,mipmapping)技术优化的二进制模型文件格式,同时支持手动和自动LoD生成同时拥有多种从商业或者开源3D模型软件导出到Ogre模型格式和动画格式的插件,其中包括官方以及用户提供的版本。全面支对顶点和索引缓存(vertex and index buffers)、顶点声明(vertex declarations)以及贴图缓存(buffer mappings)全面支持骨骼动画和姿态动画(pose动画,顶点动画的一种),每个顶点可以混合任意数目的骨骼权重支持软件和硬件加速蒙皮支持静态几何体批次(static geometry batching)支持二次贝塞尔曲面(biquadric Bezier patches)给出以插件方式链接不同场景结构的接口,允许你使用适合自己应用程序的场景体系(基本的八叉树octree场景管理做为一个例子出现在插件中)高级可屏蔽场景查询系统(Advanced maskable scene-querying system)全面支持多种阴影技术,包括模版阴影(stencil),纹理阴影(texture),叠加阴影(additive),调制阴影(modulative),并且全部支持硬件加速高级插件方式的粒子系统,可扩展的发射器(emitters),效果器(affectors),渲染器(renderers)(ParticleFX作为插件的例子被包含在工程里面)全面支持并且方便使用的天空盒(skyboxes),天空面(skyplanes),以及穹顶(skydomes)以精灵效果为基础(sprite-based)并得到渲染优化的公告栏(Billboarding)技术以单一队列为基础的渲染管理,允许全面操作渲染执行顺序自动管理透明对象成熟且可扩展的资源管理和载入系统,文件系统支持的文件包括zip,pk3格式Ogre 3D渲染引擎的开发团队用了4年时间完善了上面列出的所有功能,但只有到你真正的使用的时候才能展示它所拥有的广泛性和专业性。Ogre的起源Ogre是一个开源软件项目。这意味着你通常可以免费的随意使用它。一些小小的限制来源于它所使用的LGPL协议;如果你有什么不明白的细节,理查德斯托尔曼和他创立的自由软件基金将会很高兴告诉你什么是LGPL所定义的规则。无论是哪种类型的软件产品,包括教学或者科研项目,个人学习或者开发游戏项目,全特性的社区游戏(Full-featured community),乃至具有赢利的商业游戏和其他3D应用程序,只要你遵循下面的一些限制和规则,你都可以免费的将Ogre应用到你的软件产品中。这本书里所含所有版本的Ogre,并不象MySQL等开源软件那样具有双重开发许可,相对而言它是更严格的遵守LGPL,以下是LGPL许可的主要内容:你必须区分你所得到的二进制文件是否是从最初遵守LGPL的源代码版本编译而来,因为任何对源代码的改动都可能让这个项目变成闭源,并且确认从这个源代码所编译生成的库是可用的(对于这点你完全不用担心,这应该是Ogre开发工程所保证的)。当你使用这个库作为动态库被链接到你的应用程序之中的时候,并没有必要如同GPL协议一样开源你的应用程序,在LGPL协议下这种情况你的软件没有被强制要求遵守LGPL。(这就是协议中Lesser这个词所带来的含义。)但当你把遵守LGPL的项目作为一个静态库链接到你的应用程序的时候,你必须保证你所开发的程序也要遵守LGPL协议开源(换句话说,静态链接-让你把协议链接到了程序里)。Ogre项目在2001年被建立,它的作者,SteveSinbadStreeting,曾经是一个每天循规蹈矩的商业软件开发者。某天,突然冒出了一个想法:世界需要有一个不一样的3D渲染引擎(约翰卡马克在多年前已经开发了一个),它的场景结构应该独立出来。随后,他利用10多年在图形领域的软件工程开发经验(也可以称为折磨),以及在更多折磨中诞生出来的软件工程(他正式的工作)经验,设计了一个体系结构-今天被我们亲切地称为Ogre。当我们问他为什么愿意去设计另外一个3D渲染引擎的时候,Steve回答说:很多的引擎,在技术上吸引人的同时,却缺乏紧凑的设计和完善的开发文档。它们虽然拥有众多的特性,但是缺乏一致和直观的技术演示。正如同其他很多软件系统一样,随着时间而逐渐变的庞大和衰落。另外还有很多引擎只是针对某一特定类型的游戏或者演示而开发(如,第一人称射击游戏,地理场景漫游)。而OGRE是如此与众不同,在它的理念中设计总是先于功能的实现。每一个加入OGRE的特性,都经过了慎重的考虑,尽可能的完善设计并伴随完整的文档,这意味着新功能会完美的融入整个体系之中。它严格遵循着质量重于数量的原则,因为拥有良好的质量就具备了持续发展的可能,简单数量累积并不能解决这个问题。OGRE遵循面向对象的设计理念,并借鉴在商业领域广泛使用的设计模式等技术。我们的核心团队刻意的保持精简,他们所有人都是在真实世界中拥有多年软件工程经验的的工程师。同时也欢迎从社区中脱颖而出的人才加入到核心团队中来,但一定要经过严格的考核,确认他符合食人魔(Ogre)的精神-强壮且团结,这样才可以被接纳。在Ogre核心团队中这些专业且富有激情的工程师们来至众多领域,其中有商业软件工程师,游戏开发者,学术研究人员,甚至包括大型机器模拟仿真系统的开发人员。在他们没有做本职工作的时候,就会腾出时间来完善Ogre引擎。当他们没有完善Ogre引擎的时候,就会在Ogre的社区论坛或者官方聊天室中解答大家的问题。当这些核心开发人员没有在这里回答大家的问题的时候,同样有一群热心而活跃的社区用户来代替他们给新的Ogre使用者解答问题,也或者老的使用者们会相互交流。其中那些活跃的,经常为人们及时提供正确答案和建议的人将被选为Ogre MVP。使用Ogre所需的基本知识:虽然就算你不懂C+语言,也一样可以使用Ogre。因为很多非官方组织提供了Ogre API的各种语言接口或者封装,其中包括C#,Java,Python,Ruby等等。但是,他们并不属于Ogre核心的一部分,所以并不能保证他们拥有绝对的稳定性和完整性。Ogre使用的是遵守ISO标准的C+语言开发,Ogre核心开发团队并不能保证其他语言对其的绑定的兼容性。所以大多数的情况下,你需具有一定的C+知识来使用Ogre的全部特性。这并不意味着你一定要了解:什么是面向对象,什么是设计模式,如何用C+的方式来思考,甚至多态。这本书只需要你知道如何使Ogre API

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论