【Ogre-windows】例項配置
前言
折騰了好久才搞定教程例項, 主要是因為上一篇部落格安裝的具體版本是Ogre1.10.9, 而官方的Ogre Wiki Tutorial Framework沒有指定具體版本, 如果單純下載Ogre Wiki Tutorial Framework 1.10 - (Windows line endings, updated 2015-10-15) 執行, 基本會血崩. 所以, 在經過仔細琢磨官網以後發現發現其例項藏在D:\Package\Ogre1.10\ogre-master\Samples\Tutorials
這個資料夾中, 尷了個尬, 感覺Ogre每次更新版本都有些比較大的變動, 比如1.9的例項不能用於1.10
國際慣例, 參考部落格
兩種配置方法, Cmake
是最簡單的, 但是為了進一步瞭解都需要哪也東東, 我們也研究一波手動加入三方庫
配置例項——Cmake
去目錄D:\Package\Ogre1.10\ogre-master\Samples\Tutorials
看一眼它的Cmake檔案發現很簡單:
cmake_minimum_required (VERSION 2.8)
project(OgreTutorialsSample)
## [discover_ogre]
# specify which version you need
find_package(OGRE 1.10 REQUIRED)
# the search paths
include_directories(${OGRE_INCLUDE_DIRS})
link_directories(${OGRE_LIBRARY_DIRS})
# copy essential config files next to our binary where OGRE autodiscovers them
file(COPY ${OGRE_CONFIG_DIR}/plugins.cfg ${OGRE_CONFIG_DIR}/resources.cfg
DESTINATION ${CMAKE_BINARY_DIR} )
## [discover_ogre]
add_executable(0_Bootstrap Bootstrap.cpp)
target_link_libraries(0_Bootstrap ${OGRE_LIBRARIES})
add_executable(1_FirstScene BasicTutorial1.cpp)
target_link_libraries(1_FirstScene ${OGRE_LIBRARIES})
add_executable(2_CamerasAndShadows BasicTutorial2.cpp)
target_link_libraries(2_CamerasAndShadows ${OGRE_LIBRARIES})
雖然我沒具體Cmake
, 但是稍微有點程式設計素養的應該不難發現, 主要包含:
- 核對Ogre的版本是否為1.10
- 重要的包含目錄和庫目錄都必須得有
- 拷貝Ogre程式執行必須載入的兩個
cfg
檔案
隨後直接進行cmake
貌似一個錯誤都沒
Found OGRE
static : OFF
components : Bites;HLMS;MeshLodGenerator;Overlay;Paging;Property;RTShaderSystem;Terrain;Volume
plugins : Plugin_BSPSceneManager;Plugin_CgProgramManager;Plugin_OctreeSceneManager;Plugin_PCZSceneManager;Plugin_ParticleFX;RenderSystem_GL;RenderSystem_GL3Plus;RenderSystem_Direct3D9;RenderSystem_Direct3D11
media : D:/Package/Ogre1.10/ogre-master/build/sdk/Media
Configuring done
我記得當時有一個錯誤來著, 但是並沒有關係, 出錯也是在OGRE_DIR
沒找到, 只需要將它設定一下就好了, 最後generate
得到VS2013
的工程檔案, 執行D:\Package\Ogre1.10\ogre-master\Samples\Tutorials\build
下的OgreTutorialsSample.sln
, 然後ALL_BUILD
生成一下, 出現瞭如下錯誤
很簡單, 沒找到std::cerr
, 我們去這個BasicTutorial1.cpp
的頂部加上
#include <iostream>
using namespace std;
在重新ALL_BUILD
生成一遍就得到了正確的結果, 然後設定一下: 解決方案資源管理器->解決方案屬性->啟動專案->當前選定內容, 然後執行, 你會發現並執行不了
此時我們需要將Debug
模式改成Release
模型執行, Ok,繼續出錯
貌似是什麼東西沒讀到, 還記得剛才說的兩個配置檔案麼, 它們的具體用途到下一篇部落格再說, 總之就是我們的模型檔案沒有被載入進來, 去瞅瞅resources.cfg
, 發現需要在上級目錄中存在一個稱為Media
的資料夾, 裡面儲存著很多執行需要用到的資原始檔, 解決方法是重新設定resources.cfg
裡面的Media
路徑, 或者是整個都拷貝過來, 原來的Media
在你編譯好的D:\Package\Ogre1.10\ogre-master\build\sdk
目錄中也存在, 我直接拷貝到D:\Package\Ogre1.10\ogre-master\Samples\Tutorials
中, 然後再執行第一個案例, 就出結果了, ESC退出:
【注】其實也就是需要注意兩點:
- CMake的時候一般都是找路徑沒找到, 只需要在GUI中設定一下路徑就行了, 這一部分不會出太大問題
- 執行的時候記得選擇
Release
- 記得將
Media
資原始檔拷貝到當前工程目錄的並列地方
- 環境變數要注意加到path中, 如果不加的話, 編譯沒問題, 但是執行可能遇到dll找不到
配置例項——手動檔
直接先在VS中建立一個win32應用程式空專案, 在原始檔中新建一個main.cpp
, 隨便複製一個例項的程式碼過來, 我複製的是第一個例項的Bootstrap.cpp
, 然後在專案屬性中依次設定
VC++目錄->包含目錄
VC++目錄->庫目錄
注意以上兩步都要勾選左下角的
聯結器->輸入
OgreBites.lib
winmm.lib
imm32.lib
version.lib
msimg32.lib
D:\Package\Ogre1.10\ogre-master\build\Dependencies\lib\SDL2main.lib
D:\Package\Ogre1.10\ogre-master\build\Dependencies\lib\SDL2.lib
OgreHLMS.lib
OgreMeshLodGenerator.lib
OgreOverlay.lib
OgrePaging.lib
OgreProperty.lib
OgreRTShaderSystem.lib
OgreTerrain.lib
OgreVolume.lib
OgreMain.lib
編譯Release
出現錯誤:
錯誤 3 error C4996: 'Ogre::Resource::Listener::backgroundLoadingComplete': 被宣告為已否決 d:\package\ogre1.10\ogre-master\build\sdk\include\ogre\OgreEntity.h 896 1 Ogre1
然後刪除屬性中C/C++
右邊的SDL檢查
對應的是 (/sdl)
即可編譯成功
執行前別忘記
拷貝兩個cfg檔案(
plugins.cfg
和resources.cfg
)到當前工程目錄拷貝
media
到當前工程目錄的上一級目錄中
然後再執行就能出結果.
————————我是分割線————————
感覺很多人可能不知道我說的當前工程目錄怎麼找, 很簡單, 對著解決方案下面你所建立的工程右鍵,選擇在檔案資源管理器中開啟資料夾
也就是說兩個cfg
就是放在這個開啟的目錄中, media
是在它的上級目錄
後記
所以這篇部落格就告訴我們, 要注意好Ogre
每個版本對應的Tutorial
, 不同的版本對應的例項不同, 如果沒對應好, 可能會走進大坑. 因而後續的學習就會從這裡或者這裡的教程開始, 而不是這裡