Demo_TextureFX分析

DEMO 的主要目的是说明如何使用 material 属性来创建运动的纹理。运动的纹理是与静态纹理相区别的,这里有多种运动的定义: 1. 通过定义多个帧,即多幅图片来描述纹理的运动。 2. 通过对纹理的旋转,缩放,滚动等操作。

主要函数有三个,分别是:createScalingPlane();createScrollingKnot(); createWateryPlane();它们的实现大同小异,下面跟踪分析第一个createScalingPlane(),看看OGRE内部到底是如何实现纹理的缩放。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

void createScalingPlane()
{
   // Set up a material for the plane
  
// Create a prefab plane

   Entity *planeEnt = mSceneMgr->createEntity("Plane",      
                      SceneManager::PT_PLANE);

  // Give the plane a texture
 
planeEnt->setMaterialName("Examples/TextureEffect1");

 

  // 挂接这个实体到场景树中
}

 

第一条语句是调用SceneManager
virtual Entity* createEntity(const String& entityName, PrefabType ptype);

函数,这个函数第二个参数是OGRE的预定义形状,目前只支持PT_PLANE,它从而又调用SceneManager中它的一个重载函数:
virtual Entity* createEntity(const String& entityName, const String& meshName);函数,把Prefab_Plane作为第二个参数传递进去。
这个函数就通过调用MeshManager载入指定模型,并以这个模型为参数创建一个Entity插入SceneManagerEntity集合,这个以后再分析。

 

现在我们着重分析第二条语句:
Entity:: setMaterialName(const String& name);
我们知道Material是由SubMaterial组成的,这个函数的实现也就是遍历它所有的SubMaterial并依次调用它们的setMaterialName。这个函数的实现是使用MaterialManager来根据传递进来的材质名字查询并返回材质,如果找不到,就返回一个默认的材质即一个全白的材质。然后载入这个材质,并通知它的父Entity重新计算材质的顶点操作(一些顶点/片断编程)。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />OGRE_Demo_TextureFX.PNG

以上是为我们先前的平面模型指定一个材质,那么材质在OGRE中是如何定义,又是如何工作的呢?这当然要从MaterialManager说起,MaterialManager继承于ResourceManager,拥有ResourceManager的所有功能,当然应用程序也是通过ResourceGroupManager来初始化它。MaterialManager自己有个成员变量MaterialSerializer,它用来解析脚本文件.material。并通过脚本的属性来产生新的材质实例。由于材质的脚本文件涉及几个类(material, techniquepasstexture_unit)的属性,所以它的实现比较复杂,没必要逐个分析。简单地介绍下这几个类的关系就好了:

materialtechniquepasstexture_unit这几个类是层层嵌套的,前面的类可以包含一个或多个后面的类,最基本的类就是texrue_unit。详见手册。

转载于:https://www.cnblogs.com/SweetDream/archive/2006/02/14/330283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值