创建OGRE的第一个例子

来源:互联网 发布:js date 获取日期 编辑:程序博客网 时间:2024/06/05 01:06

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座标),最后一句就是把这个场景点与立方体实体绑定在一起。

 

原创粉丝点击