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座標),最後一句就是把這個場景點與立方體實體綁定在一起。