平台:win7, VS2010
先看運行結果吧:
1. 安裝OGRE
下載OGRE SDK 1.9,解壓,放在你喜歡的地方,在OGRE SDK文件加下創建“OGRE_HOME.bat.bat”文本文件,添加如下腳本:
setx OGRE_HOME %CD%
雙擊運行“OGRE_HOME.bat.bat”,該操作定義環境變量OGRE_HOME值為OGRE SDK目錄,該環境變量將在VC++工程中使用。
2. 下載BaseApplication
到這個地方下載Tutorial Framework 1.9 - (Windows Line-endings):
http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Ogre+Wiki+Tutorial+Framework
這是OGRE為入門者准備的基本示例程序,給我們寫好了初始化OGRE的代碼(BaseApplication.cpp, BaseApplication.h)。
3. 創建VC++工程
step 1:控制台項目(空項目),將上一節下載的BaseApplication.cpp, BaseApplication.h拷貝到項目文件夾里,並添加到項目中。添加新源文件main.cpp,main.cpp中加入如下代碼:
1 #include "BaseApplication.h" 2 3 class MyClass : public BaseApplication 4 { 5 public: 6 MyClass(void) { } 7 virtual ~MyClass(void) { } 8 protected: 9 virtual void createScene(void); 10 }; 11 12 void MyClass::createScene(void) 13 { 14 // shadow 15 mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE); 16 mSceneMgr->setAmbientLight(Ogre::ColourValue(0.2f, 0.2f, 0.2f)); 17 18 // light and light sphere 19 Ogre::Light* pointLight1 = mSceneMgr->createLight("pointLight1"); 20 pointLight1->setType(Ogre::Light::LT_POINT); 21 pointLight1->setDiffuseColour(Ogre::ColourValue::White); 22 pointLight1->setSpecularColour(Ogre::ColourValue::White); 23 24 Ogre::Entity* sphereEnt = mSceneMgr->createEntity("MyEntity", "sphere.mesh"); 25 Ogre::SceneNode* lightNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("LightNode"); 26 lightNode->attachObject(sphereEnt); 27 lightNode->setScale(0.1f,0.1f,0.1f); 28 sphereEnt->setMaterialName("BaseWhiteNoLighting"); 29 30 Ogre::Vector3 lightPosition(0,500,150); 31 lightNode->setPosition(lightPosition); 32 pointLight1->setPosition(lightPosition); 33 34 // Ninja 35 Ogre::Entity* entNinja = mSceneMgr->createEntity("Ninja", "ninja.mesh"); 36 entNinja->setCastShadows(true); 37 mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entNinja); 38 39 // ground 40 Ogre::Plane plane(Ogre::Vector3::UNIT_Y, 0); 41 Ogre::MeshManager::getSingleton().createPlane("ground", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 42 plane, 1500, 1500, 20, 20, true, 1, 5, 5, Ogre::Vector3::UNIT_Z); 43 Ogre::Entity* entGround = mSceneMgr->createEntity("GroundEntity", "ground"); 44 mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entGround); 45 entGround->setMaterialName("Examples/Rockwall"); 46 entGround->setCastShadows(false); 47 48 // set camera position 49 mCamera->setPosition(100,200,-300); 50 mCamera->lookAt(0,100,0); 51 } 52 53 int main(int argc, char *argv[]) 54 { 55 // Create application object 56 MyClass app; 57 58 try{ 59 app.go(); 60 } 61 catch( Ogre::Exception& e ){ 62 std::cerr << "An exception has occured: " << 63 e.getFullDescription().c_str() << std::endl; 64 } 65 return 0; 66 }
添加好之后,工程是這個樣子的:
step 2:添加包含目錄和庫目錄
項目上右鍵屬性“配置屬性 >> VC++目錄 >> 包含目錄”所有配置下添加如下項:
$(OGRE_HOME)\include
$(OGRE_HOME)\include\OIS
$(OGRE_HOME)\include\OGRE
$(OGRE_HOME)\include\OGRE\Overlay
$(OGRE_HOME)\boost
“配置屬性 >> VC++目錄 >> 庫目錄”所有配置下添加如下項::
$(OGRE_HOME)\lib\$(Configuration)
$(OGRE_HOME)\boost\lib
現在知道環境變量OGRE_HOME的用途了吧。
step 3:添加庫文件
項目上右鍵屬性“配置屬性 >> 鏈接器 >> 輸入 >> 附加依賴項”Debug配置下添加如下項:
OgreMain_d.lib
OIS_d.lib
OgreOverlay_d.lib
Release配置下添加如下項:
OgreMain.lib
OIS.lib
OgreOverlay.lib
這個時候編譯項目已經可以成功編譯了,但運行不了,因為沒有運行環境(.dll文件,資源文件)。在Release下編譯,將編譯出的helloOGRE.exe文件拷貝到OGRE_HOME/bin/Release下,雙擊運行,報錯如下:
此時這是因為沒有安裝D3D,你可以到MSDN下載D3D安裝,我們這里用OpenGL(OGRE同支持OpenGL和Direct3D):將OGRE_HOME/bin/Release/plugins.cfg文件的第7, 8兩行注釋:
Plugin=RenderSystem_Direct3D9
Plugin=RenderSystem_Direct3D11
修改為
# Plugin=RenderSystem_Direct3D9
# Plugin=RenderSystem_Direct3D11
再運行還是不行,通過分析OGRE_HOME/bin/Release/Ogre.log(GORE程序運行產生的日志文件)發現是資源解析的問題。因為之前用OGRE 1.8.1時沒問題,可以用OGRE SDK 1.8.1的資源包,具體就是OGRE_HOME/media整個文件夾和OGRE_HOME/bin/Release/resources.cfg文件替換為OGRE SDK 1.8.1(再去官網下載吧)中的相應項,就可以運行了。用“WASD”移動相機,鼠標改變視角,Esc鍵退出程序。
step 4:運行環境配置
因為不想每次運行程序都要手動拷貝,也不想改變OGRE_HOME目錄下的文件。這里采取的策略是:將OGRE_HOME/bin和OGRE_HOME/media這兩個文件夾都拷貝到VS解決方案文件夾下(OGRE 1.9的OGRE_HOME/bin和OGRE 1.8.1的OGRE_HOME/media),當然bin/debug和bin/release下的plugins[_d].cfg和samples[_d].cfg還是要改,見上一步。工程目錄結構目前是這樣的:
另外還要配置工程屬性,修改生成目標位置:
項目上右鍵屬性“配置屬性 >> 常規 >> 輸出目錄”所有配置下修改為“$(SolutionDir)bin\$(Configuration)\”:
“配置屬性 >> 調試 >> 工作目錄”所有配置下修改為“$(TargetDir)”:
4. 問題解決
如果程序還是運行不起來,歡迎給我留言。另外可以查看/bin/Release/Ogre.log(Release版本),搜索“error”,查看錯誤信息。
5. 參考文獻
http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Setting+Up+An+Application+-+Visual+Studio
http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Basic+Tutorial+1&structure=Tutorials