ogre3D学习基础7---材质详解

物体着色的基础 --- 四种不同光照作用

  1、环境反射

  近似的模拟了场景中的全局辐射,也就是用来近似模拟所有光在场景中不断散射的结果。材质中有相应的属性来代表这种环境反射颜色。

  2、漫反射

  这种颜色是接收到直接从光源发射的光之后产生的,“漫反射”和现实中的意思一样,就是描述光被物体反射到多个方向的效果。

  3、放射

  指的是自发光物体所拥有的颜色。具体意思就是放射光只能照亮自己却不能对周围任何物体产生影响。这种光很奇怪的,现实中没有的。

  4、镜面反射

  描述了物体对被光照后的“高光”效果。这个也比较抽象。

纹理贴图(Texture Mapping)

  可以用程序把纹理通过一个独立的坐标系映射到一个物体上。

可编程着色技术(Programmable Shading

  Ogre支持所有风格的GPU着色语言,其中包括低级的汇编和诸如CgGLSLHLSL这种高级语言。

批次(Batching

   Ogre最基本的渲染单元被称为可渲染对象(Renderable),它们通过不同的渲染状态被分类传递到渲染队列中去。而一次渲染状态的改变就是一个批次

材质克隆

 Ogre中材质是被所有引用所共享的。所以同一时刻可能有多个指针指向同一个材质,如果每个指针都有状态变化,那只能自己克隆一份材质,单独处理。

GPU着色

  GPU(图形处理器)在设计之初就有着明确的目标,提供高性能的并行向量计算以供针对3D图形处理使用。GPU的存在是为了减少CPU(中央处理器)的工作压力,使用者负责分配具体的计算工作给它们。因此,需要有计划再在设计中的管线加入可编程着色技术,尤其是当将要计划使用实时阴影技术或者更高级的渲染到纹理(Render-to-Texture)技术的时候更需要这方面的支援。

 

材质的例子

  最简单的Ogre材质可定义如下:

 1 material VerySimple//材质
 2 {
 3    technique//技术
 4     {
 5       pass//通道
 6       {
 7         diffuse 0.5 0.5 0.5    //
 8       }
 9     }
10 }     

  当然也可以加上纹理贴图:

material Examples/EnvMappedRustySteel
{
    technique//技术
    {
       pass
       {
         texture_unit Diffuse//纹理贴图1
         {
           texture RustySteel.jpg//纹理图片
     }

     texture_unit Environment//纹理贴图2
     {
           texture spheremap.png//纹理图片
           colour_op_ex add src_texture src_current
           colour_op_multipass_fallback one one
           env_map spherical
     }  
    }
  }
} 

纹理覆盖(Texture Aliases

  在很多情况下,派生材质的目的可能只是需要改变已有脚本中的纹理图片。这时候可以通过简单的纹理覆盖机制来实现。代码实现如下:

 

1 material Examples/EnvMappedCompressedRustySteel : Examples/EnvMappedRustySteel
2 {
3          set_texture_alias Diffuse rustySteel.dds //
4          set_texture_alias Environment aphereMap.dds//
5 }

 

posted @ 2013-09-01 18:01  struggle_time  阅读(1486)  评论(0编辑  收藏  举报