Ogre的材质(Material)
基本概念:
Material类包括以下几类属性:
1.
2.
3.
4.
5.
6.
7.
8.
9.
其中2的纹理层可以有多个,Ogre在Material类的内部定义了TextureLayer类
纹理层:
材质管理器
MaterialManager类负责管理Material库,和材质相关的类图如下:
MaterialManager还负责分析Material脚本(Material Script),从而初始化Material的属性。
Ogre的材质脚本:
Ogre提供的材质脚本可以帮助开发者简单的设置又酷又炫的材质特效,而不用重新编译。当然也可以使用Material和TextureLayer类提供的诸多成员函数来做到,但这样明显是不实用的。
材质脚本的关键字说明:
Ambient
格式:ambient <red><green><blue>
正确的参数在0.0到1.0之间取值,直接影响物体材质对环境光反射能力,默认值为白色(1.0 1.0 1.0)
Diffuse
格式:specular <red><green><blue>
正确的颜色参数在0.0和1.0之间取值,shininess属性可以是任何正数,直接影响物体材质的镜面反射属性。默认值为镜面反射(0.0 0.0 0.0 0.0)
Specular 设置材质的镜面反射属性
格式: specular <red> <green> <blue> <shininess>
正确的颜色参数在0.0 和1.0 之间取值,shininess 属性可以是任何正数。直接影响物体材质
的镜面反射属性。默认值为无镜面反射(0.0 0.0 0.0 0.0)。
Emissive
格式:emmissive<red><green><blue>
正确的颜色参数在0.0到1.0之间取值,如果一个物体会自发光,他将不需要外界的照明,但是,值得注意的是这不表明这个物体会成为一个光源:它只会照亮自己。默认是黑色(0.0 0.0 0.0)
Scene_blend 设置与场景的混合方式,有两种形式
1.
这个格式比较简单常用
Add——渲染的结果将被以相加的方式加入到场景之中,与Scene_blend one one 等价,对爆炸,火焰,光照,幽灵等效果比较好。
Modulate——渲染的结果与场景相乘。对烟、玻璃杯和单个的透明效果很好。与scene_blend src_color one_minus_src_colour等价
Alpha_blend——渲染结果中的Alpha成员将被用作遮罩,与scene_blend src_alpha one_minus_src_alpha等价
2.
这个格式比较麻烦,但是比较完善。结果的计算公式为(texture*sourceFactor)+(scene_pixel*destFactor)其中sourceFactor和destFactor如下:
One——常数1.0
Zero——常数0.0
Dest_colour——当前点的颜色
Src_colour——纹理对应点的颜色
One_minus_dest_colour——1-(dest_colour)
One_minus_src_colour——1-(src_colour)
Dest_alpha——当前点的Alpha值
Src_alpha——纹理对应点的Alpha值
One_minus_dest_alpha ——1-(dest_alpha)
One_minus_src_alpha——1-(src_alpha)
默认值:scene_blend one zero(不透明)
3.
格式:cull_hardware<clockwise|anticlockwise|none>
默认顺时针Cull,这与OpenGL的默认是一样的,但是和D3D的默认相反,(因为Ogre用的是OpenGL采用的右手坐标系)
4.
格式:cull_softwate<back|front|none>
默认背面。相当于硬件cull模式的顺时针
5.
设置动态光照是否为此材质打开。如果关掉,将使得材质本身的所有ambient,diffuse,specular,emissive和shading属性无效,仅仅与外界的光照有关。
格式:lighting<on|off>
默认:lighting on
6.
格式:shading<flat|gouraud|phong>
Flat——每个表面仅仅用一个颜色填充
Gouraud——线性过渡表面颜色
Phong——并非所有的硬件都支持,这种模式测定每一个顶点的颜色。
默认:shading gouraud
7.
格式:filtering<none|nilinear|trilinear>
默认是双线性的(bilinear)
8.
1)
格式:texture<texturename>
无默认值,必须指定一个纹理名
2)anim_texture 动画纹理
设置动画纹理使用图片文件名
格式1(短的)anim_texture<base_name><num_frames><duration>
指定一个图片名称,以这个名称后缀_1、_2一直到_num(由num_frames指定),duration指定间隔时间。
格式2(长的):anim_texture<frame1><frame2>…<duration>
一个一个指定图片名称,duration指定间隔时间