Ogre:StaticObject和projective mapping、

  1. 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);//这个设置很重要

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值