OGRE
文章平均质量分 71
大叔才是主流
这个作者很懒,什么都没留下…
展开
-
菜鸟学习OGRE和天龙八部之四: 地表贴图的实现
国庆大假,没耍成,天天写代码,悲剧...地表我已经成功载入,也走了不少弯路...犯了很多低级错误...不然半天都可以搞定的事情,郁闷 天龙八部的地表算是比较难搞的了,至少我这样认为,由于自己没多少OGRE经验,不清楚地形的载入过程,于是看TSM源码, 发现TSM真是破,破到无法解释啊,居然只支持一个地图一个纹理,看着天龙里面几十个纹理,我只有叹气啊 于是打算用ET原创 2009-10-09 09:28:00 · 5286 阅读 · 2 评论 -
用Ogre固定渲染管线实现火炬之光X-RAY效果
游戏的遮挡半透,一般2种方法,一种是天龙的那种,让遮挡的建筑物半透明,一种是火炬之光的这种,X射线那种好?其实达到效果都行,火炬之光不能用第一种,因为他的模型都是很大很大的,建筑一透,全透了,很多地方可能还会穿帮,我的游戏一直用的第一种,也没去研究Xray,但是有朋友问起这个问题,就花了2天时间详细研究了一下.不研究不知道,一研究才发现,其实有很多细节要注意的呢,那我们开始分析了1.火炬之光中人物不能自己挡自己.解决方案:不写深度就完了,深度永远控制在遮挡物那里,2.火炬之光中有的建筑可以透,有的却不能透,原创 2011-04-15 21:44:00 · 12731 阅读 · 1 评论 -
Ogre的渲染优化心得(二) -- Renderable和渲染批次, MovableObject和摄像机裁剪, SimpleRenderable和地形
<br />优化之前,先理解优化的原理.<br /> <br />1).Renderable和渲染批次:<br /> 渲染批次是神马?自己去看教程,简单讲,他极大地影响渲染的效率,所以渲染批次尽量少.比如10个批次,渲染10000个三角形,比10000个批次,渲染10个三角形速度快得多,<br /> 怎么才算一个批次?渲染一个Renderable就算一个批次,Renderable是Ogre中最小的渲染单元,所有需要渲染的对象都继承与此.<br />一句话:一个renderable等于一个b原创 2011-03-25 20:28:00 · 4487 阅读 · 3 评论 -
Ogre的渲染优化心得(一) -- 前言
<br /> 做商业网络游戏的话,效率是一个不可避免的话题,为了留更多的空间给客户端的逻辑,那么渲染模块就应该尽量高效.<br />小弟只浅谈一下Ogre的渲染优化,以大家熟悉的天龙八部为例.<br /> <br />以网上流传版本的天龙代码来看,Ogre和CEGUI部分的渲染都有严重的性能问题,<br /> <br />Ogre:<br /> 地形的实现,一个tile,只按材质做了批次优化,并没有按材质做摄像机的裁剪,导致游戏视角下批次增加很多<br /> 静态实体的合并,完全原创 2011-03-25 19:23:00 · 3487 阅读 · 0 评论 -
Ogre渲染优化心得(三) -- 优化天龙八部的地形
地形的实现,一种是用拼格子,每个格子一个四边形,不共用顶点,不能lod,但是一个格子就可以多层纹理,适合2.5D视角游戏,比如魔兽3和天龙另一种就是主流3D游戏做法,共用顶点,lod,缺点是一个地形page的纹理层数和前面那种地形的一个格子一样多...比如8层,其实已经足够,纹理过渡也很自然.拼格子的纹理过渡始终很丑.1)天龙的地形实现原理如下.整个地形分很多tile组合而成,class TerrainTile : public Ogre::MovableObject一个tile是一个MovableObje原创 2011-03-25 20:51:00 · 4741 阅读 · 1 评论 -
Ogre实现圆形小地图,其实和CEGUI无关.
做网络游戏的都会遇到圆形小地图问题,网上也有很多相关讨论的文章,但是都多多少少有些问题.其实,这个问题并不难,只是很多人总是把他和CEGUI结合在一起,往CEGUI混合方向去考虑,自己搞难了自己我们反过来从需要考虑,1。我们每次更新需要的只是1张合成好的正方形图片,正方形图片中间的圆形是小地图内容,周围是alpha透明的,2。这个图片可以用小地图和一个alpha的遮罩合成.遮罩中间圆形像素1 1 1 1 ,周围 0 0 0 03。我们需要做的的只是怎么合成这个图片而已....怎么合成...取得图片像素自己合原创 2010-09-30 12:31:00 · 5390 阅读 · 7 评论 -
用Ogre生成天龙八部的lightmap和minimap的简单方法
自从在一家创业小公司当了客户端主程以后,就忙的没有时间写博客了,整个公司没有一个人有完整的项目经验,所有一切都在摸索中前进,但初生牛犊不怕虎,项目还算进展顺利。但我始终认为,安静下来总结整理一下工作心得是必要的,可惜这个愿望恐怕得等到这个项目忙完以后。周末有点时间,还是可以抽空随便写点东西。lightmap的重要性不用多说,没必要所有阴影都动态去渲染,那些一辈子也不会动的静态物体,贴一张lightmap就行了,可惜Ogre只提供动态阴影给我们,帮人也不帮到底。如何生成天龙八部一样lightmap,如果你去百原创 2010-08-14 19:13:00 · 6838 阅读 · 6 评论 -
实在受不了Ogre的Maya导出插件,所以重写了一下。
<br />自带的mayaExport,说实话,导出的材质脚本几乎每个都要改,问题主要有2个<br /> <br />1)默认值全部会写进去,我了个去,pass和textureUnit里面一堆默认值。。。。要全部干掉<br /> <br />2)所有带透明的图片的材质,不分青红皂白,全部是<br /> scene_blend alpha_blend<br /> depth_write off<br />对于一般的半透明纹理,是对的,我们需要关闭深度写,让半透明的物体不遮挡其他物体。<br /> <br原创 2010-08-09 22:27:00 · 5868 阅读 · 1 评论 -
网上流传的所谓天龙源码
<br />网上流传的所谓天龙源码,其实并不是天龙的。<br /> <br />代码是天龙的前身武侠世界的,很完整,但是没有资源data文件<br /> <br />资源data应该是网友破解的天龙八部的,然后2个拼凑在一起的<br /> <br />所以,如果出现脚本和代码对不上,不要诧异,也不要怀疑你的代码不完整。<br /> <br />就研究来说,还是不错的。原创 2010-07-21 19:45:00 · 8779 阅读 · 7 评论 -
Ogre粒子编辑器,功能山寨PU的...
以前的粒子编辑器,是交给小弟写的,美工一致反应垃圾....压力好大,只好自己操刀重写了一个,花了2周时间,做了个demo,实现了以前功能1.实时更新,只要参数一遍,粒子马上显示效果,以前的参数有一半不能实时更新,原因是小弟他是对粒子实例的操作,而不是操作模板,因为实例一旦创建,很多参数都不能再改变了,所以正确做法是,对模板进行更改,只要参数变化,马上重新创建粒子实例2.undo/redo 撤销和重做很重要,本来想做得更NB,把每步操作都显示出来,让用户随意撤销和重做,后来时间太紧,只好在状态栏消失出来und原创 2011-04-15 20:45:00 · 5538 阅读 · 7 评论 -
Ogre渲染优化心得(五) -- 用硬件蒙皮代替软件蒙皮,用GPU代替CPU
骨骼动画的计算,是比较费时的,因为数据量大.这部分数据,用CPU计算,就是软件蒙皮,用GPU去计算,就硬件蒙皮1.软件蒙皮Ogre本身已经实现了软件蒙皮,默认情况下就是软件蒙皮,计算的代码在void Entity::updateAnimation(void)2.硬件蒙皮需要用shader,把计算放到GPU里面去处理,而shader的代码,也不用自己去写,Ogre本身例子就带有一个支持2个权重的顶点程序,因为一个顶点最多绑定4个骨头,最多4个权重,所以顶点也稍微麻烦,要4种情况都实现,那么,配置顶点程序就应该原创 2011-04-22 19:11:00 · 6131 阅读 · 0 评论 -
Ogre1.7地形浅析
早在1年前,就想好好研究一下Ogre1.7的新地形,但是各种原因导致现在我才下载了Ogre1.73的源码进行研究。而且只能在业余时间研究,Ogre的以前地形一直被人诟病,根本无法用于游戏,于是Ogre爱好者只好自己实现一些地形插件来解决这个问题,比如ETM之类。在国内,比较成原创 2011-09-25 16:51:51 · 7102 阅读 · 2 评论 -
菜鸟学习OGRE和天龙八部之一:OGRE+MFC+OIS
作为一个还没进入游戏行业的菜鸟,进入游戏行业一直是我的梦想,有一天,我深深被天龙八部那漂亮的场景所吸引,决定自己实现一下.也算是对得起我自己的梦想,但是貌似很难,前路漫漫兮, 吾将上下而求索... 一步一步来吧... 折磨了2天,终于成功把OGRE嵌入到MFC里面,并实现了OIS缓冲输入和鼠标显示,看图: 具体实现方法:一 最好抛弃示例框架,实现一个自原创 2009-09-22 19:03:00 · 9557 阅读 · 12 评论 -
菜鸟学习OGRE和天龙八部之五: 水面TerrainLiquid基本搞定
学习任务重,业余时间就少了啊,进度很慢,水面弄了半天都不是很理想,如图 主要是alpha设置的问题导致看起来有格子,反正是透明没有实现很好的渐变,如果一个网格只实现一个级别的透明度,肯定看起来有很突兀, 另外不知道那个纹理缩放0.25和0.3到底有什么用 做法不难,动态算出水平面,然后自己做网格mesh,和做地形差不多. 算法可以用种子填充算法,递归查找,有原创 2009-10-15 04:34:00 · 3224 阅读 · 0 评论 -
一个基于Ogre,适合2.5D游戏比较完美的阴影解决方案
这是我以前升级Ogre引擎,实现的一个方案,愿意拿出来分享下经验。每个精通Ogre的程序员,都会对Ogre自带的阴影方案感到失望,不管是模板阴影,还是投影阴影,都是固定渲染管线的阴影,效果都不好。畅游《天龙八部》都升级到3了,还采用以前的阴影方案,说明要找个理想的方案替换以前的真是很难。天龙的方案是,人物用模板阴影,场景用静态烘培的阴影贴图贴地形上。效果一般般,这是以前很多游戏原创 2013-07-06 22:12:37 · 5073 阅读 · 2 评论 -
在Ogre中实现先进的寻路算法:导航网格寻路
相比传统的路点寻路,包括走格子寻路,导航网格寻路算是很先进的寻路算法,总是寻找最短路径,和最少的节点。我也在引擎中做了一个,1)先划分障碍区域2)合并障碍区域3)计算出导航网格,可以是三角形或者多边形,我采用三角形4)采用A×寻三角形5)寻出的路经修正以上效果在地编中测试,绿色为合并后的障碍区域,粉色为计算出的导航网格,都是三角形。白原创 2013-07-08 10:51:29 · 6396 阅读 · 1 评论 -
地形平滑算法
拉出来的地下不平滑怎么办,笨办法就是美工一个顶点一个顶点的调整,而且效果还不好。实际上程序只要实现一个完美平滑算法,随便一刷,地形就平滑了。平滑算法最重要的就是不能改变原来的地形的大概结构,基本思路,就是和基本思路是和相邻的点取一个混合值。混合公式和alpha混合公式一样。海滩边岩石的平滑效果非常好。原创 2013-06-20 18:33:59 · 4836 阅读 · 1 评论 -
用Ogre做一个效率高又漂亮的水面
以前游戏水面的做法都是用很多张图的序列帧实现的纹理动画,这种固定渲染管线的方式,在最低画质的时候采用特别好,但是对于更高级别的画质,就应该采用更好效果的水面。水面渲染,Ogre有个插件叫Hydrax,效果很不错,但是效率也低的很,没任何实用价值。只好自己做一个。一个漂亮3D游戏水面的,一般有水波模拟,bump mapping,倒影,折射,菲捏尔效果,水下效果等,我准备做一些取舍,实原创 2013-07-07 12:24:44 · 13517 阅读 · 6 评论 -
Ogre天龙八部地形mesh部分的C++源码
Ogre的地形部分历来受人诟病,基本没什么用.听说将来的的Ogre1.7版本会重写地形.期待中...在没有合适的地形可用的情况下,自己手动生成mesh来当地形是一个不错的选择.由于很多人问我天龙八部地形方面的问题,我索性放出自己terrain类的源码.先前我的部分源码有一些问题,这次是最新版本的.其他场景的源码,等我找到工作后可陆续放出,我只是一个待就业的穷学生而已,请见谅原创 2009-12-02 20:52:00 · 9536 阅读 · 19 评论 -
把天龙的地形升级为Splatting地形
只能说,现在主流游戏地形每层之间的混合方式,都是采用Slatting技术,每层地表之间的alpha混合,都是美术在编辑器刷出来的。而老的游戏,比如天龙,还沿用魔兽3那种拼接的地形,比图土地和草地的融合都是做图做好的,而不是实时刷出来的,导致做不了漂亮好看随心所欲的野外场景地表。畅游以这套地形出来的所有游戏,野外地表都有这个问题,反正不好看,而且这么多年也没人去修改一下。实现思路也很简单原创 2013-06-20 17:57:00 · 3810 阅读 · 3 评论 -
Ogre设计模式分析-观察者模式
观察者模式是游戏开发中十分常用的模式,Ogre也大量运用了此模式来监听,比如FrameListener.ResourceListener这种方式比常见的回调函数更好用,因为观察者模式是基于接口的,任何类只要继承这个接口,注册后就可以监听我们需要观察的对象。不想监听,取消注册就行了, 具体实现原理,我们以为FrameListener为例子,然后再举一反三在自己的游戏中使用它,比如场景编辑原创 2010-03-31 21:18:00 · 3167 阅读 · 3 评论 -
Ogre的设计模式分析之-单件模式
小弟从来不盲目崇拜设计模式,项目中也切忌滥用设计模式的,但是有些作用十分不错的设计模式还是应该运用的,Ogre在这方面就十分不错,设计模式筛选的十分得当,代码也十分优雅,对我影响很大,以至于我现在的代码风格完全改变为Ogre式的风格。 由于要设计整个客户端的框架,所以灵活运用Ogre的一些设计模式对项目的帮助也是很大的。先从单件入手吧,为什么需要singleton,因为每个相对独立原创 2010-03-30 23:05:00 · 2706 阅读 · 5 评论 -
菜鸟学习OGRE和天龙八部之十四: 修正水面算法的一些BUG
有朋友说我的源码有些地方填充不到...四向联通是这样的,改成八向就可以了 /** * 种子填充算法,八向连通,用来生成水平面* @param fillPointY 填充点的y坐标*/void ObjectLiquid::boundaryFill4(int x, int z, Real fillPointY){ int index = x + z*(mXSize+原创 2009-11-04 00:56:00 · 2280 阅读 · 0 评论 -
菜鸟学习OGRE和天龙八部之十三: Bloom全屏柔光
搜索了一下cg文件,才发现有这个文件,shader实现的bloom全屏柔光效果,有点朦胧,感觉没漩涡鸣的清晰啊混了2次太模糊了.应该做成blur,囧这fps掉得真快... 由于搜狐并没有提供合成器脚本,所以要我们自己代码实现合成器 我发出自己实现的源码,模糊版本: // bloom CompositorPtr comp = CompositorManag原创 2009-11-04 01:11:00 · 3884 阅读 · 0 评论 -
菜鸟学习OGRE和天龙八部之九: AXP档案的直接载入搞定
直接载入AXP格式的文件包,高效又方便,纠结了半天,在网友的帮助下得到启发OGRE默认的2种档案格式一个是文件夹,一个是Zip压缩包.不过OGRE提供了自定义档案载入的接口,就是说我们可以自己定义任何类型的档案,比如AXP把AXP档案交给资源管理器管理,管理器定位到所有资源,资源中的materi之类的脚本文件自动就会分析,如果是OGRE支持的文件格式,比如dds之类,需要的时候原创 2009-10-21 04:53:00 · 9857 阅读 · 0 评论 -
菜鸟学习OGRE和天龙八部之八: 水面方格效果和光照BUG的修正
进游戏看了下水面,豁然开朗,其实游戏中也能看见一定的方格,只是放大了效果不明显,于是想到texture scale那个参数,理解成纹理坐标缩放更准确,如果等于0.25,就表示4X4,16个网格用一个图片本来开始我也这么想的,不过有的texture scale是0.3....放我放弃了这个想法,其实0.3一样的,就画0到0.9之间,最后0.1就clamp修正后效果如图,和游戏一摸一样原创 2009-10-17 13:44:00 · 2895 阅读 · 0 评论 -
菜鸟学习OGRE和天龙八部之七: frame帧动画数据格式搞定,已修正关键帧
准备破解frame数据格式,用UE打开一开,很明显的发现了Serializer_v1.10这几个字样,很明显,是采用Serializer这个类来写入的而且应该是SkeletonSerializer,为了验证,UE看看二进制代码,先看看此类的几个文件块枚举 enum SkeletonChunkID { SKELETON_HEADER = 0x1000原创 2009-10-16 23:01:00 · 3264 阅读 · 3 评论 -
菜鸟学习OGRE和天龙八部之六: 地表和水面的normal搞定,光照正常了
自己做的mesh都要做法线,好受到光照的影响,水平面的法线很容易地表就相对麻烦一些,求地表顶点法线,可以先求平面的发现来完成平面上2个矢量叉乘就可以得到平面的法线,然后归一化就好,如果你还想效果更平滑,可以4个平面求平均法线,如图:我是懒人,只用1个,不想用4个求平均.但是如果地图里面有很近的点光源之类,不求平均法线就会一格一格的亮度,不平滑,给出求一个平面法线的算法原创 2009-10-15 23:50:00 · 3178 阅读 · 1 评论 -
菜鸟学习OGRE和天龙八部之三: GridInfo和HeightMap文件的数据格式(已更正)
用其他大侠资源提取工具,可以提取到场景数据,有些数据格式是XML文件,很容易看懂,而有些就不能直接打开,要自己提取数据了,比如GridInfo和HeightMap文件,一个是网格文件,一个是高度图文件,十分重要,我准备先研究这2个家伙. 先说网格文件:找到网上大侠的一些研究资料:http://www.mobilegamebase.com/blog/article.asp?id=17原创 2009-09-23 19:19:00 · 4626 阅读 · 0 评论 -
菜鸟学习OGRE和天龙八部之二: 天龙八部AXP数据格式搞定(2009.10.19)
站位编辑,过段时间再写...因为现在有大侠写了资源提取工具,我暂时不用自己去写了哇------------------------------------------------------------------------------------------------------- 本来想偷懒的,但是不知道为什么OGRE的资源要一个一个写文件夹,很囧...那我要全部载入怎么办..原创 2009-09-23 19:16:00 · 6842 阅读 · 1 评论 -
菜鸟学习OGRE和天龙八部之十五: 添加MFC的菜单,来控制场景的显示
为了方便查看,添加了一些菜单功能 实现起来也很简单,点击菜单就是bool值的转换而已,然后在frameStarted里面更新:1, 做一个全局的静态类来保存这些全局的bool值变量,因为这些变量要跨几个文件用到,需要全局的,2, 自己添加ON_COMMAND消息,并实现消息响应函数,函数就是bool值的转换而已3, 添加ON_UPDATE_COMMAND_UI消息,并原创 2009-11-06 05:31:00 · 2832 阅读 · 0 评论 -
菜鸟学习OGRE和天龙八部之十一: ParticleSystem 粒子系统基本搞定
天龙X部粒子系统在OGRE的基础上通过插件形式自定义了一些粒子系统: 添加发射器1个PolarEmitter 添加效果器6个ColourFadingMeshAnimationAffectorMeshRotatorMovementRevolutionScaleInterpolator 添加的Renderer 2个meshtexcoord_billboard 场景里面原创 2009-10-31 18:21:00 · 5509 阅读 · 2 评论 -
菜鸟学习OGRE和天龙八部之十二: WCollision 地面碰撞搞定
天龙八部里面人物和地面物体的表面的碰撞时用WCollision来做的 比如桥之类,不属于地表,属于物体,没法用地形的高度检测,但是人要过去,就做了一层透明的碰撞表面盖在上面 我用黑色材质标识了出来,如图: 至于wcollision二进制文件的数据格式也很简单: 前8个字节不重要,应该是版本号和三角形总数吧,貌似总数不太对接下来的数据就是WCollisi原创 2009-11-01 22:39:00 · 3836 阅读 · 7 评论 -
天龙八部二进制文件 读写序列化类
可以方便地实现天龙二进制的读和写 首先是序列化类 #ifndef __CORE_SERIALIZER_UTIL_H__#define __CORE_SERIALIZER_UTIL_H__#include #include using namespace Ogre;namespace Core{ // Endian routines exter原创 2010-04-11 13:53:00 · 3998 阅读 · 0 评论 -
应要求,放出读取XML文件相关的源码
地形类的源码里面关联了其他类的一些东西,其实就是XML读取的帮助类而已 TLBBFileBuffer这个类就是一个内存缓冲而已,简单说就是一个uchar的数组... 用来把2进制文件一次性读取到内存中而已. 我的代码里面只把XML类型的文件读取到内存里面,其他文件比如heightmap等,并没有用这个类来读取 TLBBFileBuffer这个类没什么东西,原理就是: DataStrea原创 2009-12-20 18:52:00 · 2546 阅读 · 3 评论 -
最近在忙着写地形编辑器...所以更新慢了点哈
换了家新公司做客户端,项目才起步,引擎用Ogre,真是幸福,上班就可以研究Ogre。 第一步就是做地形编辑器。用QT来做界面,MFC彻底地抛弃之~~~我暂时只专心写Ogre方面的代码,QT界面丢给组员去做,到时候再组合起来。 由于是固定视角的2D/2.5D游戏不考虑LOD,不考虑分页,只在乎地表纹理的数量,一个地形最好几百个pixmap用来拼图。思路是地形部分自己重原创 2010-01-28 19:37:00 · 3310 阅读 · 5 评论 -
OGRE的空间变换,translate()的陷阱!
OGRE的空间变换,对于新手来说是一个头疼的问题,而其中的陷阱也是一堆一堆,即使我已经爬出这些陷阱,我还是觉得有必要讲一下.translate()这个神秘的函数.网上发现一个朋友中了陷阱:以下黑体字为论坛某个网友的错误理解:------------------------------------------------------------------------------原创 2009-11-21 22:52:00 · 3360 阅读 · 2 评论 -
适合OGRE程序的调试技巧:logManager
OGRE的程序由于大量使用STL,加上我们也喜欢STL.所以在debug模式下,如果程序稍微大一点,要想调试几乎不可能,那速度不是人可以忍受的所以好用的断点啊,快速监视啊,assert啊,基本不能用. 为了速度,只有在release模式下用log打印日志的方式自己输出重要信息.而要大量使用logManager,就必须要用流的方式来打印数据,可以把字符串和变量连接起来,省去原创 2009-11-19 21:07:00 · 2901 阅读 · 3 评论 -
菜鸟学习OGRE和天龙八部之十八: 获得档案(Archive)文件列表
要获得档案文件的文件列表,只要获得Archive的指针,就可以调用list()函数获得文件列表 但是如何获得Archive的指针呢,先看看资源的载入过程: 先从resources.cfg文件获取资源的路径,资源组,资源文件类型,这3个数据: ConfigFile cf; cf.load("resources.cfg"); 再把这3个数据传入资源定位的函数:Resou原创 2009-11-14 00:26:00 · 3086 阅读 · 0 评论 -
菜鸟学习OGRE和天龙八部之十七: 修正部分地图载入的通用性问题,附源码
有的地图不是tile的整数倍,有的地图没有WCollision文件,有的地图有centre等有的地图没有光照图等等 比如武当的地图不是tile的整数倍,那么就需要调整tile大小,其实只需要稍微改动源码没有经过优化的,比如不需要更改的函数参数可以全部改成const引用,提高效率的自己去优化了, void TLBBTerrain::createTerrain()原创 2009-11-10 06:38:00 · 3793 阅读 · 0 评论