• 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的简单框架,有必要对它做一下了解。

  • 相关阅读:
    [C++] split string by string
    工作三个月心得经验
    Ubuntu Command-Line: Enable Unlimited Scrolling in the Terminal
    What is the PPA and How to do with it ?
    WCF vs ASMX WebService
    The ShortCuts in the ADT (to be continued)
    when does the View.ondraw method get called
    Browsing Storage Resources with Server Explorer
    Get start with Android development
    C++ Frequently asking question
  • 原文地址:https://www.cnblogs.com/zhidianhcuan/p/4154013.html
Copyright © 2020-2023  润新知