现在的位置: 首页 > 综合 > 正文

Ogre:StaticObject和projective mapping

2013年02月10日 ⁄ 综合 ⁄ 共 1170字 ⁄ 字号 评论关闭

StaticObject
在场景中,通常所有物体都是被放在场景节点上的,每次渲染时都会根据物体的移动来更新维护场景树,这样是花费极大的效率的,所以,如果某些物体不必移动,那么可以不把他放在场景树上,这就是StaticObject,将你不必移动物体(如很多山、树)等做成静态物体,会大大提高效率,使用方法很简单:

首先用场景管理器创建一个静态物体

StaticGeometry* sg=smgr->createStaticGeometry("static ge");

然后在这个静态物体里放入你的entity,可以放很多

sg->addEntity(ent_l,Ogre::Vector3(0,0,0));

最后要调用

sg->build()就可以了

投影贴图

所谓投影贴图,可以想象成电影放映机或是投影仪,贴图就是胶片,头道的物体就是屏幕,投影效果会随着投射物和被投射表面的距离而变化,在ogre中的实现方式是这样的:

1先建立一个Frustum对象,代表这个投影仪,然后把它绑定在场景的一个节点上

Frustum* fru=new Frustum();
SceneNode* frunode=smgr->getRootSceneNode()->createChildSceneNode("fru node");
frunode->attachObject(fru);
frunode->setPosition(0,0,500);

2、设置接受物体的材质,使他接受这个投射纹理并与其表面纹理混合

 
       Pass* pass=mat->getTechnique(0)->createPass();//创建一个新通道
       pass->setSceneBlending(SBT_TRANSPARENT_ALPHA);//设置于上个通道的alpha混合
       pass->setLightingEnabled(false);

       TextureUnitState *texState = pass->createTextureUnitState("decal.png");//在这个通道设置一个纹理
       texState->setProjectiveTexturing(true, fru);//设置这个纹理为fru的投射纹理
       texState->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
       texState->setTextureFiltering(FO_POINT, FO_LINEAR, FO_NONE);//这个设置很重要

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/leonwei/archive/2010/07/30/5776534.aspx

抱歉!评论已关闭.