OGRE思绪
文章平均质量分 75
wangwang123654
这个作者很懒,什么都没留下…
展开
-
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(3)
第一部分 游戏引擎技术简介第一部分所需所有图片 引擎概述 曾经有一段时期,游戏开发者关心的只是如何尽量多地开发出新的游戏并把它们推销给玩家。尽管那时的游戏大多简单粗糙,但每款游戏的平均开发周期也要达到8到10个月以上,这一方面是由于技术的原因,另一方面则是因为几乎每款游戏都要从头编写代码,造成了大量的重复劳动。渐渐地,一些有经验的开发者摸索出了一条偷懒的方法,他们借用上一款类似题材的游戏中的部转载 2009-12-17 14:37:00 · 563 阅读 · 0 评论 -
把Ogre log输出到CBCGPDockingControlBar
把Ogre log输出到CBCGPDockingControlBar 1.定义类继承自CBCGPDockingControlBar和Ogre::LogListenerclass COutputBar : public CBCGPDockingControlBar, public Ogre::LogListener2.重载Ogre::LogListener的messageLogg转载 2009-12-10 17:34:00 · 354 阅读 · 0 评论 -
Ogre中查询器Mask类型
当使用场景查询时还有一件事要考虑。假设你在场景里加入了一个公告板或者粒子系统,并且想要移动它。你会发现查询不会返回你点击的公告板。这是因为SceneQuery还存在另外一个Mask,查询类型Mask(QueryTypeMask),它限制了你只能选择这个标记指定的类型。默认情况是,当你作一个查询时,它只返回实体类型的物体。 在你的代码里,如果想要查询返回公告板或者粒子系统,则你要转载 2009-12-10 17:33:00 · 443 阅读 · 0 评论 -
在Ogre中使用OIS的两种模式
有些东西写下来一直就丢在硬盘里面2009年1月10日星期六 关于OIS的输入要开始考虑游戏输入的问题了,以及开始加入CEGUI也要考虑加入输入的问题。先把OIS的输入简单回忆一下。OIS有两种输入模式:非缓冲输入以及缓冲输入。无论用哪种输入方式,都应该有个输入设备管理器先,例如:(这代码仅仅是举例而已) 在Ogre中的一个例子。。。。 OIS::Inpu转载 2009-12-10 17:32:00 · 383 阅读 · 0 评论 -
OGRE中的四元数与旋转
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://stdsoft.blogbus.com/logs/35987602.html 想象一个物体在3D空间中移动的过程,该物体必然会涉及到旋转。例如一个怪物,他的运动方向会改变,要改变其方向只需要对其进行旋转即可。旋转的方式大致分为三种:Euler旋转,矩阵旋转,以及四元数旋转。这里稍微记录下我目前对于四元数旋转的理转载 2009-12-13 21:58:00 · 424 阅读 · 0 评论 -
与OGRE相关的概念
Viewport(视口) 某个Camera将要用来展示其场景的区域。 RenderWindow是所有物体展示的基本窗口;SceneManager可以用来创建和管理Camera。我们必须告知RenderWindow哪些Camera正在展示它们的场景,这些场景将要画在窗口的哪个部分。 这个我们要告诉RenderWindow的,某个Camera将要用来展示其场景的区域,就是原创 2009-12-10 11:08:00 · 355 阅读 · 0 评论 -
OGRE资源相关分析
ResourceResource的类继承体系如下: Resource代表着一类可以被载入的资源,比如Mesh,Texture等。每个资源有其唯一的Name,根据Name可以定位到某个资源,这样也确保了资源只能被载入一次。并且Resource必须在一段时间不使用的时候要被删除。要实现为Resource子类有以下要求:1. 构造函数和Resorc转载 2009-12-10 10:03:00 · 884 阅读 · 1 评论 -
如何在ogre游戏界面添加自己的信息,比如显示某变量的值
如何在ogre游戏界面添加自己的信息,比如显示某变量的值 // 首先在E:/ogre/media/packs的OgreCore.zip里面打开OgreDebugPanel.overlay,然后修改如下: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter转载 2009-12-10 16:40:00 · 404 阅读 · 0 评论 -
简要分析Ogre的渲染队列实现原理(二)
简要说Ogre渲染主流程分三步使用渲染队列:清空、构造和访问,这个过程在每一帧的绘制过程中重复执行。渲染队列的清空 Ogre在每一帧渲染前都会先清空渲染队列。熟悉Ogre渲染流程的很容易看到在SceneManager::_renderScene() 这个方法中调用prepareRenderQueue()方法。这个方法的实现很简单,就是清空现在的渲染队列并且初始化渲染队列的一些配置参数。渲转载 2009-12-10 16:35:00 · 838 阅读 · 0 评论 -
OGRE从程序加载地形
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://stdsoft.blogbus.com/logs/35976808.html据说这就是从程序加载地形的标准方法,但我觉得还不够灵活:setWorldGeometry()有重载形式,一种用于加载配置文件,另一种我们可在程序中使用,以达到手工加载的功能。这里,SceneData被 typedef 为std:map,它存储转载 2009-12-13 21:58:00 · 503 阅读 · 0 评论 -
Ogre中的碰撞检测(5)
相交查询,就是遍历所有的对象,找到一对一对的相交物体,不过感觉不太实用。下面是网上找出来的相关代码:CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> //创建相交检测 IntersectionSceneQuery* p原创 2009-12-10 17:29:00 · 301 阅读 · 0 评论 -
Ogre中的碰撞检测(7)
前面的碰撞检测都是基于AABB的,并不精确, MOC利用射线场景查询,通过遍历Mesh的三角片,求得Mesh级别的碰撞检测,是个很好的轻量级碰撞检测工具。而且支持ETM和TSM两种地形。下载地址:http://www.artifexterra3d.com/另外该作者编写的编辑器也不错。转载 2009-12-10 17:30:00 · 452 阅读 · 0 评论 -
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(1)
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统。意念才学疏陋,望众位前辈不吝赐教。由于代码质量不高、环境很难于配置、资源包过大等问题,意念暂先不提供代码和程序,未来有时间的时候组织一下这些曾经的代码,再向外发布。 文过三月,也有些新的想法,以后会慢慢跟大家聊的,欢迎拍砖哦^_^。关键字与术语:转载 2009-12-17 14:32:00 · 619 阅读 · 0 评论 -
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(7)
第四部分 结论和展望 通过对游戏世界的演绎,对游戏逻辑的归纳,以及对游戏底层工具的融合,逐步诞生了我们现在的框架。为了使框架更能经得起检验,我们使用了一些设计模式提供的方法来保证框架的安全性。现在的高层游戏引擎说明了一点,对于这个游戏,我们的框架达标了。但用这个框架开发一个新的游戏是否也会达标?答案是否定的。如果用这个框架去开发一个RPG游戏,那我们还缺技能、道具等诸多系统;如果去开发一个纸牌游转载 2009-12-17 14:43:00 · 451 阅读 · 0 评论 -
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(6)
零件组装:具体游戏层的构建过程框架搭完后需要一个具体的东西来证明我们的框架是否达到了预期目标。综上,我们对这个框架的要求是:1、 利用框架开发的开发者不必要关注框架的底层细节,不必要关注OGRE,只需要关注各个组分之间的逻辑关系和存在方式。即满足框架良好的封装性。2、 上层逻辑允且只允许与框架打交道。同时,框架中可以包含OGRE中无法绕开的重要组分。3、 如果是框架没有完成的功能,应该可以通过对框转载 2009-12-17 14:41:00 · 527 阅读 · 0 评论 -
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(2)
Preview 游戏形态与其所决定的程序形态电脑游戏的本质是模拟现实“游戏是先于人类的,许多学者在关注游戏时候发现,在自然界哺乳类动物里存在着大量的游戏行为……“尽管游戏的历史是悠远久长的,但人类把它当作一种理论研究对象却是在近代才开始的事。德国诗人和剧作家席勒在研究艺术起源的问题上曾以‘艺术起源于游戏’的大胆一说而语惊四海。他认为,人类在现实生转载 2009-12-17 14:34:00 · 562 阅读 · 0 评论 -
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(5)
第三部分 实作:基于OGRE图形引擎的游戏框架第三部分所有图片点击放大场景系统:OGRE场景体系的分离和重新合成窗体底端 首先我们发现,OGRE场景系统似乎现在和我们所理解的场景系统有点不合。OGRE是用一种渲染方面的理解来考虑场景的,而作为一个游戏似乎需要考虑得更远。“游戏需要渲染,但游戏不仅仅是渲染”。 要融入OGRE图形系统,需要程序结构和习惯的调整,而且所写转载 2009-12-17 14:39:00 · 559 阅读 · 0 评论 -
OGRE地形配置文件解析
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://stdsoft.blogbus.com/logs/35894681.html 既然你已经做出决定要使用地形场景管理器,那么下面介绍的一些东西是你需要知道的。 场景中地形的形状和着色是由高度图、地形纹理和地形细节纹理共同计算而得的。高度图是一张简单的灰阶图,其中每个像素点代表一个高度值,0代表这个地形的地面转载 2009-12-13 21:57:00 · 503 阅读 · 0 评论 -
(转)OGRE根据高度图创建Terrain地形流程分析
OGRE可以通过两个接口来生成地形,分别是void TerrainSceneManager::setWorldGeometry( const String& filename )以及void TerrainSceneManager::setWorldGeometry(DataStreamPtr& stream, const String& typeName ),两者的根本区别就是一个是传递地形信息转载 2009-12-13 21:55:00 · 493 阅读 · 0 评论 -
OGRE--非主流计算相对局部坐标
在做3D编程的时候,很多时候会计算一个点相对于于另一个点的局部坐标.通常的做法是利用矩阵或者其它的操作方法.这里提出一个非常简单的方法,不用涉及到矩阵,思路也比较简单,代码更简单.效率也许不比较差.上代码:/* getLocalPosition 计算pOtherNode相对于pRefNode的局部坐标*/Ogre::Vector3 getLocalPosition(转载 2009-12-10 17:33:00 · 303 阅读 · 0 评论 -
简要分析Ogre渲染队列的实现原理(一)
渲染队列在Ogre中是一个重要的概念,在场景中的所有物体都会在绘制前被Ogre放入到一个特定的渲染队列中。渲染队列主要起两个作用:1.确保正确的绘制顺序。比如先绘制天空盒再绘制一般物体,最后绘制界面。2.提高渲染效率。Ogre将具有相同pass的物体放在一起进行绘制,目的是尽可能减少渲染状态的切换。一般用户常用的是在entity中设置渲染队列序号,其实整个渲染队列的工作流程远远比这个复杂,但基本不转载 2009-12-10 16:33:00 · 539 阅读 · 0 评论 -
ogre射线
CEGUI::Point mousePos = CEGUI::MouseCursor::getSingleton().getPosition(); Ray mouseRay = mCamera->getCameraToViewportRay(mousePos.d_x/float(arg.state.width),mousePos.d_y/float(arg.state.hei转载 2009-12-10 16:31:00 · 284 阅读 · 0 评论 -
Ogre文件格式
Ogre不仅支持许多普通文件格式,而且支持Ogre使用的特有文件格式。支持的普通文件格式: .bsp Quake bsp文件 .shader Quake 3 shader文件 .ttf True type字体文件 .png,.tga,.jpg,.raw,.gif,.dds以及更多FreeImage支持的图像格式。参见图像文件格式简要总结.cg Cg shader文件 .转载 2009-12-10 15:52:00 · 327 阅读 · 0 评论 -
Ogre、Shadow Map、和其他
Ogre的影子分为两类:模版阴影和基于纹理的阴影。(1)模版阴影 SHADOWTYPE_STENCIL 分MODULATIVE,ADDITIVE两种。 不过模版阴影我不太care,没有太仔细看。大致基于闭合多边形的影子,我猜可能类似于Shadow Volume的实现(d3d sdk的那个例子我就没看懂过,干), 但是奇怪的是, Ogre的这种模版阴影的效率居然还相当高。 目测市面上一些O转载 2009-12-10 15:51:00 · 448 阅读 · 0 评论 -
Ogre场景树更新过程
Ogre场景树更新过程 好久没写Blog,哎,还是有点偷懒了,今天就把原来做过的一个分析整理出来吧,主要关于Ogre场景树的更新过程。 Node的更新是分两个阶段的: 1:当前帧设置节点局部SRT(缩放、旋转、平移) 2:下一帧计算节点的世界SRT 也就是说Ogre不赞成你依赖他的场景树,试试运行这个例子:SceneNode *root = mSceneMgr->get转载 2009-12-10 15:50:00 · 377 阅读 · 0 评论 -
ogre的主要渲染流程
很早以前就想写一些关于OGRE的文章了,一直没机会。 理解一个渲染引擎,我觉得最重要的是先抓住了它的主架构,它的主线,渲染流程,不然的话,一个引擎几万行,甚至几十万行的代码,光是打开solution就能吓你一跳了,OGRE也有十几万行的代码量,我一开始看它的时候也是无从下手,感觉代码太多了,不知道从哪开始看好,这个class看看,那个class看看,由于对整个引擎没有一个清晰的认识,看过了也印象不原创 2009-12-10 15:46:00 · 590 阅读 · 0 评论 -
Ogre中的碰撞检测(完整版)
Ogre中的碰撞检测(完整版)原创UI动力 韩举http://www.uipower.com/请注明转载地址Ogre是开源的封装了DirectX和OpenGL的3D引擎Ogre的下载和安装见http://www.uipower.com/bbs/dispbbs.asp?boardID=24&ID=225&page=1此主题相关图片如下:http://www.uipower.com/bbs/Uploa转载 2009-12-10 15:30:00 · 430 阅读 · 0 评论 -
转自OGRE的一些游戏编程的链接
C++ / STL[edit]Introduction / HelpC++ slides Optimisations, Templates and good use of heritage and polymorphisms (http://www.rz.rwth-aachen.de/computing/events/2002/hpc++/HPC++1.18-1.pdf)转载 2009-12-10 14:04:00 · 428 阅读 · 0 评论 -
OGRE疑问解答
1. 缓冲(buffered)输入方式和非缓冲(unbuffered)输入有什么区别? unbuffered:不断的响应按键信息,直到按键放开。例如,按下上下左右,使得角色持续移动。 一般来讲适合于3D场景漫游过程,当在每帧渲染之前,系统捕获输入设备状态,并根据这些状态对场景中的物体和摄象机进行控制。 buffered:在一个按键放开之前,只处理一次输入信原创 2009-12-10 11:08:00 · 387 阅读 · 0 评论 -
[Ogre] Ogre实现场景动态装载卸载
常玩日本游戏的朋友们应该都知道。日本RPG中经常有一些场景切换的画面。比如在角色走动过程中,突然进入战斗状态,他会先把先前的场景渲染成一张图片,然后移开这张图片,在渲染另一个场景,譬如是战斗场景。最近在休闲网络游戏时,也碰到一个这样的需求。就是在一局游戏中动态的切换场景。这个项目时间比较紧迫,场景直接用了解析OFusion的OSM文件来做。但是我遇到一些问题是OfusionLoader这个东西转载 2009-12-10 10:43:00 · 539 阅读 · 0 评论 -
用Ogre实现《天龙八部》场景中水面(TerrainLiquid)详解
本文主要讲的是《天龙八部》游戏中水面(TerrainLiquid)的具体实现,使用C++, Ogre1.6 。 天龙的水面做的比较简单,虽然没有倒影,但动态纹理+深度图做出的效果还行,看着不是特别假。一般情况下,TerrainLiquid有一层动态纹理,有的还会有一层1D深度图纹理,深度图纹理用来控制不同深度水面的透明度。另外还会给出一个坐标,可以称之为种子坐标,通过这个坐标可以填充整个水转载 2009-12-10 15:53:00 · 513 阅读 · 1 评论 -
Ogre学习记录
1: 设计初衷它设计初衷是完全跨平台的。抽象的接口隐藏了平台相关的细节。它设计初衷是大幅度支持扩展的。支持多种场景类型,独立出平台和3D接口限制。2: 基本类结构关系Roo:对象为一切的入口,它负责创建Ogre的所有基础元素,三大基础元素大致包括:场景管理器,绘制系统,资源管理器。场景管理器:场景节点,动态对象。资源管理器:资源组管理,资源管理渲染模块:硬件缓冲区管理,原创 2009-12-10 15:57:00 · 456 阅读 · 0 评论 -
Ogre中的碰撞检测(6)
在3中,我提到检测到碰撞时候,后移一个单位,摄像机会抖动,现在通过记录摄像机上步移动偏移量,如果检测到碰撞则反移回来,可以解决这个问题。下面是修改后的代码: <img id="Code_Closed_Image_093847" style="display: none;" onclick="function onclick(){this.style.display=none转载 2009-12-10 16:30:00 · 532 阅读 · 0 评论 -
Ogre中的碰撞检测(4)
通过设置不同的掩码,可以实现有选择的碰撞检测,下面的代码中,ogre头能被查询器检测到,而机器人由于掩码不同,不能被检测到。 <img id="Code_Closed_Image_141800" style="display: none;" onclick="function onclick(){this.style.display=none; document.getE转载 2009-12-10 16:28:00 · 582 阅读 · 0 评论 -
Ogre中的碰撞检测(3)
在Ogre中,可以创建一个查询器,比如球体查询器,AABB查询器,面查询器等。下面我们以最常用的球形查询器为例来说明:如下面的代码,我们首先创建一个球形查询器,它需要定义一个球体,我们把它的位置,设置为摄像机的位置,半径为10,掩码为第二个参数,默认为-1,通过掩码,可以把碰撞的物体分成不同的组,比如我们设置球形场景查询器的掩码为0x1,则它只检测和它掩码相同物体的碰撞。该摄像机检测到e转载 2009-12-10 16:27:00 · 539 阅读 · 0 评论 -
Ogre中的碰撞检测(2)
Ogre 中,每个节点有AABB(轴对齐包围盒),通过包围盒,可以实现碰撞检测判断。具体实现过程如下: 通过Ogre::SceneNode::_getWorldAABB()可以取得这个叶子节点的AABB(Ogre::AxisAlignedBox),Ogre::AxisAlignedBox封装了对AABB的支持,该类的成员函数Ogre::AxisAlignedBox::intersects()可以判转载 2009-12-10 16:26:00 · 480 阅读 · 0 评论 -
Ogre中的碰撞检测(1)
基于射线查询的方式,实现摄像机和地形的碰撞检测,防止摄像机穿透地面,这也是ogre demo中Terrian例子中的方法。 首先定义 RaySceneQuery* raySceneQuery = 0;在CreateScene时候,创建场景查询 frameRenderingQueued事件中,进行射线查询,设定摄像机位置Code highlighting produced b转载 2009-12-10 16:25:00 · 406 阅读 · 0 评论 -
OGRE+CEGUI+OIS 完美解决鼠标非独占使用
OGRE+CEGUI+OIS 完美解决鼠标非独占使用 最近在用Ogre+CEGUI+OIS做游戏。在开发的过程出现了种种问题,现将问题一一整理,并将解决方案释出,供同好参阅。OIS默认鼠标占用模式是鼠标独占使用,表现为鼠标指针无法移除当前窗口。那么如果想把鼠标指针移除窗体怎么解决呢?让OIS使用鼠标协作模式啊!代码如下: //创建设备OIS::ParamList pl;si转载 2009-12-10 16:23:00 · 278 阅读 · 0 评论 -
修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
本文主要讲的是《天龙八部》游戏的地形和一部分场景的具体实现,使用C++, Ogre1.6,我摸索了段时间,可能方法用的并不是最好的,但好歹实现了。文章可能讲得有点罗嗦,很多简单的东西都讲了。我是修改了ETM(Editable Terrain Manager)实现的地形,其实单单实现天龙八部的地形场景等的载入根本不需要使用ETM,直接用Ogre的顶点->索引->纹理就可以搞定地形,但我要做的是可以实转载 2009-12-10 16:21:00 · 391 阅读 · 0 评论 -
Ogre中的内存泄露
刚开始使用Ogre时总是碰到内存泄露,而且往往是一泄千里,等半分钟才能打完日志,我想这和Ogre中的大量大对象很有关系。下面就来分析一下内存泄露的产生原因。 1. MFC中使用Ogre时发生的内存泄露 这个问题比较有意思,其实并没有发生泄露,而是MFC自作主张的认为发生了内存泄露,实际上内存并不是没有释放,而是在VC报内存泄露之后释放,先来看一看MFC报内存泄露时的调用堆栈: msvc转载 2009-12-10 16:19:00 · 261 阅读 · 0 评论