第1个例子:

//1 begin
#include "Ogre.h"
int main()
{Ogre::Root* root=new Ogre::Root("plugins_d.cfg");//The default value is plugins.cfg,which is true for the release folder of the Ogre 3D SDK,but our application is running in the debug folder where the filename is plugins_d.cfgif(!root->showConfigDialog()){return -1;}Ogre::RenderWindow* window=root->initialise(true,"Ogre3D Beginners Guide");Ogre::SceneManager* sceneManager=root->createSceneManager(Ogre::ST_GENERIC);Ogre::Camera* camera=sceneManager->createCamera("Camera");camera->setPosition(Ogre::Vector3(0,0,50));camera->lookAt(Ogre::Vector3(0,0,0));camera->setNearClipDistance(5);Ogre::Viewport* viewport=window->addViewport(camera);viewport->setBackgroundColour(Ogre::ColourValue(0.0,0.0,0.0));camera->setAspectRatio(Ogre::Real(viewport->getActualWidth())/Ogre::Real(viewport->getActualHeight()));//2 begin//2.1 begin
/*Ogre::ResourceGroupManager::getSingleton().addResourceLocation("D:\\Work Files\\OGRE\\ogre_src_v1-7-4\\Samples\\Media\\packs\\Sinbad.zip","Zip");//注意转义字符的表达//Adding a new line of code for each zip archive or folder we want to load is a tedious task and we should try to avoid it.The ExampleApplications used a configuration file called resources.cfgOgre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();*///2.1 end//3|2.1 beginOgre::ConfigFile cf;cf.load("resources_d.cfg");Ogre::ConfigFile::SectionIterator sectionIter=cf.getSectionIterator();Ogre::String sectionName,typeName,dataname;while(sectionIter.hasMoreElements()){sectionName=sectionIter.peekNextKey();Ogre::ConfigFile::SettingsMultiMap* settings=sectionIter.getNext();Ogre::ConfigFile::SettingsMultiMap::iterator i;for(i=settings->begin();i!=settings->end();++i){typeName=i->first;dataname=i->second;Ogre::ResourceGroupManager::getSingleton().addResourceLocation(dataname,typeName,sectionName);}}Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();//3|2.1 endOgre::Entity* ent=sceneManager->createEntity("Sinbad.mesh");sceneManager->getRootSceneNode()->attachObject(ent);//2 endroot->startRendering();return 0;
}
//1 end

第2个例子

//1 begin
#include "Ogre.h"
//4 begin
#include "OIS.h"
//4 end
//2 begin
class MyFrameListener:public Ogre::FrameListener
{
public://4 beginMyFrameListener(Ogre::RenderWindow* win,Ogre::Viewport* viewport){_viewport=viewport;_comp1=false;_comp2=false;_comp3=false;_down1=false;_down2=false;_down3=false;OIS::ParamList parameters;unsigned int windowHandle=0;std::ostringstream windowHandleString;win->getCustomAttribute("WINDOW",&windowHandle);windowHandleString<<windowHandle;parameters.insert(std::make_pair("WINDOW",windowHandleString.str()));_InputManager=OIS::InputManager::createInputSystem(parameters);_Keyboard=static_cast<OIS::Keyboard*>(_InputManager->createInputObject(OIS::OISKeyboard,false));}~MyFrameListener(){_InputManager->destroyInputObject(_Keyboard);OIS::InputManager::destroyInputSystem(_InputManager);}//4 endbool frameStarted(const Ogre::FrameEvent& evt){//2.1 begin//return false;//2.1 end//4|2.1 begin_Keyboard->capture();if(_Keyboard->isKeyDown(OIS::KC_ESCAPE)){return false;}if(_Keyboard->isKeyDown(OIS::KC_1) && !_down1){_down1=true;_comp1=!_comp1;Ogre::CompositorManager::getSingleton().setCompositorEnabled(_viewport,"Compositor2",_comp1);}if(_Keyboard->isKeyDown(OIS::KC_2) && !_down2){_down2=true;_comp2=!_comp2;Ogre::CompositorManager::getSingleton().setCompositorEnabled(_viewport,"Compositor3",_comp2);}if(_Keyboard->isKeyDown(OIS::KC_3) && !_down3){_down3=true;_comp3=!_comp3;Ogre::CompositorManager::getSingleton().setCompositorEnabled(_viewport,"Compositor7",_comp3);}if(!_Keyboard->isKeyDown(OIS::KC_1)){_down1=false;}if(!_Keyboard->isKeyDown(OIS::KC_2)){_down2=false;}if(!_Keyboard->isKeyDown(OIS::KC_3)){_down3=false;}return true;//4|2.1 end}bool frameEnded(const Ogre::FrameEvent& evt){return true;}bool frameRenderingQueued(const Ogre::FrameEvent& evt)//当场景渲染到back buffer,未交换之前,调用该函数{return true;}//注意:需要在这三个函数中之一检测窗口是否关闭.如果已关闭需返回false.否则会出现窗口已关闭,但进程还在的情况.//ExampleFrameListener.h中   //bool frameRenderingQueued(const FrameEvent& evt)//{// if(mWindow->isClosed())  return false;// ...//}
//4 begin
private:OIS::InputManager* _InputManager;OIS::Keyboard* _Keyboard;Ogre::Viewport* _viewport;bool _comp1,_comp2,_comp3;bool _down1,_down2,_down3;
//4 end
};
//2 end
class MyApplication
{
private:Ogre::SceneManager* _sceneManager;Ogre::Root* _root;//2 beginMyFrameListener* _listener;//2 end//3 beginbool _keepRunning;//3 endpublic:MyApplication(){_sceneManager=NULL;_root=NULL;//2 begin_listener=NULL;//2 end}~MyApplication(){delete _root;//2 begindelete _listener;//2 end}void loadResources(){Ogre::ConfigFile cf;cf.load("resources_d.cfg");Ogre::ConfigFile::SectionIterator sectionIter=cf.getSectionIterator();Ogre::String sectionName,typeName,dataname;while(sectionIter.hasMoreElements()){sectionName=sectionIter.peekNextKey();Ogre::ConfigFile::SettingsMultiMap* settings=sectionIter.getNext();Ogre::ConfigFile::SettingsMultiMap::iterator i;for(i=settings->begin();i!=settings->end();++i){typeName=i->first;dataname=i->second;Ogre::ResourceGroupManager::getSingleton().addResourceLocation(dataname,typeName,sectionName);}}Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();}//3 beginvoid renderOneFrame(){Ogre::WindowEventUtilities::messagePump();_keepRunning=_root->renderOneFrame();}bool keepRunning(){return _keepRunning;}//3 endint startup(){_root=new Ogre::Root("plugins_d.cfg");if(!_root->showConfigDialog()){return -1;}Ogre::RenderWindow* window=_root->initialise(true,"Ogre3DBeginners Guide");_sceneManager=_root->createSceneManager(Ogre::ST_GENERIC);Ogre::Camera* camera=_sceneManager->createCamera("Camera");camera->setPosition(Ogre::Vector3(0,0,50));camera->lookAt(Ogre::Vector3(0,0,0));camera->setNearClipDistance(5);Ogre::Viewport* viewport=window->addViewport(camera);viewport->setBackgroundColour(Ogre::ColourValue(0.0,0.0,0.0));camera->setAspectRatio(Ogre::Real(viewport->getActualWidth())/Ogre::Real(viewport->getActualHeight()));loadResources();createScene();//2 begin//2.2 begin//_listener=new MyFrameListener();//2.2 end//4|2.2 begin_listener=new MyFrameListener(window,viewport);//4|2.2 end_root->addFrameListener(_listener);//2 end//1.1 begin//_root->startRendering();//Ogre提供的渲染循环/*void Root::startRendering(void){assert(mActiveRenderer != 0);mActiveRenderer->_initRenderTargets();// Clear event timesclearEventTimes();// Infinite loop, until broken out of by frame listeners// or break out by calling queueEndRendering()mQueuedEnd = false;while( !mQueuedEnd ){//Pump messages in all registered RenderWindow windowsWindowEventUtilities::messagePump();if (!renderOneFrame())break;}}*///1.1 end//4 beginOgre::CompositorManager::getSingleton().addCompositor(viewport,"Compositor2");Ogre::CompositorManager::getSingleton().addCompositor(viewport,"Compositor3");Ogre::CompositorManager::getSingleton().addCompositor(viewport,"Compositor7");//3个合成器相互独立,最终结果为3个合成器的累加//4 endreturn 0;}void createScene(){Ogre::Entity *ent=_sceneManager->createEntity("Sinbad.mesh");_sceneManager->getRootSceneNode()->attachObject(ent);}
};
void main()
{MyApplication app;app.startup();//3|1.1 beginwhile(app.keepRunning()){app.renderOneFrame();}//3|1.1 end}
//1 end

第九章 OGRE中的整个流程相关推荐

  1. mysql不支持not int查询结果,第九章 MySQL中LIMIT和NOT IN案例

    第九章 MySQL中LIMIT和NOT IN案例 一.案例的项目 1.创建数据库语句: #创建数据库 CREATE DATABASE `schoolDB`; USE `schoolDB`; #创建学生 ...

  2. 慕课软件质量保证与测试(第九章.程序中隐藏错误数量估计)

    慕课金陵科技学院.软件质量保证与测试.第九章.软件质量与质量保证.程序中隐藏错误数量估计 0 目录 9 软件质量与质量保证 9.2 程序中隐藏错误数量估计 9.2.1 课堂重点 9.2.2 测试与作业 ...

  3. Linux 笔记 - 第九章 Linux 中软件的安装

    博客地址:http://www.moonxy.com 一.前言 在 Linux 系统中,应用程序的软件包主要分为两种: 1)第一种是二进制的可执行软件包,也就是解开包后就可以直接运行.在 Window ...

  4. 【Ogre编程入门与进阶】第九章 动画

    9.1 动画基础 动画是基于人的视觉原理创建的运动图像.人的眼睛通过视觉暂留效应,当对上一个画面的感知还未消失时,下一张画面又出现,这样就会有动的感觉.计算机图形学中的动画也同样遵循着这一原理.在三维 ...

  5. 972信息检索 | 第九章 网络信息检索与利用中的有关问题

    文章目录 第九章 网络信息检索与利用中的有关问题 网络信息的选择与评价 网络信息选择与评价的主体 网络信息选择与评价的客体 网络信息选择和评价的标准 已制定的标准 网络信息资源的评价标准 网络性能的评 ...

  6. Python中的图像处理(第九章)Python图像增强

    Python中的图像处理(第九章)Python图像增强 前言 一. Python准备 二. Python仿真 三. 小结 前言 随着人工智能研究的不断兴起,Python的应用也在不断上升,由于Pyth ...

  7. 欧拉公式在计算机图形学中的,计算机图形学 第九章课件.ppt

    <计算机图形学 第九章课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<计算机图形学 第九章课件.ppt>文档请在天天文库搜索. 1.甘朝华第 ...

  8. VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

    VLSI数字信号处理系统--第九章滤波器和变换中的算法强度缩减 作者:夏风喃喃 参考: (1) VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著 (2) socvista ...

  9. 机器学习-第九章 聚类

    机器学习-第九章 聚类 D系鼎溜已关注 2020.02.19 10:36:17字数 3,312阅读 375 9.1 聚类任务 在无监督学习任务中,包括了密度估计.异常检测以及聚类等.其中应用最广泛的是 ...

最新文章

  1. centos搭建ftp环境
  2. android onpause时动画出错,Android生命周期之onPauseonStop
  3. 免费下载|《云原生时代下的App开发》走进阿里云一站式应用研发平台EMAS
  4. 科技公司预备持jiu战:谷歌将允许员工在2021年7月前居家办公
  5. 深入Spring Boot:快速集成Dubbo + Hystrix
  6. 计算机考研学科专业基础,2018考研计算机学科专业基础综合考试大纲
  7. CSS3 文本阴影 text-shadow属性
  8. 网易云课堂测试微专业前置课
  9. CVE-2017-4901 VMware虚拟机逃逸漏洞分析【Frida Windows实例】
  10. 帆软扩展单元格运算的相关应用
  11. 马云单挑“叶问”吊打“战狼”,网友:原来天下武功,唯富不破~是贫穷限制了我的想象力
  12. linux新手入门-2.开局
  13. 彼得林奇——如何看待股市大跌
  14. 旋转(Rotation)矩阵转欧拉角(euler)
  15. PTA:运算符重载(最简分数,c++)
  16. django项目中涉及到的一些常用sql语句学习整理
  17. windows Redis设置密码和取消密码
  18. JavaScript <script>
  19. 三维欧几里德空间中两个向量叉积的问题
  20. 四位大小写字母和数字随机验证码

热门文章

  1. Python+OpenCV:理解k近邻(kNN)算法(k-Nearest Neighbour (kNN) algorithm)
  2. Windows环境下使用CMake编译OpenCV3.0和OpenCV_contrib
  3. 【CentOS 7架构8】,域名跳转#171221
  4. Android知识总结——Path常用方法解析
  5. 快速生成Plugman中的lib-file、source-file的xml内容
  6. 第 二 十 八 天 :监 控 软 件 之 cacti
  7. 【VMCloud云平台】SCOM配置(额外篇)-应用可用性150点实时性测试
  8. unix/linux命令参考
  9. Linux有哪些目录命令,linux最常用的20个命令有哪些
  10. 双层板在哪层覆铜_多层板的生产过程,与双层板有何不同?