1. 程式人生 > >【Ogre-windows】例項配置

【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

,而 1.10自己都有好幾個版本, 目前官方的github上推薦的應該是1.10.9

國際慣例, 參考部落格

兩種配置方法, 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.cfgresources.cfg)到當前工程目錄

  • 拷貝media到當前工程目錄的上一級目錄中

然後再執行就能出結果.

————————我是分割線————————

感覺很多人可能不知道我說的當前工程目錄怎麼找, 很簡單, 對著解決方案下面你所建立的工程右鍵,選擇在檔案資源管理器中開啟資料夾

這裡寫圖片描述

也就是說兩個cfg就是放在這個開啟的目錄中, media是在它的上級目錄

後記

所以這篇部落格就告訴我們, 要注意好Ogre每個版本對應的Tutorial, 不同的版本對應的例項不同, 如果沒對應好, 可能會走進大坑. 因而後續的學習就會從這裡或者這裡的教程開始, 而不是這裡