您的位置:首页 > 其它

Ogre引擎源码——资源之Material

2012-09-21 06:16 591 查看
http://blog.csdn.net/hunter8777/article/details/6333858





Ogre中资源有以下几种:Texture、Compositor、Font、GpuProgram、Material、Mesh、Skeleton、BspLevel

本文聚焦于材质资源Material。DirectX、Opengl中的材质含义为物体的光学属性,如高光和漫反射光的颜色等。但在Ogre中,材质类所包含的概念更大,涵盖了纹理等设置的信息。从某种意思上来说,Ogre中的Material更接近于Shader 的概念。



Ogre中的材质资源相关头文件如下:

OgreMaterial.h

OgreMaterialManager.h

OgrePass.h

OgreTechnique.h





Material、Technique和Pass的UML关系图如下



从图中可以看出,Ogre中的材质是按三个层次来管理的。

最底层的是Pass(通路),Pass是Ogre最基本的绘制单元。

管理Pass的是Technique(技术),Technique是一组用来绘制一个特定材质的方法。

管理Technique的就是Material了,Material封装了对于一个物体而言的所有可视效果。



下面就逐一来解读下Ogre的材质结构。



(1)Pass

在Ogre中,Pass是最基本的绘制单元,同时也是Renderable(可绘制对象)用来标识自己绘制状态的基本单元。

Pass中与自身在材质结构中相关的成员变量有

[cpp]
view plaincopyprint?

Technique* mParent;
unsigned short mIndex; // pass index

String mName; // optional name for the pass

uint32 mHash; // pass hash
bool mHashDirtyQueued; // needs to be dirtied when next loaded

[cpp] 
view plaincopyprint?

typedef vector<Pass*>::type Passes;  
/// List of primary passes   
Passes mPasses;  

typedef vector<Pass*>::type Passes;
/// List of primary passes
Passes mPasses;


这是所管理的Pass集合。



[cpp]
view plaincopyprint?

/// LOD level
unsigned short mLodIndex;
/// Scheme
unsigned short mSchemeIndex;

[cpp] 
view plaincopyprint?

typedef map<unsigned short, Technique*>::type LodTechniques;  
typedef map<unsigned short, LodTechniques*>::type BestTechniquesBySchemeList;  

typedef map<unsigned short, Technique*>::type LodTechniques;
typedef map<unsigned short, LodTechniques*>::type BestTechniquesBySchemeList;




LodTechniques是将距离与相应的Technique进行绑定。

BestTechniquesBySchemeList则是将Scheme与相应的LodTechniques绑定。



Material中管理Technique的数据结构如下:

[cpp]
view plaincopyprint?

typedef vector<Technique*>::type Techniques;
/// All techniques, supported and unsupported

Techniques mTechniques;
/// Supported techniques of any sort

Techniques mSupportedTechniques;

typedef vector<Technique*>::type Techniques;
/// All techniques, supported and unsupported
Techniques mTechniques;
/// Supported techniques of any sort
Techniques mSupportedTechniques;

可以看到,Material保存两份Technique的集合,mTechniques是当资源导入以后就保存的一份集合。而mSupportedTechniques则在每次编译之前清空,根据当前硬件的环境要求,来选择硬件支持的Technique。



还值得一提的是,在Pass、Technique和Material中,大部分的成员函数就是用来设置Pass中的绘制状态。设置的过程往往是从上至下传递的,也就是从Material->Technique->Pass的流程进行设置。当底层有需要进行重新编译的请求,都会发送给Material,然后再从Material至下,一步一步地编译所有材质资源。

(4)MaterialManager

继承自ResourceManager,对Material进行管理。主要实现了对纹理过滤的设置、Scheme的管理,设置相应的监听等操作。还负责读取材质脚本、初始化材质资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: