OGRE
IIIIIIIIIIIIIOO
这个作者很懒,什么都没留下…
展开
-
Ogre的内存分配策略
首先列出涉及到的头文件:(这几个头文件彼此之间相关性挺大的,应该一起看)只在调试期使用:OgreMemoryTracker.h这个头文件中定义了MemoryTracker这个类,用来测试和调试Ogre的内存分配系统的。能跟踪内存的分配、回收、泄漏和统计信息。Ogre使用者不需要关注。OgreAlignedAllocator.h 内存分配无非就对齐和不对齐两种,不对齐的话就不必要转载 2014-06-23 01:19:18 · 627 阅读 · 0 评论 -
Ogre 粒子系统及粒子脚本
粒子系统及粒子脚本粒子系统在三维显示中占有很重要的地位,如3D中的雨,雪,喷泉,爆炸效果等都是粒子系统神奇魅力的表现。我们可以用程序的方式虚拟美国哥伦比亚号航天飞机在太空中爆炸的场景:大大小小的碎片向四处飞溅,耀眼的火花,滚滚的浓烟,在这其中多数元素都是混乱的。从技术的角度讲本场景中的大多数效果得益于一个优秀的粒子系统。烟,火花,这些3D中的效果通常使用粒子系统来创建的。基本概念粒转载 2014-01-06 23:00:32 · 739 阅读 · 0 评论 -
Ogre粒子系统脚本详解
粒子脚本允许实例化地在自己的脚本代码中定义粒子系统,而不必在源代码中进行设置,可以在做任何修改对哦能得到快速的回应,脚本里定义的粒子系统被用作模版,并且多个实际的系统可以在运行时从脚本里被创建。 粒子系统脚本在系统初始化时被装载:默认它在普通资源所在位置搜寻.particle后缀的文件并分析它,如果想分析不同扩展名的文件,调用ParticleSystemManager::getSing转载 2014-01-06 22:57:24 · 748 阅读 · 0 评论 -
基于BVH驱动的OGRE骨骼动画
摘要:OGRE游戏引擎中的角色动画将模型与骨骼文件进行映射。若想在不借助第三方建模软件重新制作模型和动画的基础上更改现有模型的动作,获取与模型匹配的骨骼数据成为一个难题。提出了一种将标准BVH动作文件解析为XML文件的方法,生成与OGRE模型匹配的骨骼文件,将来源广泛的BVH文件作为动作数据,极大地丰富了OGRE角色动画。实验结果证明,转换后的BVH可以与OGRE中的模型融合起来,从而驱动模型。转载 2013-08-11 01:02:25 · 923 阅读 · 0 评论 -
Ogre骨骼动画分析
1 前言骨骼蒙皮动画分两步骤进行:根据时间插值更新骨骼、然后根据骨骼更新每骨骼上的顶点。为了好玩,暂且这样看:在每一个时间点,对每一个骨骼,我们创建一个骨骼魔法,并将骨骼魔法施放到每一个骨头上;有个这些骨骼然后我们开始蒙皮,我们找出每一寸皮肤(一个顶点),并从骨堆里找出这块皮需要依附的骨头,当然骨头的数量都是有限的,一般就十几或翻倍的数量级,所以骨头还是比价好找的。我们将皮贴到骨头上,贴转载 2013-08-10 00:54:41 · 815 阅读 · 0 评论 -
OGRE例子:Demo_Ocean 源码解析
程序共有四个文件:MaterialControls.h :MaterialControls.cpp包含一个Shader属性结构和材质结构。其中Shader属性结构对应于海洋中模型对应VS,PS的一些属性。材质结构中包含了若干这个属性。使用一个容器来存放。另外有两个函数讲述了如何从资源名称中得到scripts目录下的Ocean.controls文件,并从转载 2013-06-27 22:55:54 · 639 阅读 · 0 评论 -
Ogre材质脚本
Ogre材质脚本ambient设置材质的环境光反射属性格式: ambient 正确的参数在0.0和1.0之间取值。直接影响物体材质对环境光反射能力。默认值为白色(1.0 1.0 1.0)。diffuse设置材质的漫反射属性格式: diffuse 正确的参数在0.0和1.0之间取值。直接影响物体材质对漫射光的反射属性。默认值为白色(1.0 1.0 1.0)。转载 2013-06-28 00:10:27 · 970 阅读 · 0 评论 -
使用WTL+OGRE编写3D程序(1) - 基本框架
OGRE是一款十分出色的开源图像引擎,很适合游戏开发爱好者使用。但是本文并不是主要针对游戏开发,而是主要针对实验室的3D研究人员。据我所知,很多从事3D渲染研究的实验室的研究生、博士生都使用基本的3D API,包括Direct3D和OpenGL进行开发。这样做的原因其实也很明显:使用基本的3D API可以对渲染过程进行最好、最细致的控制。但是,对于需要展示渲染结果的项目和研究来说,使用基本的API转载 2013-03-03 17:48:30 · 642 阅读 · 0 评论 -
OGRE+CEGUI+OIS 完美解决鼠标非独占使用
OGRE+CEGUI+OIS 完美解决鼠标非独占使用最近在用Ogre+CEGUI+OIS做游戏。在开发的过程出现了种种问题,现将问题一一整理,并将解决方案释出,供同好参阅。OIS默认鼠标占用模式是鼠标独占使用,表现为鼠标指针无法移除当前窗口。那么如果想把鼠标指针移除窗体怎么解决呢?让OIS使用鼠标协作模式啊!代码如下: //创建设备OIS::ParamList pl;siz转载 2013-03-13 00:49:49 · 849 阅读 · 0 评论 -
Ogre实现场景动态装载卸载
常玩日本游戏的朋友们应该都知道。日本RPG中经常有一些场景切换的画面。比如在角色走动过程中,突然进入战斗状态,他会先把先前的场景渲染成一张图片,然后移开这张图片,在渲染另一个场景,譬如是战斗场景。最近在休闲网络游戏时,也碰到一个这样的需求。就是在一局游戏中动态的切换场景。这个项目时间比较紧迫,场景直接用了解析OFusion的OSM文件来做。但是我遇到一些问题是OfusionLoad转载 2013-03-13 00:46:29 · 1292 阅读 · 0 评论 -
OGRE自定义渲染循环实现
#include "Ogre/Ogre.h"#include "OIS/OIS.h"//引入OIS头文件来使用OIS//创建一个新的称为MyFrameListener,并列出三个公有的事件响应函数class MyFrameListener:public Ogre::FrameListener{ //私有成员来存储InputManager和Keyboardprivate: OIS::转载 2013-03-03 22:06:11 · 562 阅读 · 0 评论 -
使用WTL+OGRE编写3D程序(4) - 多窗口的渲染
(注:本文假设你读过前三节)使用COgreSceneBox只能对一个Static进行3D场景的渲染,如何对多个Static同时进行3D渲染呢?改动的步骤很直观:1. 先尝试建立多个COgreSceneBox的对象,编译。。。运行。。。,结果窗口没出来就弹出了一个断言错误, ms_Singleton != 0,为什么会这样呢?这要从OGRE的内部设计分析,OGRE将Root对象派生于Sin转载 2013-03-03 17:53:26 · 847 阅读 · 0 评论 -
使用WTL+OGRE编写3D程序(3) - 场景的创建和渲染
这一节我们关注这几个函数:Initialize —— 完成OGRE的初始化Render —— 渲染及其它们引出的函数先看看Initialize的实现:// Init ogre BOOL Initialize() { // already inited FALSE_RETURN( (m_pRoot == NULL), T转载 2013-03-03 17:50:00 · 774 阅读 · 0 评论 -
使用WTL+OGRE编写3D程序(2) - 窗口消息函数
(接上文)我使用一个Static渲染3D场景,最基本的需要我们处理的消息和这些消息中的任务是:WM_PAINT --- 在窗口更新时将3D场景渲染到窗口WM_SIZE --- 在窗口大小改变时更新相应的场景大小和比例,当然对于Static之类的控件来说没有什么必要,但是如果你想在一个一般的View里渲染,这是必须的WM_CREAT转载 2013-03-03 17:49:24 · 467 阅读 · 0 评论 -
思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用
1。矩阵和线性变换:一一对应矩阵是用来表示线性变换的一种工具,它和线性变换之间是一一对应的。考虑线性变换:a11*x1 + a12*x2 + ...+a1n*xn = x1'a21*x1 + a22*x2 + ...+a2n*xn = x2'...am1*x1 + am2*x2 + ...+amn*xn = xm'对应地,用矩阵来表示就是:|a11 a12转载 2012-08-24 22:30:02 · 467 阅读 · 0 评论 -
3D图形矩阵变换总结
1、关于坐标系统OpenGL D3D WPF右手坐标系 左手坐标系 右手坐标系OpenGL默认坐标系统是右手坐转载 2012-08-24 22:28:54 · 1079 阅读 · 0 评论 -
艾尔之光中刀光的ogre实现
模拟艾尔之光的刀光,很相似.1 实现随时间或帧速的控制. 参照ogre中的关于轨迹的一个实现:RibonTrail.该实现对于轨迹面片使用类似公告板的技术,面始终朝向摄像机.这不是我们需要的效果.我们需要刀光面片能够沿着刀面的方向展开.所以请忽略它的画法,使用它的整个逻辑结构即可,包括监听节点,面片颜色和宽度随时间的变化.面片使用manualobject或者vertexdata直接构转载 2012-06-03 17:29:30 · 2661 阅读 · 0 评论 -
Ogre的WeaponTrail (刀光)
就是刀光拖尾效果,这个挺有意思,Ogre竟然单写了一个类来实现这个功能。名字叫做RibbonTrail。不过这个类似乎并不太好用,实现的效果是从手握武器的位置沿相对衬的两个方向延伸出片,这样的话,如果手里是把剑,那么效果就不对了。如果手里的武器是长枪,因为手握得位置也不是正中间,所以也不对。。。。 于是又有人写了一个WeaponTrial类来解决这个问题。但是他没有处理缩放问题,转载 2012-06-03 17:35:05 · 1010 阅读 · 0 评论 -
Ogre中使用HLSL的一个例子
本文主要参考的是http://www.ogre3d.org/tikiwiki/HLSL&structure=Cookbook,并据此写了一个在Ogre中使用HLSL的例子。在Ogre中使用HLSL主要分为三部分,首先是材质脚本的编写,其次是顶点shader和片段shader的编写,最后是在应用程序中使用以上程序。我这个例子的功能是将一个模型赋予纹理贴图。详细的就不解释了,看参考的网址即可,主要是注转载 2014-01-10 01:04:53 · 953 阅读 · 0 评论 -
ogre3D学习基础2 -- 顶点程序与片断程序
三、顶点程序与片断程序 顶点或者片断程序定义可以被多个材质使用,唯一的前提条件是必须在引用它之前在材质的渲染通路部分中定义。 一个低级顶点程序示例如下:1 vertex_program myVertexProgram asm2 {3 source myVertexProgram.asm //资源4 syntax vs_1_1 //语转载 2014-01-16 00:44:08 · 1031 阅读 · 0 评论 -
OGRE 1.8 Animation ,动画部分
本系列文章认为你懂得C++ stl的设计概念和设计模式,当然c++你要是压根不会就直接闪人吧。懂点boost最好,Ogre也用了这个。计算机图形学怎么说也得懂点吧?要不然四元数都够你郁闷的了。mesh,material,light,camera,bone,skeleton等这些3d玩意默认你是懂了啊。不懂的话,可以啃图形学,Opengl红宝书,或者是Ogre的tutorial都行。本文的组织方转载 2014-06-23 01:20:13 · 886 阅读 · 0 评论 -
Ogre 1.8 terrain 和 paging 组件
OgreTerrain.h这个头文件定义了两个类:Terrain和TerrainGlobalOption,第一个类很明显是存放具体的地形数据的,第二个是存放地形数据的全局选项的,因为一个地形会有很多个Terrain对象组成(每个Terrain表示某种地形的一小片地域),统一的的配置对象就是TerrainGlobalOption了。OgreTerrainGroup.h定义了Terrain转载 2014-06-23 01:17:54 · 755 阅读 · 0 评论 -
Ogre粒子系统脚本详解
粒子脚本允许实例化地在自己的脚本代码中定义粒子系统,而不必在源代码中进行设置,可以在做任何修改对哦能得到快速的回应,脚本里定义的粒子系统被用作模版,并且多个实际的系统可以在运行时从脚本里被创建。 粒子系统脚本在系统初始化时被装载:默认它在普通资源所在位置搜寻.particle后缀的文件并分析它,如果想分析不同扩展名的文件,调用ParticleSystemManager::getSing转载 2014-07-14 12:39:33 · 705 阅读 · 0 评论 -
Ogre中实现 几何面正反面不同纹理贴图
首先,我的实现是在OpenGL平台下的。主要是借助GLSL shader语言,在shader中判断是几何面的正面还是反面,然后贴上不同的纹理。最初是在RenderMonkey里实现的,要实现此,需要设置Render State的GL_CullMode为NONE。下面给出很简单shader代码,超级简单,不要见笑。 首先,顶点shader:varying vec2 Texcoord;转载 2014-07-19 15:03:53 · 1610 阅读 · 0 评论 -
用Ogre实现无缝地图
用Ogre实现无缝地图 1.7版本之前,如果想用Ogre内建的地形系统实现一个像样的无缝地图,恐怕要闹到抓狂。所幸sinbad在1.7为Ogre加入了全新的地形组件,它囊括了一个地形系统所需要的基本功能,并且具备扩展出丰富特性的能力,使开发者得以避免重复造轮子的麻烦。 以《魔兽世界》为标杆,我们尝试使用Ogre的新地形系统,构建一个类似的无缝地图,它理论上支转载 2014-07-19 15:05:36 · 953 阅读 · 0 评论 -
Alpha混合物体的深度排序
先说个题外话, 本来我想解答一下最近Creators Club论坛上经常出现的一个问题, 意外的是在网上竟然找不到什么全面的答案..这是个有着复杂答案的简单问题:“为什么我的透明物体的绘制顺序不对, 或者有些不见了?”当绘制一个3D场景时, 对图形进行深度排序是非常重要的, 这样离镜头近才画在远处物体的前面. 我们不会希望看到远处的山把近在眼前的建筑给挡住了!如今有三种深度排序方法转载 2014-07-19 15:04:59 · 747 阅读 · 0 评论 -
Ogre内部渲染流程分析系列
关于 OGRE 中的 Renderable 要理解OGRE引擎,就要理解其中占很重要位置的 Renderable接口,今天先将一部分我分析的内容贴出来。以下是 Ogre 的代码中的详细说明:Renderable是OGRE中所有可渲染对象的抽象接口这个接口抽象出了在渲染管线中的被分组的离散的可渲染对象基本的方法。此接口的实现类必须是基于单一的材质、单一的世界矩阵(或者是一转载 2014-07-19 15:04:23 · 571 阅读 · 0 评论 -
OGRE引擎优化的几点建议
1)渲染队列的优化。ogre渲染队列设计的效率太低,渲染队列用了很多map,每次往队列里加一个renderable用了4次map查找,每帧成千上万的renderable往队列里添加,可见性能损失有多大。建议简化渲染队列,预先定义一个队列数组,每个队列是渲染物体的集合,这样每次add渲染物的时候逻辑就是,通过groupID作为数组下标,得到那个队列,然后再往队列里加渲染物,为了效率的提升可以把队列做转载 2014-07-19 13:08:53 · 1135 阅读 · 0 评论 -
火炬之光中人物被遮挡效果在Ogre中的实现方法
《火炬之光》貌似是最近挺惹人注目的游戏了。我所高兴的是这个游戏是Ogre做的,那么按老外的习惯,里面的模型材质纹理等都是暴露的了。下了一个果不其然。不过真正让我注目的是,这款游戏确实挺不错,一个非商业图形引擎能做成这样是很不错的了,其中我关注到了这样一个效果: 即人物被遮挡后的透视效果。想了很久不知道如何下手,天一给我发了个博客,立马茅塞顿开。http://blog.csdn.转载 2014-06-25 12:46:41 · 933 阅读 · 0 评论 -
整合OGRE的地形和PSSM+LiSPSM阴影算法
OGRE版本1.7.1的Sample里包含了地形的示例,且用到了PSSM+LiSPSM。今天尝试把Character的Sinbad模型摆到地形上,不过模型的材质本身不支持PSSM。看了下地形示例的实现,发现它在给Shader传PSSM分界点数据时,用了把模板材质clone一份,再设置diffusemap和pssm分界点的方法,相当让人无语....[cpp] view p转载 2014-04-03 04:10:40 · 1579 阅读 · 0 评论 -
OGRE 基于纹理的阴影
纹理阴影是通过以光源作为招眼点把投影体渲染到纹理上来得到,然后再把这个纹理投射到接受阴影的表面上来得到最终的结果。相对于7.1 模版阴影而言,纹理阴影的优势在于其极少的增加了集合体的细节,因此不用执行对每个三角形的计算。对渲染纹理阴影的大部分工作都放在图形硬件中执行,这就意味着在新的现实硬件上可以得到更好的性能,换句话说纹理阴影运算速度的进化超过了CPU的发展。另外的,纹理阴影的应用范围更加广泛—转载 2014-04-03 04:07:51 · 967 阅读 · 0 评论 -
Ogre、Shadow Map、和其他
Ogre的影子分为两类:模版阴影和基于纹理的阴影。(1)模版阴影 SHADOWTYPE_STENCIL 分MODULATIVE,ADDITIVE两种。 不过模版阴影我不太care,没有太仔细看。大致基于闭合多边形的影子,我猜可能类似于Shadow Volume的实现(d3d sdk的那个例子我就没看懂过,干), 但是奇怪的是, Ogre的这种模版阴影的效率居然还相当高。 目测市面上一些Og转载 2014-04-03 04:07:10 · 799 阅读 · 0 评论 -
ogre渲染优化
做商业网络游戏的话,效率是一个不可避免的话题,为了留更多的空间给客户端的逻辑,那么渲染模块就应该尽量高效.小弟只浅谈一下Ogre的渲染优化,以大家熟悉的天龙八部为例. 以网上流传版本的天龙代码来看,Ogre和CEGUI部分的渲染都有严重的性能问题, Ogre: 地形的实现,一个tile,只按材质做了批次优化,并没有按材质做摄像机的裁剪,导致游戏视角下批次增加很多转载 2014-02-21 02:00:21 · 791 阅读 · 0 评论 -
ogre3D学习基础5 -- 阴影与动画
五、阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系。 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1、建立场景时就设置阴影技术有效 -- mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE); 2、创建一个或者多转载 2014-01-16 00:46:11 · 853 阅读 · 0 评论 -
ogre3D学习基础1 -- 核心对象与脚本技术
一、核心对象介绍1、命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆。使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Ogre::Vector3等。2、Root对象 ---根对象 根(Root)对象是OGRE系统的入口,该对象在程序一开始时创建,最后结束时销毁。可用来配置系统,还可以获得系统中其他对象转载 2014-01-16 00:43:25 · 869 阅读 · 0 评论 -
ogre3D学习基础3 -- 粒子与表层脚本
9、粒子脚本 粒子脚本允许你实例化地在你的脚本代码中定义粒子系统,而不必在源代码中进行设置,使得你做任何修改都能得到快速回应。脚本里定义的粒子系统被用作模板,并且多个实际的系统可以在运行时从这里被创建。 粒子系统属性: quota --- 设置这个系统在某一时刻所允许包含的最多粒子数。 格式: quota material ----设置这个系统中的全转载 2014-01-16 00:45:04 · 687 阅读 · 0 评论 -
ogre3D学习基础4 -- 网格工具与硬件缓存
三、网格工具(Mesh) 1、导出器(Exporters)--- 用于从模型生成器中得到数据并且导入到OGRE中去。 导出器是指通过3D模型工具的插件写成网格数据和骨骼动画的文件格式可以在OGRE中被实时渲染(这句话读着太吃力了)。这些文件被导出器以.mesh和.skeleton形式生成。 2、XML转换器(XmlConverter)--- 用于从XML转换网格数据和骨骼数据转载 2014-01-16 00:45:34 · 1030 阅读 · 0 评论 -
CEGUI/OIS的中文输入与显示
CEGUI是OGRE默认推荐的一个界面库.虽然Ogre官方表示CEGUI不是唯一的选择,但是我想很多人会因为Ogre的关系而选择CEGUI库. 使用了一段CEGUI库后,感觉还是比较方便.我在CEGUI官网下了那个编辑器,用起来很简单,不过似乎某些地方还是存在一些无伤大雅的BUG.CEGUI最大的问题在于对中文的支持.CEGUI中文的显示网上的解决方案转贴得太多了,而且这个解决方案也的确转载 2011-11-02 15:54:54 · 983 阅读 · 0 评论 -
用Ogre实现无缝地图
用Ogre实现无缝地图 1.7版本之前,如果想用Ogre内建的地形系统实现一个像样的无缝地图,恐怕要闹到抓狂。所幸sinbad在1.7为Ogre加入了全新的地形组件,它囊括了一个地形系统所需要的基本功能,并且具备扩展出丰富特性的能力,使开发者得以避免重复造轮子转载 2011-10-14 11:14:40 · 1800 阅读 · 0 评论 -
2011年9月29日1点15分
今天基本上恢复了天龙八部的地形,还是有有一些bug在那就是瀑布部分,透明的材质会直接把地形的部分格子裁剪掉,应该是直接无视我地形的材质了吧,不知道是不是因为我没使用mesh的原因,但是,在我做的正式版中,我会用的各种算法和方式来一一的测试,反正是为了学习,麻烦一点就麻烦一点了,我原创 2011-09-29 01:32:06 · 670 阅读 · 0 评论