Ogre的材质

Ogre的材质(Material

基本概念:

         为了优化渲染,必须把渲染状态的变化减小到最小,而最频繁的渲染状态改变是材料的变化(大多数是纹理的变化)。

         OgreMaterial类封装了物体的所有材料属性,类似于3D Studio中的material的概念,平时不被认为是属于材料的属性,像Culling模式和深度缓存设置等等,也被Material包含进来,因为这些属性同样影响了物体的外观,把他它们放到Material类里可以集中设置所有影响物体的属性。这和D3D中只保存颜色组件而没有纹理映射的Material有明显的不同。OgreMaterial可以被认为是Shader的等同物。

Material类包括以下几类属性:

1.       基本的表面材质属性,如不同的颜色反射率,Shininess等等;

2.       组成Material的纹理层

3.       纹理之间的混合(blend)方式

4.       深度缓冲设置

5.       Culling模式

6.       纹理过滤方式(三线性过滤,双线性过滤);

7.       是否受光照影响

8.       Shading选项

9.       雾化

其中2的纹理层可以有多个,OgreMaterial类的内部定义了TextureLayer

纹理层:

 一个纹理层可以是一副静止的图像,也可以是一副以某种方式运动的图像,还可以使由多幅图像组成的动画。它可以实现多种纹理特效,如BUMPMAP、纹理贴图、运动的纹理。

材质管理器

MaterialManager类负责管理Material库,和材质相关的类图如下:

Ogre的材质

MaterialManager还负责分析Material脚本(Material Script),从而初始化Material的属性。

Ogre的材质脚本:

Ogre提供的材质脚本可以帮助开发者简单的设置又酷又炫的材质特效,而不用重新编译。当然也可以使用MaterialTextureLayer类提供的诸多成员函数来做到,但这样明显是不实用的。

         Ogre材质脚本的默认扩展名为.material,你也可以通过MaterialManager类的parseAllSources方法来规定新的扩展名。系统初始化时会自动所有的额材质脚本文件,并设置材质的属性。注意,这里面只设置了材质的属性,并不会将材质的纹理调入内存,因为那样会招致加大的内存消耗。

材质脚本的关键字说明:

Ambient  设置材质的环境光反射属性

格式:ambient <red><green><blue>

正确的参数在0.01.0之间取值,直接影响物体材质对环境光反射能力,默认值为白色(1.0 1.0 1.0

Diffuse     设置材质的漫反射属性

格式:specular <red><green><blue>

正确的颜色参数在0.01.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.01.0之间取值,如果一个物体会自发光,他将不需要外界的照明,但是,值得注意的是这不表明这个物体会成为一个光源:它只会照亮自己。默认是黑色(0.0 0.0 0.0

Scene_blend 设置与场景的混合方式,有两种形式

1.  scene_blend<add|modulate|alpha_blend>

这个格式比较简单常用

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.  scene_blend<src_factor><dest_factor>

这个格式比较麻烦,但是比较完善。结果的计算公式为(texture*sourceFactor+scene_pixel*destFactor)其中sourceFactordestFactor如下:

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 设置硬件cull模式

格式:cull_hardware<clockwise|anticlockwise|none>

默认顺时针Cull,这与OpenGL的默认是一样的,但是和D3D的默认相反,(因为Ogre用的是OpenGL采用的右手坐标系)

4.  cull_software 设置软件cull模式

格式:cull_softwate<back|front|none>

默认背面。相当于硬件cull模式的顺时针

5.  lighting 光照

设置动态光照是否为此材质打开。如果关掉,将使得材质本身的所有ambientdiffusespecularemissiveshading属性无效,仅仅与外界的光照有关。

格式:lighting<on|off>

默认:lighting on

6.  shading阴影模式

格式:shading<flat|gouraud|phong>

Flat——每个表面仅仅用一个颜色填充

Gouraud——线性过渡表面颜色

Phong——并非所有的硬件都支持,这种模式测定每一个顶点的颜色。

默认:shading gouraud

7.  filtering 设置纹理过滤方式

格式:filtering<none|nilinear|trilinear>

默认是双线性的(bilinear

8.  Texture Layer专用属性

1) Texture 设置纹理要使用的图名

格式: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指定间隔时间

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值