創建OGRE的第一個例子

OGRE作爲一個圖形渲染引擎,要學習它的話首先就得學習它如何顯示了.

下面是一個在屏幕上顯示出一個立方體的例子

這裏需要一個cube.mesh的模型文件,可以在OGRESDK/media/models中找到.

不過我們不需要移動它,我們要把工作目錄設置成OGRESDK/Bin/debug就成了.

在它裏面有個resources.cfg文件,它的作用就是來設置一些資源文件的路徑的,我們可以看到它裏面有行FileSystem=../../media/models.

好了下面看下這個例子

example.h文件

#ifndef __example1_h_
#define __example1_h_


#include "ExampleApplication.h"
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#include "../res/resource.h"
#endif


class Example1App:public ExampleApplication
{
public:
 Example1App()
 {
 }
 ~Example1App()
 {
 }
protected:
 virtual void createScene(void);
};
#endif // #ifndef __example1_h_

 

 

 

 

example.cpp文件

#include "example1.h"
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif


 void Example1App::createScene(void)
 {
  this->mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5,0.5,0.5,1));
  Ogre::Entity* pEntity=this->mSceneMgr->createEntity("entity1","cube.mesh");
  Ogre::SceneNode* pSceneNode=this->mSceneMgr->getRootSceneNode()->createChildSceneNode("CubeNode");
  pSceneNode->attachObject(pEntity);
 }
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
   INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
   int main(int argc, char *argv[])
#endif
   {
      // Create application object
     Example1App theApp;

      try {
         //app.go();
    theApp.go();
      } catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
         MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
         std::cerr << "An exception has occured: " <<
            e.getFullDescription().c_str() << std::endl;
#endif
      }

      return 0;
   }

#ifdef __cplusplus
}
#endif

 

 

在頭文件裏我們創建了一個Example1App類繼承自ExampleApplication,我們可以在ExampleApplication.h中找到它的詳細介紹.

我們可以把它理解成一個應用程序類,當我們創建它時,它包含了指向根、場景管理器、相機、窗口等。當我們調用它的go函數時,它就會自動初始化OGRE,然後執行循環渲染。
createScene(void)就是我們用來創建3D世界的場景的了,通常我們都重載它來進行一些場景創建。

在這裏我們要在3D世界裏顯示出立方體,就需要把模型文件轉換成OGRE裏的實體,還必需創建一個場景節點(用來表示實體在3D世界裏的方位),把實體綁定到場景節點後就可以顯示出來了。

在CreateScene(void)函數裏第一句this->mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5,0.5,0.5,1));用來設置環境光,沒有環境光的話你是什麼都看不到的。接下來的Ogre::Entity* pEntity=this->mSceneMgr->createEntity("entity1","cube.mesh");創建了立方體實體。

Ogre::SceneNode* pSceneNode=this->mSceneMgr->getRootSceneNode()->createChildSceneNode("CubeNode");從場景管理器的根節點創建了一個子場景節點(默認位置是0座標),最後一句就是把這個場景點與立方體實體綁定在一起。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章