关于 OGRE 中的 Renderable
要理解OGRE引擎,就要理解其中占很重要位置的 Renderable接口,今天先将一部分我分析的内容贴出来。
以下是 Ogre 的代码中的详细说明:
Renderable是OGRE中所有可渲染对象的抽象接口
这个接口抽象出了在渲染管线中的被分组的离散的可渲染对象基本的方法。
此接口的实现类必须是基于单一的材质、单一的世界矩阵(或者是一组通过权重混合的世界矩阵),以及单一的渲染操作。
通过这个说明,应该能明确的是,Renderable 封装了3D世界中被渲染对象的基本属性和数据,这包括:渲染操作,材质属性,光照信息、变换矩阵(四元组)、LOD信息、渲染方式等信息。这些信息在渲染循环中被取出,并应用在图形渲染管线中。其中需要注意的是RenderOperation(渲染操作)对象,它封装了图形硬件的顶点数据和渲染的图元类型,在最终的渲染操作里使用这些数据来进行图元渲染,值得注意的是 RenderOpration 中的保存的顶点信息的类VertexData中是抽象的,它包含了一组硬件顶点缓存数据对象-HardwareVertexBuffer,这个类是从 HardwareBuffer 中继承过来的,这个类包括了 hardware buffer中的抽象操作方法,这里使用了模板方法和抽象工厂等设计模式,每个具体的渲染系统可以实现自己的硬件缓存数据,当然,这当中也一定有HardwareBufferManager,而且具体的渲染系统也要实现这个类,来创建具体的渲染系统相关的数据缓存。
先说明OGRE内部重要的几个对象:
1. RenderSystem,此抽象类定义出 3D 渲染系统的基本功能,同时实现了一些通用的方法。各个不同的渲染平台实现此类,OGRE 内部交互由此抽象类负责,从而实现了渲染平台无关性。应用一般不会与此对象直接进行交互,在OGRE内部的其他重要对象,如SceneManager与它进行交互,整个过程是透明的。
2. SceneManager,组织场景中的对象并将对象送入渲染系统中渲染。这个类定义了场景管理器的基本功能,应用客户端根据自己需要重新实现场景的组织功能。这个对象掌控了所有的可渲染对象。
3. RenderTarget , 定义:接受渲染操作结果的画布。此抽象类定义了基本的渲染目标属性和操作的功能。渲染目标可以是窗口、屏幕、或者离屏表面,如:渲染到一张纹理图等等。每个具体的渲染引擎需要实现自己的RenderTarget,如:D3D9RenderWindow,D3D9RenderTexture 等。这个抽象类包含了一个到多个的 ViewPort 对象,在渲染时会跌代更新每个