OGRE 框架杂谈(一)

针对ParticleUniverse的特效优化以及其他OGRE优化杂谈 0.序 对于使用ParticleUniverse制作的Ogre游戏来说,特效效率问题是很严峻的。很久没有发文章了,这里将结合我最近遇到的问题简单分享一下我面对的问题以及我个人的解决思路。 1. 引子,关于ParticleUnverse的visual particle 阅读详情
在这个纷乱的世界中,还是有不少的高手,强人为迷路的小鸟指明方向。其中就包括引导我进入3D渲染世界大门的OGRE开发小组。其实,大家首先要知道的是:OGRE的本意,是一个以教学为目的进行的开源3D引擎项目。很多人对其推崇至极(当然,我也很喜欢OGRE,并对其开发者抱有崇高的敬意!),不过有些地方,OGRE很明显的在易懂和高效方面,选择了利于教学的方面……

    加上没有合适的编辑器,以及诸如此类的种种原因,使用OGRE开发游戏的实例,还是到了2008~09年才慢慢出现。当然现在发展是迅猛的!!另外,著名的网络游戏,由搜狐开发的天龙八部就是基于它的(据小道消息说OGRE的开发组成员 谢某 就在天龙开发团队中!可惜我没有办法证实)

    下面我先简单的介绍一下OGRE的框架,这个框架由两个文件引入:
ExampleApplication.h
ExampleFrameListener.h
这两个文件很重要,他们替我们做了很多底层的工作(其实是导入了很多有用的C++库),让我们来看看其中的 ExampleApplication 类,在这个类中,有几个比较重要的数据成员:
// 指向Root对象的指针
Root *mRoot;
// 指向程序中摄象机的指针
Camera* mCamera;
// 指向场景管理器的指针
SceneManager* mSceneMgr;
// 指向“帧监听器”的指针
FrameListener* mFrameListener;
// 指向渲染窗口的指针
RenderWindow* mWindow;

    我们如果要创建3D游戏,需要用到这的主要工具就是这几个了。Root负责所有程序的总调配,而Camera像词义一样负责作为摄像机,SceneManager用来管理游戏场景,FrameListener负责游戏的控制,最后RenderWindow负责将游戏“画”到屏幕(窗口)上。

    OK,现在我们开工!这几个工具,可以让我们在屏幕上创建出像CS,魔兽世界那样的游戏画面。但是我总觉得OGRE这群家伙更加喜欢的是星球大战风格的东西,它们的标志就像兽人哦!这是因为其简写ogre的意思就是“食人魔”,/(^o^)/~挺搞的吧?

上面列举了数据成员,让我们来看一下 ExampleApplication  主要的成员函数:
virtual void go(void)
virtual bool setup(void)
就两个?对!就两个,两个就替我们做了很多事情,让我们看看他们是怎么写的:
其中go函数比较简单,内容如下:
virtual void go(void)
{
if (!setup())
    return;
    mRoot->startRendering();
}
实际上在其中调用了我们列举的另外一个函数 setup() ,他会负责进行判断,如果setup()函数执行正确,就会用mRoot调用startRendering()进行渲染,那setup()又做了什么呢?
virtual bool setup(void)
{
    mRoot=new Root();
    setupResources();
    bool carryOn=configure();
    if(!carryOn) return false;
    chooseSceneManager();
    createCamera();
    createViewports();
    TextureManager::getSingleton().setDefaultNumMipMaps(5);
    createScene();
    createFrameListener();
    return true;
}
可以看出来,实际上setup做了很多重要的准备工作,让我们挨个看看。
    首先,实例化了全局的mRoot,我们之前说过,mRoot和他的名字一样,是所有功能的起点,他负责调配所有功能。
    之后我们执行setupResources(),他负责加载游戏需要用到的资源,例如,纹理,骨骼和网格。
    接下里,执行configure(),他就是我们需要对ogre进行的配置,如果配置不成功(例如,用户选择了取消按钮),那么整个程序就退出。
    继续往下执行,chooseSceneManager()实际上执行了
mSceneMgr = mRoot->getSceneManager(ST_GENERIC);
    通过mRoot的getSceneManager()函数获得场景管理器并赋值给mSceneMgr,实际上场景管理器是非常重要的,他负责替我们进行场景的渲染,在这里的ST_GENERIC参数代表普通场景类型,其实他有四个选项可供选择,甚至他有一个场景类型枚举定义:
enum SceneType
{
    ST_GENERIC;                  //普通场景
    ST_EXTERIOR_CLOSE;    //室外封闭场景
    ST_EXTERIOR_FAR;         //室外无限
    ST_INTERIOR;                 //室内场景
}
如果我们只是做个简单的例子,选择第一项就好了。
接下来程序接着往下走,要执行createCamera()了,因为鉴于我们后面要做的工作,所以首先我们要创建一个摄像机来代表我们的眼睛。
然后程序执行createViewports(),这个函数的作用是创建一个视口,他是做什么的?因为游戏渲染并不是直接在窗口上,而是要在视口中渲染,所以要创建这个东西。
virtual void createViewports(void)
{
    Viewport* vp=mWindow->addViewport(mCamera);
    vp->setBackgroundColour(ColourValue(0,0,0));
}
      侯捷老师说:源码之前,了无秘密!看代码吧!

    第一行,我们将我们之前创建的摄像机作为参数传递给视口创建函数,好让视口知道我们的眼睛到底在往哪里看,第二行,这个Viewport又绑定到了mWindow这个渲染窗口上来进行渲染。
后面程序执行到了createScene() 函数,他就是需要我们往场景中加入自己元素的函数了,如果你希望将一辆汽车或者飞机放到虚拟的世界里,就可以使用它了,如果你没有设置它,那么除了ogre在前面调用的 chooseSceneManager() 中创建的简单场景之外,一片荒芜。


    其实到这里,整个游戏画面部分就已经结束了,画面已经渲染到了屏幕上,接下来我们要干什么呢?当然是让画面动起来,不然我们就只是费劲画了一幅画面而已,这又有什么稀罕的呢?
createFrameListener()就是来帮助我们实现与游戏的交互,我们可以看出他实际上是加入了一个监听器,来监视玩家到底做了什么操作,然后会根据玩家的操作来具体修改每一帧的画面。

      搞了这么一大通,上面的setup()如果成功,那么最后go()函数的最后一行,就会把我们设定好的程序进行渲染。当然还是由最主要的mRoot来干。

       这里只是最简单的说一下这个东西的初步应用。想要知道得更多,下载OGRE代码,准备好开发环境,还有几包咖啡。接下来的几天跟着我一起进去遨游一下吧!(准备趁着国庆,多写几章整理这么久以来的思路和感悟)

OGRE引擎基础RPG游戏开发探索 OGRE(面向对象的图形渲染引擎)是一个高级的C++开源框架,用于创建3D图形应用程序。OGRE以解耦、组件化和场景图管理为特点,为开发者提供了一个直观和灵活的平台,以减少直接与底层图形API打交道的复杂性。它的应用范围非常广泛,从游戏开发到视觉仿真、虚拟现实等,都是其潜在的使用场景。OGRE支持多种编程语言,并且拥有一个活跃的社区,不断为其贡献各种扩展插件和工具,进一步提高了开发效率和质量。 阅读详情

相关推荐

ogre 游戏开发框架指南

游戏开发框架指南 游戏开发框架指南 游戏开发框架指南

OGRE简析(一)

------OGRESampleBrowser框架解析 “伟大航路,我把世界上的一切都放在了那里,有种的话就去领取吧” 这是OGRE中文网的一则广告,我想,无论作为OGRE的学习者还是漫漫人生的一名旅人,这句话都是非常不错的激励语。放在这,是否能够让你隐约看到属于自己的新世界? 简介 Ogre(Object-orientedGraphics Rendering Engine)是一款优秀的C

相信爱的力量,坚持自己的梦想。 1451

Ogre的游戏框架

基于OGRE的游戏框架,主要是用状态模式来做的,参考OGRE官网上的教程。

高层游戏引擎——基于OGRE所实现的高层游戏引擎框架

这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统。意念才学疏陋,望众位前辈不吝赐教。由于代码质量不高、环境很难于配置、资源包过大等问题,意念暂先不提供代码和程序,未来有时间的时候组织一下这些曾经的代码,再向外发布。文过三月,也有些新的想法,以后会慢慢跟大家聊的,欢迎拍砖哦^_^。关键字与术语:游戏、游戏引擎、高层引擎、规则、场景、物件、Terrain(地

痞子龙3D编程 2535

Ogre高级框架

一个搭建好的Ogre游戏开发框架,结构良好,比OgreTutrial里的BaseApplication更适用于开发,学习和使用都很有价值。

Ogre - 程序框架

1. 类似于Ogre-wiki上的set up your first application with CMake(没成功过下载和编译过) 2. Ogre是binary的形式, 不用下载ogre源代码和依赖库 3. 可以在此基础上,学习ogre及编写新的程序 4. 基于《Ogre 3d 1.7 beginners' Guide》框架

OGRE框架杂谈(二)

    杂谈第一篇,大概介绍了一下简单的OGRE使用规则。我自己觉得已经非常清楚,昨日被某老友(资深程序员)一句话说得惭愧不已,“你都研究这么久3D知识当然觉得清楚啦!我程序功夫底子也不错,但是只钻研网络数据库方面,你这篇文章基本上对我而言什么用都没有啊!!”    为了弥补这个天大的错误。我决定从最基础的说起。OGRE这个项目,提供了非常多的例子。为了大家能够更快的用起来,我决定介绍3大基础

得思斋 2167

Ogre 示例程序框架分析

本文对Ogre的示例程序框架的源代码进行了分析,展示如何由main开始进入每个示例。

ubuntu下构建OGRE,CEGUI

ubuntu下构建OGRE,CEGUI (2012-03-20 17:34:53) 转载▼ 标签: 杂谈 分类:Ubuntu 转自  http://bbs.hwcrazy.com/blog/b0108b364a4611e1a814000d601c5586/ 1. InstallingCompiler And Configu

lihesen的专栏 1113

OGRE 3D 游戏开发框架指南.pdf

经典教程

告别裸机SPI!用HAL库和CubeMX重新玩转STM32与MAX6675温度传感器

本文详细介绍了如何利用STM32CubeMX和HAL库高效驱动MAX6675温度传感器,实现稳定可靠的热电偶温度监测系统。通过图形化配置SPI接口和封装专用驱动函数,开发者可以快速构建嵌入式温度测量方案,适用于工业控制、物联网设备等多种应用场景。

weixin_42525632的博客 234

ogre shader传参,给uniform传参第二种方式

转载自: http://blog.sina.com.cn/s/blog_7c8dc2d50101ce2p.html Ogre学习如何使用着色器脚本(参考例子CelShading) Ogre中如何使用着色器 (2012-12-05 18:18:04) 标签:  杂谈   分类: Ogre3d渲染引擎 通

lynon的专栏 512

STM32F407硬件SPI驱动ADS1220避坑指南:从寄存器读不到数据到采样值异常的完整解决流程

本文详细解析了STM32F407硬件SPI驱动ADS1220的常见问题与解决方案,包括SPI配置、寄存器读取异常、采样值优化等关键环节。通过CubeMX配置技巧和Keil调试经验,帮助开发者快速排查从通信失败到数据异常的各种问题,实现高精度数据采集系统的稳定运行。

weixin_26878995的博客 158

Ogre碰撞检测,精确到物体网格三角面

Ogre碰撞检测,精确到物体网格三角面 (2010-06-11 19:14:27) 转载 标签: 杂谈 分类: MSN搬家 我们课程的期末项目是做一个蚊子吸血的三维游戏。由于蚊子的体积很小,并且蚊子需要在三维场景中穿梭飞行。因此常规的模型包围盒检测便显得有些不足。例如,场景中有一个台灯,从模型的包围盒看,台灯是一个长方体,如果按照这样来做碰撞检测...

weixin_30642561的博客 175

如何根据芯片手册时序图编写驱动程序

如何根据芯片手册时序图编写驱动程序 对于电子开发者来说,刚刚拿到一个芯片,常用的芯片可以参考网上的例程来做深入了解,对于一个不常用的芯片来说,Datasheet几乎是使用芯片的唯一的资料,所以根据Datasheet时序图写出对应的驱动程序就尤为重要。 本文根据一个简单的例子来阐述根据时序图来编写对应的程序过程。旨在讲解对于初学者应该怎么利用芯片的时序图编写符合要求的底层驱动程序(老鸟请跳过)。 下载芯片的Datasheet,(个人常用http://www.21icsearch.com/)如..

weixin_36447711的博客 1万+

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧)

本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。

nokia的博客 997

2010年的杂谈

<br />      很久很久没有写博客了,其实我是不太愿意写博客的,我习惯用精简的一两句话来来概述我的想法和收获并发在微博上,而不是博客上。博客是需要很多文字的,而我又不爱讲话,自然没有太多话要讲。不过,此人已下决心要改变此现状。下面我把收获分享给大家。<br />      我的搜索技能收获:1.浏览器背景色的设置,浅蓝色。2.360安全卫士->网盾->广告过滤。3.google翻译,可以查看国外网页。4.多去论坛(技术、心灵、电影、娱乐、生活、资讯)5.邮箱阅读功能(qq、163)。<br />  

超越 1028

WRF中使用ERA5再分析数据

   本人在做一些实例时,需要用到最新的ERA5再分析数据集,其中我下载的是ERA5 hourly data on pressure levels form 1979 to present和ERA5 hourly data on single levels from 1979 to present中的3天数据。 1、注册climate copernicus账号 下载ERA5数据前先要注册其账号 2、选择变量    WRF中对于气象数据的字段有具体的要求, ......

GIS 8171

游戏引擎起步杂谈

那要看你基础有多深厚,如果一点基础都没有,又想要开发rpg这些大东西的,建议你先玩一玩rpgmaker,很多人说rpgmaker太小儿科,但是玩rpgmaker看到的不是开发技术而是开发方法,也许这些开发方法很落后看起来很低端。但是当你玩过知道那么点东西之后,日后你用unity想做一个游戏才不会至于啥都不知道,游戏里面一堆对象怎么管理,一堆数据往哪儿放,怎么安排level才方便调节,游戏内容比如剧

big_bit的博客 634

DSP TMS320F280049之CCS工程的建立(库函数版)

TMS320F280049 DSP是TI最新出的一款C2000系列的DSP,主频为100MHZ,功能较为强大,具有较多的片上模拟外设。这一节主要讲述如何新建F280049的CCS工程。 Step1.下载文件: 下载C2000Ware软件并安装。下载地址如下: http://www.ti.com.cn/tool/cn/C2000WARE?keyMatch=C2000Ware%2...

fanxianyan1993的博客 1万+

从零搭建Obsidian智能知识库:Ollama本地模型与Copilot插件实战指南

本文详细介绍了如何从零搭建Obsidian智能知识库,结合Ollama本地模型与Copilot插件实现高效知识管理。通过本地部署AI助手,用户可以在保证隐私安全的同时,快速检索和整理笔记,提升工作效率。文章涵盖硬件准备、Ollama部署、插件配置及实战技巧,适合需要高效知识管理的专业人士。

weixin_29230773的博客 631
上一篇: OGRE框架杂谈(二)
下一篇: 对一个C++函数的效率优化(好)
凭谁问
博客等级 码龄15年 178粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值