游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1253|回复: 0

Ogre内部渲染流程分析系列(2)(原创)

[复制链接]

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-2-28 10:29:00 | 显示全部楼层 |阅读模式
先说明OGRE内部重要的几个对象:

1.       RenderSystem,此抽象类定义出 3D 渲染系统的基本功能,同时实现了一些通用的方法。各个不同的渲染平台实现此类,OGRE 内部交互由此抽象类负责,从而实现了渲染平台无关性。应用一般不会与此对象直接进行交互,在OGRE内部的其他重要对象,如SceneManager与它进行交互,整个过程是透明的。

2.       SceneManager,组织场景中的对象并将对象送入渲染系统中渲染。这个类定义了场景管理器的基本功能,应用客户端根据自己需要重新实现场景的组织功能。这个对象掌控了所有的可渲染对象。

3.       RenderTarget , 定义:接受渲染操作结果的画布。此抽象类定义了基本的渲染目标属性和操作的功能。渲染目标可以是窗口、屏幕、或者离屏表面,如:渲染到一张纹理图等等。每个具体的渲染引擎需要实现自己的RenderTarget,如:D3D9RenderWindow,D3D9RenderTexture 等。这个抽象类包含了一个到多个的 ViewPort 对象,在渲染时会跌代更新每个ViewPort。

4.       ViewPort,定义:一块渲染目标区域。
说明:视口是相机和渲染表面的交集,并把这个结果放在整个渲染表面或者表面的一部分。每个视口都有一个相机作为源,一个目标作为目标。一个相机只有一个视口,但一个渲染目标可以有多个视口。视口有 z 序属性,如果渲染目标有多个视口,要对视口进行 z 排序.

5.       Camera,这个就不需要解释了吧,需要注意的是它与ViewPort 和SceneManager之间的关系。

6.       SceneNode,这个类从Node继承过来,除了自身是一个树形结构之外,它还可以附加多个可移动对象(MoveableObject),这样他可以与世界中的所有可移动对象(比如实体对象)关联起来。

7.       Entity,定义了一个离散的、基于 mesh 的可移动对象的实例。

OGRE 通常将可渲染对象分为2组,一是在世界中移动的离散的极其相关小对象。一种是大规模的杂乱的通常组成静态场景的对象。

Mesh 和 SubMesh 处理那些在离散的可移动对象中使用的图元的定义。Entity 在世界中是真正的基于这种图元的对象的实例,因此对于一个汽车来说它就是一个独立的网格集合,但是在世界中可以有多个基于相同网格集合的实体,这些实体可以改变网格的外在表现,例如通过改变材质属性(这样你就可以在相同的图元数据上用不同的纹理来拥有不用的小汽车),为了这个目标,因为 Mesh 被分成多个 SubMesh,所以实体类是一个分组的类(与Mesh类很相似)并且相关的独立的个体改变的细节信息被保存在 SubEntity 类中。这是1:1的关系,Entity 与 SubEntity及其关联的 Mesh 和 SubMesh。

实体和子实体都不会被直接的创建出来,用 SceneManager 的 createEntity (传递一个模型的名字)方法来创建他们。

实体是被关联他们的场景节点对象包含在场景中的,使用 attachEntity方法关联,参照 SceneNode 类的说明或取完整的信息。

8.      RenderQueue,定义了渲染队列,此队列中包含了按照材质排序的可渲染对象,这样会使渲染状态的切换最少,它包含了一组RenderQueueGroup对象

9.       RenderQueueGroup,渲染队列组,按照渲染的优先级别排列的渲染对象列表。

10.   RenderPriorityGroup,渲染优先级分组,包含的所有的渲染对象都具有相同的优先级。分出透明对象和非透明对象及其它渲染方式对象,使渲染状态切换最小。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 17:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表