书签 分享 收藏 举报 版权申诉 / 34
上传文档赚钱

类型Root类Ogre的程序所需要作的第一件事情就是实例化一个课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:5101763
  • 上传时间:2023-02-11
  • 格式:PPT
  • 页数:34
  • 大小:694.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《Root类Ogre的程序所需要作的第一件事情就是实例化一个课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Root Ogre 程序 需要 第一 事情 就是 实例 一个 课件
    资源描述:

    1、Root类:类:Ogre的程序所需要作的第一件事情就是实例化一个Root对象。Root类的构造函数:Root*root=new Root();Root*root=new Root(“plugins.cfg”);Root*root=new Root(“plugins.cfg”,“ogre.cfg”);Root*root=new Root(“plugins.cfg”,“ogre.cfg”,“ogre.log”);Root*root=new Root(“”,“”);第2课 Ogre应用程序基础plugins.cfg文件文件在启动的Ogre时候,会载入plugins.cfg配置文件来查看有哪些插件可以

    2、被使用。#Defines plugins to load#Define plugin folderPluginFolder=./PluginFolder标签的值告诉了Ogre到哪个目录下找下面所使用得的插件。#Define plugins/Ogre载入的具体插件Plugin=RenderSystem_Direct3D9Plugin=RenderSystem_GLPlugin=Plugin_ParticleFXPlugin=Plugin_BSPSceneManagerPlugin=Plugin_OctreeSceneManagerPlugin=Plugin_CgProgramManager第2课

    3、 Ogre应用程序基础渲染窗口渲染窗口可以调用Root对象的initialise()方法来进行系统初始化:root-initialise(true,”My Render Window”);RenderWindow*window=root-getAutoCreatedWindow();initialise方法的第一个参数告知Ogre系统是否自动建立一个渲染窗口来给用户使用。在我们这里选择了简单的方法,让Ogre给我们提供渲染窗口。第二个参数并且把“My Render Window”作为程序窗口的标题。在这里如果没有提供你自己的窗口标题,那程序就会使用默认的“OGRE Render Window”

    4、。第二行代码可以用来得到自动创建的渲染窗口实例的指针。第2课 Ogre应用程序基础Ogre需要摄影机(Camera)来“拍摄”场景:Camera*cam=sceneMgr-createCamera(“MainCamera”);cam-setNearClipDistance(5);cam-setFarClipDistance(1000);cam-setAspectRatio(Real(1.333333);场景管理器是一个生产在你场景中不同对象实体的“工厂”。通过简单调用SceneManager的createCamera()方法,就能得到一个新的摄像机实例。之后你就可以使用这台摄像机来拍摄渲染你的

    5、场景了。第2课 Ogre应用程序基础创建一个视口“Viewport”:Viewport*vp=window-addViewport(camera);vp-setBackgroundColour(ColourValue(0,0,0);代码创建了一个视口对象的实例,同时我们也设置了视口(viewport)的背景颜色。第2课 Ogre应用程序基础渲染循环:调用Root对象的srartRendering()方法开始渲染你的场景:root-startRendering();在调用之后,Ogre就会不断地渲染在你场景中所有能被渲染的东西。你可以通过关闭渲染窗口来结束这个过程。当你在注册了帧监听(Frame

    6、 Listener)对象,然后在回调结束后返回一个false值给系统,同样也能结束程序渲染。第2课 Ogre应用程序基础帧监听帧监听:如果决定使用startRender()来开始你的渲染过程,你就只能通过使用帧监听对象来在渲染循环中插入你自己的代码了。所谓帧监听对象就是一个符合FrameListener接口的类的实例。当Ogre渲染每一帧的开始和结束的时候会回调FrameListener接口的方法。当程序执行的时候,会在每一次进入Ogre渲染管线之前调用你定义的frameStarted()方法。第2课 Ogre应用程序基础实例代码:实例代码:class MyFrameListener:publ

    7、ic FrameListenerpublic:bool frameStarted(const FrameEvent&evt);bool frameEnded(const FrameEvent&evt);bool MyFrameListener:frameStarted(const FrameEvent&evt)/在每一帧画面渲染前,调用这里你写好的代码return true;bool MyFrameListener:frameEnded(const FrameEvent&evt)/在每一帧画面渲染后,调用这里你写好的代码return true;第2课 Ogre应用程序基础实例代码:实例代码:R

    8、oot*root=new Root();MyFrameListener myListener;/在这里你需要在调用startRendering()方法前,注册你的帧监听对象!root-addFrameListener(&myListener);root-startRendering();第2课 Ogre应用程序基础深入理解Ogre程序:1.手动载入插件Root提供了两种方法来处理手动载入插件:void loadPlugin(const String&pluginName);void unloadPlugin(const String&pluginName);第一个方法是用来通过名称载入相应插件

    9、的。第二个方法是被用来卸载插件。#if defined(_DEGUG)root-loadPlugin(“Plugin_ParticleFX_d”);#else root-loadPlugin(“Plugin_ParticleFX”);#endif第2课 Ogre应用程序基础Ogre程序已有的插件:Plugin_OctreeSceneManager:以八叉树空间管理为基础的OctreeSceneManager(八叉树场景管理器八叉树场景管理器OSM)。同时包含了从其中派生出来的TerrainSceneManager(地形场景管理器地形场景管理器),用来处理从高度图(heightMapped)派生

    10、出来的地形场景。Plugin_BSPSceneManager:提供一个对BSP场景的管理系统,用来读取和处理来自雷神之锤III中的地图文件。不过在今天看来这已经是一个古老的地图格式,并且已经没有人再维护和支持它了(提供这个插件的唯一原因是为了某个演示程序的执行)。Plugin_CgProgramManager:这个插件负责载入、分析、编译并且管理Cg语言所写的GPU渲染程序。在今天看来,似乎Cg逐渐被当今技术所抛离(它只能支持3.0版本以前的profiles),因此其价值也越来越小;幸好Ogre在其内部同时支持HLSL和GLSL程序的GPU开发。第2课 Ogre应用程序基础Ogre程序已有的插

    11、件:Plugin_ParticleFX:粒子系统管理插件;提供了很多粒子的效果器(Affector)和发射器(Emitter),用来实现一些基本的粒子特效。RenderSystem_Direct3D9:Windows上面对Direct3D 9的抽象层实现RenderSystem_GL:针对所有平台上OpenGL的抽象层实现。第2课 Ogre应用程序基础2.载入渲染系统:Root类提供了用来确认那些API可以被使用的getAvailableRenderers()方法:RenderSystemList*getAvailableRenderers();Root同时也提供了一些用于设置和得到已经载入渲

    12、染系统的方法:void addRenderSystem(RenderSystem*naeRend);RenderSystem*getRenderSystemByName(const String&name);void setRenderSystem(RenderSystem*system);RenderSystem*getRenderSystem(void);第2课 Ogre应用程序基础实例代码:/RenderSystemList是std:vector类型RenderSystemList*rList=root-getAvailableRenderers();RenderSystemList:i

    13、terator it=rList-begin();while(it!=rList-end()/Ogre的字符串类型String是std:string的扩展RenderSystem*rSys=*(it+);if(rSys-getName().find(“OpenGL”)/把OpenGL渲染系统设置为我们使用的渲染系统 root-setRenderSystem(rSys);Break;/注意,如果系统没有支持OpenGL的话,我们就没有设置任何渲染系统!这将会引起一个Ogre设置期间的异常产生。第2课 Ogre应用程序基础3.渲染窗口当使用手动方式创建渲染窗口的时候,需要通过RenderSyste

    14、m类而不是Root类的方法来创建。#include“Ogre.h”Root*root=new Root(“”,”);/建立一个没有配置文件的Root实例root-loadPlugin(“RenderSystem_Direct3D9”);/载入渲染系统插件root-loadPlugin(“RenderSystem_GL”);/在这里我们伪装成用户已经选择了OpenGL渲染器String rName(“OpenGL Render Subsystem”);RenderSystemList*rList=root-getAvailableRenderers();RenderSystemList:iter

    15、ator it=rList-begin();RenderSystem*rSys=0;第2课 Ogre应用程序基础3.渲染窗口while(it!=rList-end()rSys=*(it+);if(rSys-getName()=rName)/设置渲染器,并结束循环 root-setRenderSystem(rSys);break;/如果没有找到一个可用的OpenGL渲染器,就在这里结束程序。if(root-getRenderSystem()=NULL)delete root;return-1;第2课 Ogre应用程序基础3.渲染窗口/root初始化的时候,我们可以传入一个false值来告知Roo

    16、t不用给我们创建渲染窗口。root-initialise(false);/在这里我们仍然使用默认的参数来创建渲染窗口RenderWindow*window=rSys-createRenderWindow(“Manual Ogre Window”,/窗口的名字 800,/窗口的宽度(像素)600,/窗口的高度(像素)false,/是否全屏显示0);/其他参数,使用默认值/在这之后你就可以向之前所说的一样创摄像机和视口了。第2课 Ogre应用程序基础NameValuePairList类:可用于设置窗口属性,如渲染窗口的名称和渲染窗口的标题是用不一样的字符串。NameValuePairList pa

    17、rams;params“left”=“0”;params“top”=“0”;params“title”=“Alternate Window Title”;RenderWindow*window=rSys-createRenderWindow(“MainWindow”,/渲染目标的名字 800,/窗口的宽度(像素)600,/窗口的高度(像素)false,/是否全屏显示¶ms);/其他参数,这次我们在上面已经设置了第2课 Ogre应用程序基础把Ogre渲染窗口插入到一个已经存在的窗口中:/hWnd是一个Win32系统中存在的窗口的句柄。/渲染系统的指针所指的是一个初始化过的D3D9Rend

    18、erSystem的实例。NameValuePairList opts;opts“parentWindowHandle”=StringConverter:toString(hWnd);/everything but“opts”is somewhat irrelevant in the context of an/explicitly parented windowRenderWindow*window=RenderSystem-createRenderWindow(“WindowName”,800,600,false,&opts);第2课 Ogre应用程序基础把Ogre渲染窗口插入到一个已经存在

    19、的窗口中:Ogre的窗口消息处理函数在这里被忽略了,因此你要手动处理Ogre相关的消息,比如当用户点击关闭按键时候,清理Ogre渲染窗口。第2课 Ogre应用程序基础4.场景管理器场景管理器创建方法:SceneManager*sceneMgr=root-createSceneManager(ST_GENERIC,“MySceneManager”);ST_GENERIC:最简单的场景管理器的构造器类型,其场景管理器没有对场景内容和结构做任何优化。在极其简单的场景中(例如菜单界面)中才有其价值。ST_INTERIOR:这种场景管理器的构造器所产生的管理器,优化了室内近距离的渲染,比较适合高密度的场

    20、景。ST_EXTERIOR_CLOSE:优化了室外场景里面的中近距离可视体,比较适合用一个简单模型或者高度场产生的场景地图。ST_EXTERIOR_FAR:Ogre历史遗留的错误,已经不需要在考虑使用它。在需要的时候用ST_EXTERIOR_CLOSE和ST_EXTERIOR_REAL_FAR来代替这个选项。ST_EXTERIOR_REAL_FAR:这种类型的场景管理器特别适合那种需要动态加载的地形或者场景。动态加载的地形通常都非常巨大,甚至可能描绘了一个星球的地貌。第2课 Ogre应用程序基础5.摄像机(x,y,z)代表摄像机所在点的坐标。X和Y分别代表近截面的宽度和高度Z代表从摄像机到近截

    21、面的距离。X和Y代表远截面的宽度和高度,其中(Z+Z)的和代表着从摄像机到远截面的距离。摄像机的纵宽比率(X/Y)视方向和视截体下截面的夹角W第2课 Ogre应用程序基础实例:拥有标准3:4的纵宽比;近截面距离摄像机5单位,远截面距离1000单位;视线方向和视截体的下平面(以及上平面)拥有30度夹角(换句话说,就是上图的W等于30)/sceneManager是一个已经存在的场景管理器实例的指针。/我们在这里构建名称为“MainCam”的摄像机。Camera*camera=sceneMgr-createCamera(“MainCam”);/并不需要计算什么,可以直接从视口中得到这个尺寸camer

    22、a-setAspectRatio(1.333333f);/30度角可以让我们看到一个长而远的视野camera-setFOVy(30.0f);camera-setNearClipDistance(5.0f);camera-setFarClipDistance(1000.0f);第2课 Ogre应用程序基础摄像机渲染模式:摄像机渲染模式:摄像机支持3种不同的渲染模式:边框,实体,“点”camera-setPolygonMode(PM_WIREFRAME);camera-setPolygonMode(PM_POINTS);camera-setPolygonMode(PM_SOLOD);Polygon

    23、Mode mode=camera-getPolygonMode();第2课 Ogre应用程序基础摄像机位置和变换:摄像机位置和变换:摄像机是一个MovableObject(活动对象)接口的实现,因此也具有这对象的所有方法和特性。设置摄像机位置的实例:设置摄像机位置的实例:/确认我们已经有一个指向“Camera”类型实例的指针camera。camera-setPosition(200,10,200);/也可以用一个三维向量来设置摄像机坐标,在我们得到场景坐标时候这么做会方便一些/camera-setPosition(Vector3(200,10,200);第2课 Ogre应用程序基础移动摄像机到

    24、当前位置的相对位置的实例:/假设摄像机还在我们之前设置的200,10,200空间位置上。camera-move(10,0,0);/摄像机移动到210,10,200camera-moveRelative(0,0,10);/摄像机移动到210,10,210第2课 Ogre应用程序基础操纵摄像机的方法:void setDirection(Real x,Real y,Real z);void setDirection(const Vector3&vec);Vector3 getDirection(void)const;Vector3 getUp(void)const;Vector3 getRight(

    25、void)const;void lookAt(const Vector3&angle);void lookAt(Real x,Real y,Real z);void roll(const Radian&angle);void roll(Real degrees)roll(Angle(degrees);void yaw(const Radian&angle);void yaw(Real degrees)yaw(Angle(degrees);void pitch(const Radian&angle);void pitch(Real degrees)yaw(Angle(degrees);第2课 O

    26、gre应用程序基础操纵摄像机的方法:void rotate(const Vector3&axis,const Radian&angle);void rotate(const Vector3&axis,Real degrees)rotate(axis,Angle(degrees);void setFixedYawAxis(bool useFixed,const Vector3&fixedAxis=Vector3:UNIT_Y)const Quaternion&getOrientation(void)const void setOrientation(const Quaternion&q);voi

    27、d setAutoTracking(bool enabled,SceneNode*target=0,const Vector3&offset=Vector3:ZERO);第2课 Ogre应用程序基础获得摄像机属性的方法:const Quaternion&getDerivedOrientation(void)const;const Vector3&getDerivedPosition(void)const;Vector3 getDerivedDirection(void)const;Vector3 getDerivedUp(void)const;Vector3 getDerivedRight(v

    28、oid)const;const Quaternion&getRealOrientation(void)const;const Vector3&getRealPosition(void)const;Vector3 getRealDirection(void)const;Vector3 getRealUp(void)const;Vector3 getRealRight(void)const;有“Real”关键字的方法返回的是世界空间的坐标,而拥有“Derived”关键字的方法的返回值是在“轴绑定”的本地坐标系中(也就是说这个坐标系原点是摄像机所在的点,而它的轴向和世界坐标系相同)。第2课 Ogre

    29、应用程序基础6.主渲染循环主渲染循环之前我们通过调用Root:startRendering()方法来执行这个循环。其实这个方法也只是简单的循环调用renderOneFrame()(渲染一帧)来进行程序运行工作。手动渲染循环的框架例程:bool keepRendering=true;/在这里填入所有这个章节之前提到的设置过程:/载入插件,创建渲染窗口和场景管理器以及摄像机和视口,/然后再场景中填入你希望的内容。while(keepRendering)/在这里处理引擎使用的网络消息。/在这里处理引擎使用的输入消息。/根据消息更新场景管理状态。/根据新的场景管理状态,渲染下一帧。root-rende

    30、rOneFrame();第2课 Ogre应用程序基础6.主渲染循环主渲染循环手动渲染循环的框架例程:/检查是否需要退出渲染循环/注意:NextMessageInQueue()这个函数只是为了便于解释程序含义/而虚构出来的函数Ogre引擎中并没有实现它。If(NextMessageInQueue()=QUIT)keepRendering=false;/在这里进行你需要的清理工作/然后,关闭Ogre delete root;第2课 Ogre应用程序基础Root中renderOneFrame()的全部代码(在Ogre源码的root.cpp中)bool Root:renderOneFrame(void)if(!_fireFrameStarted()return false;_updateAllRenderTargets();return _fireFrameEnded();第2课 Ogre应用程序基础附:例题讲解:场景节点与实体。第2课 Ogre应用程序基础附:例题讲解:场景节点与实体。第2课 Ogre应用程序基础

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Root类Ogre的程序所需要作的第一件事情就是实例化一个课件.ppt
    链接地址:https://www.163wenku.com/p-5101763.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库