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

时间: 2024-11-15 23:27:03

Ogre:StaticObject和projective mapping、的相关文章

OGRE材质

"材质(material)",材质是一个很基本的术语,表示你的物体对光的反射方式.但是对它的实现并不像其解释这样简单,我们会用这一章节进行详细地介绍Ogre中相关的技术. 我们刚才提及过,材质定义了物体对光线反射的处理方法.这里暗示了材质的表现与光源的类型相关:聚光(Spotlights).点光源(point lights)以及有向光(directional lights)对材质的表现有着完全不同的影响.简单来讲,它们都是对物理世界真实光源类型的模拟,所以材质对它们的反射也遵守着其在物

使用Flash实现Bump Mapping的效果

1.  下面先来简单的介绍一下什么叫作Bump Mapping.Bump Mapping又叫做凹凸贴图,在现在的图形处理以及游戏当中非常流行(大家应该都玩过Halflife-2或者Doom吧?).凹凸贴图与普通贴图最大的区别是,凹凸贴图中的每个象素不仅代表着点的颜色,还代表着这个点凹凸的程度. 所以凹凸贴图(Bump Mapping)也经常被用来渲染一些看上去比较复杂的材质,比如凹凸不平的路面.生锈的铁罐.人类的皮肤还有剥落的墙面等等.下面是一张凹凸贴图的效果图, 它是由一张Bump Map(凹

OGRE 1.7 例子程序分析

如果你自己都不清楚所谈论的东西,就根本不可能精确的描述它--冯诺依曼   今天我就试着来表述一件众人皆知的事情,以测试自己到底有没有明白这件事情.   OGRE是著名的设计模式大师,这已是不争的事实.可以说OGRE里将设计模式用得淋漓尽致.在这里我就不批判设计模式该不该用了.反正OGRE已经用了,并且没有出现什么不好的结果.适合的就是最好的,OGRE证明了这一点.   随着OGRE  1.7的发布,大家熟悉的DEMO程序不见了,换来的是一个个的DLL库.而这些库,就是作为OGRE的一个插件而存在

我的O/R Mapping实际开发经验之谈(一)

一.概述 O/R Mapping全称Object Relational Mapping,就是对象关系映射.把对表直接进行的操作,变成对持久化类的属性和方法的直接操作. 很多的项目是基于数据库的开发,程序中要大量进行表的增.删.改.查询的工作. 例如下面一段C#代码,从数据库CustomerDemo取表Customer数据: string ConnectionString = "data source=WILLIAM;persist security info=True;initial catal

三、现有的O/R Mapping产品介绍

接上) 具体过程如下: (1)首先建立数据库配置文件,我们在这里定为database.xml,当然也可以改成是其它名字. <?xml version="1.0" encoding="gb2312"?> <database name="CustomerDemo" engine="mysql"> <driver url="jdbc:mysql://cwb:3306/quickstart&qu

我的O/R Mapping实际开发经验之谈(二)

三.现有的O/R Mapping产品介绍 O/R Mapping已经出现很久了, 产品很多:Java方面的有Hibernate.jdo等..Net的有ObjectSpaces.Grove.Net.OJB.Net.AtomsFramework.Objectz.Net.OPF.Net等. 1.Hibernate Hibernate是一个java开放源代码的O/R Mapping,它对JDBC进行了轻量级的对象封装,可以非常灵活的用对象编程思维来操纵数据库.现在以一个简单的demo看下Hibernat

3D编程:Displacement Mapping(移位贴图)

Displacement Mapping(移位贴图) Normal maps的另一个应用是displacement mapping,在这个应用中,细节的增加不再是通过虚拟光照得到的,而是真正的改变模型的vertices.使用displacement mapping时,vertex沿着它的法线向量平移,该法线的值由一个displacement map指定.一个displacement map就是一个高度纹理图,只有一个通道值,并且存储了高度的大小.图9.4就是本章一直使用的stone wall t

3D编程:第九章 Normal Mapping and Displacement Mapping

第九章 Normal Mapping and Displacement Mapping 本章主要讲述两种图形学技术,支持在不增加objects的poly primitive的情况下,在场景中增加更多的细节.第一种是normal mapping,通过创建一些"fake" geometry(虚设的多边形图元)模拟光照作用.第二种是displacement mapping,根据纹理数据moving vertices actually(与"fake"相对应,这里指真实的移动

3D编程:Environment Mapping

Environment Mapping Texture cubes的另一种应用是environment mapping.Environment mapping也称为reflection mapping,用于近似模拟reflective surfaces(反光表面),比如汽车上的镀了一层金属物的保险杠. Environment mapping的处理过程比skybox稍微复杂一些,因为需要计算光线与表面的反射向量.反射向量主要由view direction(限入射角向量)和表面的法向量计算得到.具体