Ogre嵌入MFC傻瓜完全教程(二)

本教程详细介绍了如何将Ogre 3D演示的场景整合到MFC应用程序中,包括理解Ogre Demo的结构及实现场景在MFC窗口的渲染步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇博文中我们已经配置好OGRE的项目的属性了,本篇将讲解如何将场景渲染到MFC的窗口中。

一、Ogre Demo 的结构

为了能够顺利的将Ogre场景渲染至MFC窗口中,我们需要了解OGRE的大致执行过程(如果对这块很熟悉可以直接跳过)。首先打开我们刚开始创建的Demo: OgreApp。在类视图中我们可以看到里面里面只有两个类:BaseApplication 和OgreApp2。
我们先研究一下OgreApp2这个类。打开头文件我们发现这个类的父类是BaseApplication,里面除了构造和析构函数外只有一个虚函数 createScene(),打开它的定义我们看到里面只有五六行代码,每一句代码具体的含义我就不再讲了,这个函数的功能就是创建一个场景里面加载了一个 ogrehead.mesh文件,也就是Ogre的logo,还创建了一个光源。再往下看我们发现了我们特别熟悉的main函数。main函数中仅仅做了两件事,一是声明一个自身对象 app,而是调用go()函数。至于那个try...catch 就没什么好说的了。现在我们就明白了Ogre渲染的起始点就是这个go()函数,下面我们就看看这个go()函数到底做了什么。
打开BaseApplication 的头文件,我们看到BaseApplication 继承了一大堆的类,我们暂时先不管它们。在研究go()之前我们先看一下这个类中几个比较重要的变量。Ogre::Root *mRoot;  Ogre::Camera* mCamera; Ogre::SceneManager* mSceneMgr; Ogre::RenderWindow* mWindow;从名字上我们就知道这几个变量的含义分别是根、主摄像头、场景管理器、渲染窗口,它们的功能我们也能猜出一二。这四个变量对一个Ogre应用程序来说是必不可少的。下面找到go()转到定义我们发现它也只是做了三件事而已(前面的那个#ifdef _DEBUG的意思你懂的)一是调用setup();二是调用startRendering();三是 destroyScene();
我们再找到setup()的定义看到里面做的事情就比较多了。
1、new了一个 root 对象 mRoot ,这个mRoot非常重要,它贯穿整个Ogre应用的始终。
2、调用 setupResources() 通过它的源码我们知道它主要完成的是配置资源的功能。
3、调用 cofigure() 显示配置窗口,手动配置渲染系统的属性。
4、调用 chooseSceneManager() 选择场景管理器
5、调用 createCamera() 创建摄像机
6、调用 createViewports() 创建视口
7、调用 setDefaultNumMipmaps() Set default mipmap level
8、调用 createResourceListener() 资源侦听
9、调用
OGRE(O-O Graphics Rendering Engine) 使用指南________________________________________________________________1 作者_________________________________________________________________________ 6 序____________________________________________________________________________7 教程的目的_________________________________________________________________ 7 读者要求___________________________________________________________________ 7 教程的由来_________________________________________________________________ 7 OGRE简介___________________________________________________________________ 8 OGRE特点_________________________________________________________________ 8 效率特性__________________________________________________________________8 平台和3D API 支持________________________________________________________ 8 网格Meshes_______________________________________________________________ 8 场景特性__________________________________________________________________9 特效______________________________________________________________________9 其它特性__________________________________________________________________9 OGRE中的模块_____________________________________________________________ 9 OgreMain 模块____________________________________________________________ 10 SDL 平台管理模块________________________________________________________ 11 Win32 平台管理模块_______________________________________________________11 BSP 场景管理_____________________________________________________________11 文件系统插件_____________________________________________________________11 GuiElement 插件__________________________________________________________ 11 OctreeSceneManager 插件___________________________________________________ 11 ParticleFX 插件___________________________________________________________ 12 Direct3D7 渲染系统插件____________________________________________________12 Direct3D8 渲染系统插件____________________________________________________12 SDL 渲染系统插件________________________________________________________ 12 3ds2oof 工具______________________________________________________________12 3Dstudio Max 导出器_______________________________________________________12 位图字体创建工具_________________________________________________________12 Milkshape3D 导出器_______________________________________________________ 12 Python 接口______________________________________________________________ 13 XML 转换器______________________________________________________________13
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值