ogre 学习笔记 - Day 8

ogre 学习笔记 - Day 8


由于之前对sample的学习已经到了一个瓶颈。无法继续了,那么果断放弃。

接下来的学习需要一定的能力了

回到Tutorial,对于之前提出的问题,为什么 Tutorail 没有加入到工程里。
打开 BasicTutorial1.cpp 所在的文件夹,发现里面有一个 CMakeLists.txt。
打开该文件,发现它是一个单独的完整的工程的定义。


  • 打开 CMake-gui
    Source 设定为 Tutorial CMakeLists.txt 的路径,
    Build 先自行设定,例如,同文件夹下 build 路径

  • 点击 Configure
    选择编译器,以及platform,点击Finish。
    发现有报错

    Add the installation prefix of "OGRE" to CMAKE_PREFIX_PATH 
    or set "OGRE_DIR" to a directory containing one of the above files. 
    

    这是一个独立的工程,它需要依赖Ogre, 所以需要指定Ogre的路径。
    首先需要编译 & 安装Ogre。因为之前的学习已经把Ogre编译好了,只需要安装了。OGRE工程中有一个叫 "INSTALL"的工程,生成它就可以了。
    生成完成后,会在OGRE的生成路径下生成一个sdk文件夹。
    sdk文件夹里有一个CMake文件夹,这个文件夹的路径就是 [OGRE_DIR] 了。
    在CMake-gui配置中,把 [OGRE_DIR] 后的 [OGRE_DIR-NOTFOUND] 改为该路径。

  • Generate

  • Open Project

那么,就可以找到在线文档所指的 [FirstScene] 了。

  • 编译

  • 运行
    报错,没有 dll 文件。
    .exe生成的路径与 ogre sdk 的路径不一致。
    作为一个独立应用的话,应该是把 sdk/bin 里的文件,拷贝到当前.exe生成路径下。

    为了偷懒,就直接把当前.exe的生成路径改为, xxx/sdk/bin/
    打开Tutorial 的 CMakeLists.txt,在 project(…) 下面添加两行,指定生成路径。

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "xxx/sdk/bin/") // debug
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "xxx/sdk/bin/") // release
    

    重新 Generate
    重新加载项目
    生成
    运行

至此,一个独立的基于OGRE的应用就完成了。


因为它是一个独立的工程,只有 Tutorial 的代码, 调试不方便,不适合当前的代码分析。所以,对它进行一些修改。

  1. 回退之前对Tutorial CMakeLists.txt 的修改
  2. 打开 Ogre 根路径下的CMakeLists.txt,在最后添加
    add_subdirectory(Samples/Tutorials)
    
  3. 打开 Ogre 的CMake-gui设置界面,重新Generate。
  4. 重新加载Ogre工程
    加载完成后,之前在 Tutorial 工程里的三个项就会出现在 Ogre的解决方案里。
    * 0_Bootstrap
    * 1_FirstScene
    * 2_CamerasAndShadows
    这样就非常方便调试了。

接下来就借助 1_FirstScene 正式进入代码分析。

从 main 函数开始.

[main]
BasicTutorial1::closeApp
true
false
Start
shutdown();
mRoot != null
mRoot->saveConfig();
delete mRoot;
mRoot = NULL;
Stop
Root::startRendering
true
false
false
true
true
mActiveRenderer->_initRenderTargets();
Start
clearEventTimes();
mQueuedEnd
renderOneFrame();
Stop
[BasicTutorial1::initApp]
true
false
true
false
Start
createRoot()
oneTimeConfig
mFirstRun
mRoot->getRenderSystemByName(mNextRenderer)
mRoot->setRenderSystem(...)
setup
Stop
[BasicTutorial1::BasicTutorial1]
Yes
No
value != null
Start
ApplicationContextBase::ApplicationContextBase
char* val = getenv("OGRE_CONFIG_DIR")
mFSLayer->setConfigPaths({ configDir });
Stop
Stop
BasicTutorial1::closeApp()
Root::startRendering()
BasicTutorial1::initApp()
BasicTutorial1 app;
Start

画流程图的过程中,能对整个引擎的流程的细节有所了解。

在 ApplicationContextBase 构造时,会创建 FileSystemLayer。
并从环境变量 OGRE_CONFIG_DIR 获取值,并加入到路径中。


也是脑子抽风了,想学用 mermaid 来画流程图。
两个小时,就画了这么些玩意儿。
流程图还得是图形化界面来做。
睡觉!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值