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
这是所管理的Pass集合。
[cpp]
view plaincopyprint?
/// LOD level
unsigned short mLodIndex;
/// Scheme
unsigned short mSchemeIndex;
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的管理,设置相应的监听等操作。还负责读取材质脚本、初始化材质资源。
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的管理,设置相应的监听等操作。还负责读取材质脚本、初始化材质资源。
相关文章推荐
- Ogre引擎源码——资源之Skeleton
- Ogre引擎源码——资源之Skeleton
- Ogre引擎源码——资源之GpuProgram
- Ogre引擎源码——资源之GpuProgram
- Ogre引擎源码——资源之Font
- Ogre引擎源码——资源之Skeleton
- Ogre引擎源码——资源之Font
- Ogre引擎源码——资源之Skeleton
- Ogre引擎源码——资源之Font
- Ogre引擎源码——资源之GpuProgram
- Ogre引擎源码——Timer
- 在Ogre中使用Havok物理引擎(源码)
- Ogre引擎源码——String
- ogre 引擎 框架追踪 第三章 资源加载之虚加载
- Ogre引擎源码——场景查询
- ogre 引擎 框架追踪 第五章 资源加载之实加载
- 转: 在Ogre中使用Havok物理引擎(源码)
- 在Ogre中使用Havok物理引擎(源码)
- ogre 引擎 框架追踪 第四章 资源加载之资源组初始化
- Ogre引擎源码——文件管理