“伟大航路,我把世界上的一切都放在了那里,有种的话就去领取吧!”
这是OGRE中文网上的一则广告,我想,无论作为OGRE的学习者还是漫漫人生的一名旅人,这句话都是非常不错的激励语。放在这,是否能够让你隐约看到属于自己的新世界?
作为刚涉入计算机图形学以及三维渲染引擎的菜鸟,深深地被这句话激励勒,骚动的心时刻不得平静;于是乎,开始琢磨、深入学习公司平台软件的核心引擎-OGRE,至于OGRE的基础概念这里就不赘述勒,不太理解的看官们请谷哥度娘自行脑补;下面,切入正题,从配置环境开始,完成第一个实例,走进食人魔法师的世界!
采用模板搭建
首先需要安装OGRE SDK(本例采用的OGRE版本为OGRE 1.8.1 SDK for Visual C++ .Net 2010 (32-bit)),然后安装OGRE工程模板到SDK的安装目录,安装完工程模板之后,工程模板项会自动嵌入到VS2010中VC++项目模板中(类似于QT for VS);接下来,将在VS2010环境中,利用OGRE工程模板,搭建应用示例,实现食人魔法师的渲染与呈现,具体实现步骤如下:
1. 在VS2010中,新建VC++项目,采用OGRE Application工程模板,构建Standard Application Project
2. 构建完Project之后,发现VS并不能识别出ORGE中的对象,这里主要是因为工程模板中采用环境变量来配置头文件和库文件的路径,而系统环境变量中并没有进行配置;所以,这里我们需要在系统中配置环境变量OGRE_HOME : E:\OGRE学习\OGRE示例程序\OgreSDK_vc10_v1-8-1(该路径为SDK的安装目录)
3. 完成上述两个步骤后,接下来,我们将加载、渲染食人魔法师的功能代码添加到createScene()方法中,最后,编译、运行示例程序
添加到createScene()方法中的代码如下所示:
1 Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh"); 2 Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 3 headNode->attachObject(ogreHead); 4 // Set ambient light 5 mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 0.5)); 6 // Create a light 7 Ogre::Light* l = mSceneMgr->createLight("MainLight"); 8 l->setPosition(20,80,50);
手动配置搭建
相比于工程模板,手动搭建示例程序较为繁琐、复杂一点儿,不过它的优点在于我们可以深入了解OGRE程序中编译、运行时依赖的各大插件与配置文件;本实例中采用配置属性表的方式来配置运行环境,这样我们可以实现“一次配置,多次使用”的目标,即在搭建其他OGRE程序时,只需导入该配置属性表即可实现OGRE环境的配置,具体实现步骤如下:
1. 在VS2010中,新建空的Win32控制台应用程序,在建好的Project中的属性管理器面板下的Debug | Win32文件夹下,新建属性表OgreSetting
2. 接下来,我们将在OgreSetting属性表中配置实例程序运行的环境,在配置环境中,仍需要用到环境变量ORGE_HOME,配置详细信息如下所示:
头文件附加包含目录:1) $(OGRE_HOME)\include 2) $(OGRE_HOME)\include\OIS 3) $(OGRE_HOME)\include\OGRE 4)$(OGRE_HOME)\boost
链接器附加库目录:1) $(OGRE_HOME)\lib\debug 2) $(OGRE_HOME)\boost\lib
链接器附加项:1) OgreMain_d.lib 2) OIS_d.lib
3. 接下来给示例程序添加功能代码就能编译、运行了吗?其实并没有,OGRE程序在运行时,还依赖于各大功能插件(诸如RenderSystem_Direct3D9等)、资源文件(如模型文件、纹理文件等),所以我们这里还需要将插件配置文件plugins_d和资源配置文件resources_d拷贝到示例工程目录和输出目录,并修改对应的路径信息,如下所示:
plugins_d :将PluginFolder=.修改为PluginFolder=E:\OGRE学习\OGRE示例程序\OgreSDK_vc10_v1-8-1\bin\debug(SDK示例程序输出目录)
resources_d : 将其中所有的../../替换为绝对路径E:/OGRE学习/OGRE示例程序/OgreSDK_vc10_v1-8-1/
4. 程序运行时会依赖于OGRE中的共享库(如cg.dll等),这里我们需要将SDK输出目录下的所有dll拷贝到程序的输出目录下,这样程序才能正常运行,想必各位看官看到这儿,不经心生疑虑,对该方法嗤之以鼻,暗骂不已,那岂不是每次构建OGRE Project时都需要拷贝那么多dll到输出目录下?为了消除大家心中的疑虑,小菜也是到处寻求解决方案,不负有心人,终于寻得一法,即只需要在环境变量Path下加上E:\OGRE学习\OGRE示例程序\OgreSDK_vc10_v1-8-1\bin\debug,程序在运行时就会自动检索、链接到该目录下的dll(具体的原理,请各位看官自行脑补哦)
5. 为了不吊大家的胃口,这里将添加实现完整食人魔战士的功能代码到createScene()方法中,最后,编译、运行示例程序
添加到createScene()方法中的代码如下所示:
1 mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) ); 2 Entity *ent1 = mSceneMgr->createEntity("SinbadBody", "Sinbad.mesh"); 3 SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" ); 4 node1->attachObject( ent1 );
示例渲染成果
相关资源链接
OGRE SDK:http://www.ogre3d.org/download/sdk