资源描述:
《Ogre6中级教材》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、文档:教程:中级教程:中级教程六出自Ogre3D开放资源地带跳转到:导航,搜索目录[隐藏]·1介绍·2准备开始·3起始代码·4投影贴图o4.1平截头体(Frustums)o4.2修改材质o4.3调用函数·5消除反向投影o5.1介绍o5.2修改投影器o5.3修改材质·6炫耀一下投影o6.1简单的旋转o6.2修改视线范围·7最后要注意的[编辑]介绍在这一课里,我们将介绍如何为场景中的一个物体添加投影贴图。投影纹理是非常有用的,比如你想要一个类似地面上的选择指示器,或者你正在瞄准的瞄准镜,或者投射在某个物体上的其它贴图。下面的截图是一个大家都喜爱的ogre头像,它被投影了一个瞄准器:[[
2、1]]你能在这里找到本课的代码。当你学习本课时,你应该逐个地往你的工程里添加代码,编译并观察结果。[编辑]准备开始开始之前,我们需要两张新图。右击这两个链接,并保存到Ogre可以找到的地方:[decal.png][decal_filter.png]最好放在media/materials/textures目录下(对于大多数人,是在OgreSDK目录里)。[编辑]起始代码用你喜爱的IDE创建一个cpp文件,并添加如下代码:#include"ExampleApplication.h"//AFrameListenerthatgetspassedourprojectornodeanddeca
3、lfrustumsotheycanbeanimatedclassProjectiveDecalListener :publicExampleFrameListener{public:ProjectiveDecalListener(RenderWindow*win,Camera*cam,SceneNode*proj,Frustum*decal) :ExampleFrameListener(win,cam),mProjectorNode(proj),mDecalFrustum(decal),mAnim(0){}boolframeStarted(constFrameEvent&evt){
4、returnExampleFrameListener::frameStarted(evt);}protected:SceneNode*mProjectorNode;Frustum*mDecalFrustum;floatmAnim;};classProjectiveDecalApplication :publicExampleApplication{protected:SceneNode*mProjectorNode;Frustum*mDecalFrustum;Frustum*mFilterFrustum;voidcreateScene(){//SetambientlightmSce
5、neMgr->setAmbientLight(ColourValue(0.2,0.2,0.2));//CreatealightLight*l=mSceneMgr->createLight("MainLight");l->setPosition(20,80,50);//PositionthecameramCamera->setPosition(60,200,70);mCamera->lookAt(0,0,0);//Make6ogreheads(namedhead0,head1,etc.)arrangedinacircleEntity*ent;for(inti=0;i<6;i++){S
6、ceneNode*headNode=mSceneMgr->getRootSceneNode()->createChildSceneNode();ent=mSceneMgr->createEntity("head"+StringConverter::toString(i),"ogrehead.mesh");headNode->attachObject(ent);Radianangle(i*Math::TWO_PI/6);headNode->setPosition(75*Math::Cos(angle),0,75*Math::Sin(angle));}}//Thefunctiontoc
7、reateourdecalprojectorvoidcreateProjector(){}//AfunctiontotakeanexistingmaterialandmakeitreceivetheprojecteddecalvoidmakeMaterialReceiveDecal(constString&matName){}//CreatenewframelistenervoidcreateFrameListener(void){mFrameListener=new