ResouceManager 模块负责资源的创建和管理。在图形系统中,需要用到很多资源,比如mesh模型,材质(Material), 纹理(Texture)等等。 下面详细介绍一下ResourceManager模块里几个主要的部分。
HardwareBufferManager
HardwareBufferManager负责创建和管理HardwareBuffer。 HardwareBuffer是指GPU 中的buffer。最常见的就是VertexBuffer和IndexBuffer。此外,VertexBuffer需要一个顶点的格式声明(VertexDeclaration) 来定义Vertex的数据格式和布局(比如每个顶点有哪些元素(位置,法向量等),元素的布局是怎么样)。VertexBuffer中的一部分或者全部可以组成一个VertexData对象,它通过指定VertexBuffer,对应的VertexDeclaration, 起始顶点位置和包含顶点个数来定义。 类似的,IndexData的一部分或全部可以组成一个IndexData对象。 VertexData和IndexData是组成Mesh的元素。下面分别是HardwareBuffer和HardwareBufferManger的类关系图:
HardwareBufferManager 提供的接口:
1) 创建VertexBuffer
2) 创建IndexBuffer
3) 创建顶点格式声明(VertexDelaration)
MeshManager
Mesh就是实体(Entity)的网格模型,描述了实体的形状。通常mesh模型是美工人员通过3D建模工具(3dmax, maya 等)创建出来并保存到成特定的文件格式(例如.3ds)。 MeshManager的职责就是载入解析模型文件并生成Mesh对象。 目前的MeshManager使用了OGRE的.xml的mesh文件格式。 类XMLMeshSerializer负责mesh文件的载入。 每个Mesh可以包含一个或多个SubMesh。SubMesh是Mesh的最小组织单元,同时也是最小的绘制单元(在RenderSystem部分会讲到), 它包含了一份VertexData和一份IndexData。下图是Mesh的类图:
MeshManager 提供的接口:
1) 从mesh文件中载入Mesh对象
MaterialManager
Material定义了实体的显示属性。 狭义的Material指的是物体对光照的反射系数(漫反射,镜面反射等)。 现在随着图形管线的可编程性越来越高,通过不同的shader就可以达到不同的效果,而不再局限于光照反射系数和纹理贴图了。所以在TinyRenderEngine中,Material被定义成广义上的定义物体显示效果的对象,它包括Shader,纹理以及一系列Shader的参数等。目前TinyRenderEngine中的Material实现就是D3D中的Effect以及其中的参数变量。
MaterialManager 提供的接口:
1) 创建Material
TextureManager [not completed yet]
由于时间关系,还没有完成对Texture的支持。 待加...