一般的 ogre 教程貌似都是从已有的例子框架开始创建 ogre 程序的,这篇文章教你从零开始,创建一个能显示一条龙的 Ogre 程序,这个程序只有最少的代码,没有其他功能,方便你理解 ogre 的一些基本概念。
开始一个新的 Win32 程序,你可以删除所有代码,只需要保留 WinMain 的声明。(让我们从零开始)
在 stdafx.h 里添加头文件包以及 lib 文件引用:
#include <ogre.h>
准备工作完成,让我们开始改造 WinMain:
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // 执行应用程序初始化: Root * ogreRoot=new Root(); // 显示配置窗口 bool rtn = g_ogreRoot->showConfigDialog(); // 如果配置文件已经存在(已经执行过起码一次 showConfigDialog ), // 那么你可以用下面这句之间读取配置,而不需要显示配置窗口。 // g_ogreRoot->restoreConfig(); // 创建渲染窗口 g_ogreRoot->initialise(true, "My Render Window"); // 这里的 true 指示 ogre 自动创建窗口 RenderWindow * renderWindow =g_ogreRoot->getAutoCreatedWindow(); renderWindow->setAutoUpdated(true); // 创建场景管理器,这个TerrainSceneManager 是指地形场景管理器 SceneManager* mSceneMgr = g_ogreRoot->createSceneManager("TerrainSceneManager"); // 创建摄像机 Camera* mCamera = mSceneMgr->createCamera("PlayerCam"); mCamera->setPosition(Vector3(0,0,-300)); // 摄像机位置 mCamera->lookAt(Vector3(0,0,800)); // 摄像机朝向 // 设置渲染窗口的视口(和我们的摄像机绑定) Viewport *vp = renderWindow->addViewport(mCamera); vp->setBackgroundColour(ColourValue(0, 0, 0)); // 定义资源的读取目录/文件,dragon.zip 放在执行目录,这个文件可以在 OgreSDK/media/packs 目录下找到 ResourceGroupManager::getSingleton().addResourceLocation( "dragon.zip", "Zip", "General" ); // 我把 script 目录从 OgreSDK/media/materials/scripts 复制到执行目录下了,龙的皮肤着色需要用到某个脚本 ResourceGroupManager::getSingleton().addResourceLocation( "scripts", "FileSystem", "General" ); // 初始化资源管理器 ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); // 读取龙的模型 Entity * ent = mSceneMgr->createEntity("dragon", "dragon.mesh"); // 把模型放入场景管理器 mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent); // 开始渲染 g_ogreRoot->startRendering(); return 0; };
好了,这样我们的第一个 ogre 程序就写好了,很简单吧。当初写的时候碰到不少问题,主要是文件找不到,资源找不到……
把 OgreSDK/bin/release 下的文件都复制到执行目录,然后试试吧!
http://blog.csdn.net/jadedrip/archive/2009/12/31/5110543.aspx