OGRE初级教程总结 【转载】



一下内容是对OGRE基础教程的总结,大家可以先阅读中级教程1---9的内容,然后再回过头来浏览这片文章,否则可能会有很多看不懂的地方。

 

     OGRE基础教程1

主要讲了几个OGRE中的基本概念:

1.  SceneManager:所有屏幕上可见的东西都由SceneManager来管理;有多种类型的SceneManager,分别用来渲染Terrain、BSP等等。

2.  Entity:初步的理解一个Entity代表一个Mesh(可以含有动画),Light,Camera,Particle,Billboard不用Entity表示。Entity不能直接加到场景中,必须先attach到一个SceneNode上,SceneNode管理位置和方向。

3.  SceneNode:SceneNode管理位置和方向;需要注意子节点的是在父节点的空间中;一个SceneNode可以管理多个对象。

4.  OGRE中的Entity和SceneNode都必须指定全局唯一的名称。

 

OGRE基础教程2

主要是讲OGRE中的Light和Shadow的设置

1.  要开启阴影:首先要调用SceneManager:: setShadowTechnique(),然后对于需要开启的Entity调用Entity:: setCastShadows()。

2.  灯光和摄像机都需要由SceneManager来创建,分别是SceneManager::createLight()和SceneManager::createCamera()。

 

OGRE基础教程3

主要讲Terrain场景,Sky和Fog

1.  为了处理Terrain场景,首先要选择相应类型的SceneManager,这里选择了“ST_EXTERIOR_CLOSE”类型。这个操作是通过Root::createSceneManager()完成的。此操作创建并返回了一个TerrainSceneManager指针,同时创建了一个HeightmapTerrainPageSource对象。

2.  加载地形是通过:mSceneMgr->setWorldGeometry( "terrain.cfg" );语句来完成的。

3.  天空是通过SceneManager::setSkyBox()等函数完成的;

4.  Fog是通过SceneManager::setFog()完成。

 

OGRE基础教程4

 引入了FrameListener的概念

 

对于FrameListener的初步理解:OGRE在初始化完成之后,调用Root::startRendering()就启动了渲染循环。FrameListener是为了给应用程序处理各种事件的机会,最典型的就是frameStarted()和frameEnded()。

此教程的TutorialFrameListener从ExampleFrameListener派生,后者又从FrameListener和KeyListener派生,所以它可以处理按键事件。

 

OGRE基础教程5

主要介绍键盘监听和鼠标监听的使用方法。

OIS的KeyListener接口提供了两个纯虚函数。第一个是keyPressed函数(每次按下某个键时调用它),还一个是keyReleased(每次离开某个键时调用它)。传入这些函数的参数是一个KeyEvent,它包含被按下/释放的按键的键码。

eg:

在ExampleFrameListener的构造函数里已经取得了OIS的mMouse和mKeyboard对象。我们调用这些输入对象的setEventCallback方法,把TutorialFrameListener注册成一个监听器。

       mMouse->setEventCallback(this);

       mKeyboard->setEventCallback(this);

然后再处理鼠标键盘的响应响应时间包括keyPressed(),KeyDown(),MovePressed(),MoveDown().

 

bool keyPressed(const OIS::KeyEvent &e)  {      switch (e.key)      {          case OIS::KC_ESCAPE:               mContinue = false;              break;      }      return true;  }

OGRE基础教程6

CEGUI简介:

1.      Crazy Eddies GUI系统是一个为不具备或缺乏用户界面制作功能的图形API或引擎提供免费用户界面支持的开源的库。这个使用c++编写的库是针对那些想制作优秀的游戏却又没有GUI(图形用户界面)子系统的专业游戏开发者。确信已经在debug配置的中添加 2

2.      'CEGUIBase_d.lib' 和 'OgreGUIRenderer_d.lib' 库。在Visual C++中添加依赖,依次点击:项目 -> 属性 -> 配置属性 -> 链接。

3.      CEGUI日志的地方,一般都设置为Informative模式的。其具有四种模式:Standard, Errors, Informative 和 Instane。

创建一个新的CEGUI系统,使用“TaharezLook”来设置图(sheme)与鼠标指针,使用“BlueHighway-12”来设置字体。

           CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLookSkin.scheme");

          mGUISystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook",(CEGUI::utf8*)"MouseArrow");

          CEGUI::MouseCursor::getSingleton().setImage("TaharezLook","MouseMoveCursor");

          mGUISystem->setDefaultFont((CEGUI::utf8*)"BlueHighway-12");

          mEditorGuiSheet=CEGUI::WindowManager::getSingleton().createWindow((CEGUI::utf8*)"DefaultWindow",

                                                                      (CEGUI::utf8*)"Sheet"); 

          mGUISystem->setGUISheet(mEditorGuiSheet);

 

 

OGRE基础教程7

1 CEGUI是一个功能全面的GUI库,它能够植入像Ogre这样的3D应用程序(当然也支持纯DirectX和OpenGL)。就像Ogre只是一个图像库一样(不做声音、物理等其它的事情),CEGUI只是一个GUI库,意味着既不自己做渲染,也不与任何鼠标键盘事件挂钩。实际上,为了让CEGUI能渲染,你必须提供一个渲染器给它(包含在SDK的OgreGUIRenderer库)。而为了让它能够理解鼠标键盘事件,你必须手工地把它们注入系统。

2初始化 CEGUI,createScene函数并添加如下代码:

mRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr);      mSystem = new CEGUI::System(mRenderer);3选择了一个皮肤:

      CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLookSkin.scheme");

 4接下来我们要做的事件就是设置默认鼠标指针图像和默认字体:

      mSystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");

      mSystem->setDefaultFont((CEGUI::utf8*)"BlueHighway-12");

 5注入键盘事件 
CEGUI不会自己处理输入,它不读取鼠标的移动和键盘的输入。相反地,它依赖用户把按键鼠标事件注入到系统。接下来我们要做的就是处理这些事件。若你正使用CEGUI,你需要以缓冲模式运行鼠标键盘,这样你就能直接获取事件并在它们发生时注入。找到keyPressed函数,并添加代码:

      CEGUI::System *sys = CEGUI::System::getSingletonPtr();

      sys->injectKeyDown(arg.key);

 6转变和注入鼠标事件当我们注入KepUp和KepDown事件到CEGUI里时,我们不必转换键码。OIS和CEGUI为键盘输入使用相同的键码。但鼠标按钮却不是这样。在按下鼠标按钮注入到CEGUI时,我们需要写一个函数来把OIS的按钮ID转换为CEGUI的按钮ID。 7窗口、表单、组件介绍

CEGUI与其它多数GUI系统有所不同。在CEGUI里,所有能显示出来的东西都是CEGUI::Window类的一个子类,而且一个window可以有任意数量的子window。这样会导致一些奇怪的事情发生。你能在一个按钮里面放置另外一个按钮,虽然实际上不会这么干。我提这些的原因是,当你正寻找放在应用程序里的某个特殊的小部件时,它们都被称作Windows,而且可以通过访问Windows的函数来访问。

8事件 
CEGUI里的事件是非常灵活的。它不是实现一个接收事件的接口,而是使用一种回调机制,把任何公共函数绑定成一个事件处理器(通过适当的方法签名)。不幸的是,这也意味着注册事件会比Ogre更麻烦。

 OGRE基础教程8

始终牢记的视口类,虽然没有很多的功能本身,就是对所有食人魔渲染的关键。不要紧,你有多少SceneManagers创建或在每个场景管理器多少相机时,他们都将呈现给窗口,除非您设定每个摄像机你呈现口。也不要忘记清除你不使用的之前创造的视口!

 

OGRE基础教程8

 

从零开始

1开始之前,让我们站在更高的层次上看一下启动过程是如何工作的:

1.  创建Root对象。

2.  定义Ogre将要使用的资源。

3.  选择并设置渲染系统(即DirectX, OpenGL等)。

4.  创建渲染窗口(Ogre所处的窗口)。

5.  初始化你要使用的资源。

6.  用这些资源来建立一个场景。

7.  设置第三方库或插件。

8.  创建一些帧监听器。

9.  启动渲染循环

2带缓冲输入的疑难杂症

如果你没有如自己所希望那样在程序中获得输入缓冲,那么你需要检查以下这些事情:

1.  你在调用InputManager::createInputObject()函数创建输入设备时是否设置第二个参数(开启输入缓冲)为true?

2.  你是否为每个输入缓冲对象设置了一个setEventCallback()函数?

3.  是否有别的类调用了setEventCallback()函数?(注意:OIS仅仅允许一个事件回调给一个对象,你不能把一个事件回调给两个类处理.)

3清理

最后一件事是,当程序终止时,我们要对所创建的所有对象进行清理。为止,我们将按照与创建时相反的顺序来删除或销毁这些对象。

 

 


以上几个教程都使用“ogrenew/Samples/Common”目录下的ExampleApplication的简单框架,有必要对它做一下了解。

原文地址:https://www.cnblogs.com/zhidianhcuan/p/4154013.html