Pro OGRE 3D Programming学习系列(1)设计总揽

因为书中前两章内容主要是讨论Ogre的历史和安装方法,感兴趣可以查阅,就不在本学习系列中讨论了。

 

1.如何开始

 Ogre是个非常庞杂的系统,所以一开始就去学习他的API手册,应该不是一个很好的选择,就如同我们学习.net,不会一上来就去啃.net API大餐一样。基本上我们可以选择性的运行几个Demo,有了基本的认识,就可以开始有针对性的学习一下Ogre的整体知识了。

 

2.设计理念

 如今软件开发的发展趋势是不多的抽象,将人的思维从繁杂的技术细节解放出来。在游戏界也是一样,如果我们使用DirectX或者OpenGL来开发游戏,需要关注很多底层的细节。换句话说,通过面向对象的技术(其实就是封装的概念),Ogre将很多图形显示方面的操作,例如顶点列表,三角形列表和旋转矩阵,变成为了直接对物体的空间位置的转换。这样使得我们容易理解和操作。

 

3.设计模式

 Ogre中有很多地方使用到了设计模式。例如,Ogre使用观察者(Observer)模式将自己的每一个状态变化通知给应用程序,客户代码通过注册来监听Ogre中事件和状态的改变来得到相应通知(例如演示程序中使用的FrameListener对象,可以监听到应用程序每一帧渲染的开始和结束事件)。单件模式(Singleton)用来保证一个类只有一个实例,迭代器模式(Iterator)用来历遍一个数据结构中的所有数据。访问者模式(Visitor)可以让你在不改变对象(例如,场景中所有节点)的前提下,增加定义一个新的对象的操作。外观模式(Façade)为子系统中的一组操作接口报漏给调用层一个统一的接口。最后,工厂模式(Factory)(以及它的近亲抽象工厂模式,Abstract Factory)广泛的用来创建抽象接口的实例。

 

所以如果我们熟悉设计模式的概念也有助于我们对Ogre的理解。

 

4.场景图和场景内容

  据说这是Ogre在设计中的一个亮点,个人理解,就是将要想使的内容和需要显示的底层技术分离开了。如果底层技术(场景内容的显示)发生变化,上层(场景图)调用接口和逻辑是不需要改变的。这实际上就是通过一个抽象层或者接口,将底层变化隔离开了。属于比较OO的做法。

5.插件系统

 插件系统的特点就不需要多作说明了,可以灵活地将系统所需的组件进行挂接,而不需要重新编译整个程序。

6.渲染队列

 Ogre将需要渲染的对象存放到一个有序队列中。这里可以回顾一下有序队列的概念。在这里,每个队列都有一个优先级,但是队列里面的对象,也有自己的优先级。这样我们就可以灵活的控制渲染的顺序。(问题是我们需要手动的控制渲染顺序么?如果需要,在什么场景下面需要这么做?还是说仅仅为了满足一个灵活结构的设计需要?)

7.材质系统

 不是很理解这部分内容,以后回来再补充好了。

8.模型和骨骼

 关于这个方面,Ogre用了“独特”这个词。其实就是Ogre不能接受其他很多商业游戏中的模型,只能使用特定的模型和骨骼文件。但是Ogre得官方网站上提供了转换工具。所以,这应该是Ogre的一个不足之处,被说成了“独特”,看来什么东西吹一吹就变好了。

9.动画类型

 目前支持3种动画方式,包括骨骼动画,变形动画,姿态动画。目前也不是很了解这些动画的具体含义,以后再补充。

10.合成器后处理技术

 以后补充。

11.可扩展的资源管理

 如果我们想将游戏需要得资源进行归类,可以通过命名组的概念来实现。其作用有点类似命名空间的感觉,便于资源的组织和访问。

1.场景管理器(SceneManager)

还记得之前说过的场景图和场景内容分离的topic么?不记得了?看这里。简单来说,我们需要在屏幕上画物体,就要用到场景管理器。他可以创建场景节点(SceneNode)。通过场景节点,我们可以控制物体的方位和朝向。也可以进行放大缩小和旋转等操作。注意:场景节点可以出现在不同的场景中。这也就是说,场景节点和场景不是绑定的关系,可以动态添加。

当然了,光是有位置信息是不够的,还需要有物体本身的信息。这个时侯就要提到Entity的概念了。一般来说我们通过载入mesh文件来创建Entity。然后将Entity挂接到(其实Entity就是SceneNode对象的一个引用)SceneNode。

除了SceneNode,我们还可以挂接其他的特殊的节点到场景中,例如Camera,Light对象。个人感觉,这里的设计有点别扭,如果以后还会出现很多特殊的节点对象,Ogre是不是都要创建一个新的子类?为什么不能让Camera,Light成为SceneNode的子类,使得程序更灵活?

2.其他的管理器


·日志管理器(LogManager):发送日志信息给输到出流,也可以把信息送到需要使用的代码中去。

 

·控制器管理器(ControllerManager):对控制器(Controller)进行管理,所谓控制器,就是基于变量输入来改变其他类状态的工具类;常用于对动态纹理(Animating Textures)和材质的控制。

 

·动态链接库管理器(DyLibManager):负责管理动态链接库(Windows上的DLL,Linux上的共享对象),是Ogre插件体系实现的基础。也会在关闭系统时候卸载库。

 

·平台管理器(PlatformManager):用于对不同硬件和操作系统抽象出来具体的通用对象进行管理。比如其中包括了计时器(Timer)和不同的窗体(例如启动Ogre时用来配置渲染系统的对话框)。

 

·合成器管理器(CompositorManager):用于管理合成器,以便在屏幕空间实现2D后处理特效。

 

·档案管理器(ArchiveManager):管理档(Archive)所使用的不同“容器”,例如ZIP文件或者系统目录。

 

·粒子特效管理器(ParticleSystemManager):管理粒子特效,以及维护发射器和效果器的实现和细节。

 

·材质管理器(MaterialManager):维护应用程序中所有已经载入的材质,并允许不同对象共享同名的材质实例。

 

·骨骼动画管理器(SkeletonManager):维护应用程序中所有已经载入的骨骼动画,并允许不同的模型共享骨骼动画实例。

 

·模型管理器(MeshManager):维护应用程序中所有已经载入的模型,并允许不同实体共享同名的模型对象实例。

 

·高级GPU程序管理器(HighLevelGpuProgramManager):维护,载入,以及编译程序中所有使用的高级GPU着色程序(包括HLSL,GLSL或者Cg写的GPU程序)。

 

·GPU程序管理器(GpuProgramManager):维护和载入汇编语言的GPU程序,也可以支持高级GPU程序编译成的汇编着色语言。

 

·外部纹理资源管理器(ExternalTextureSourceManager):管理外部贴图源类的实例,例如那些使用外部视频流生成的即时纹理。

 

·字体管理器(FontManager):管理和载入用于表层(Overlay)中文本渲染的字体。

 

·资源组管理器(ResourceGroupManager):作为“接触点”,用于载入和管理已经注册的应用程序资源,比如模型和材质。

 

·表层管理器(OverlayManager):管理载入和创建2D层类的接口,通常用于HUD,GUI或者其他渲染到场景最上层的2D内容。

 

·硬件缓存管理器(HardwareBufferManager):管理硬件缓存(像素缓存,顶点缓存,索引缓存等)。

 

·纹理管理器(TextureManager):管理应用程序中的纹理的索引和载入。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tanliyoung/archive/2009/02/26/3939367.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值