OGRE教程中的需要注意的地方

OGRE教程(一):SceneNode, Entity, SceneManager     原始作者:Clay Culver 中文译者:Antking  OGRE教程(一)  OGRE教程(二)注意:这篇文章是针对OGRE 1.0.0,如果你使用其他的版本,如果遇到问题请到论坛中讨论。目录1 读者对象2 简介3 如何开始4 OGRE如何工作  4.1 SceneManager 基础  4.2 Entity 基础  4.3 SceneNode 基础5 你的第一个OGRE程序6 坐标 阅读详情

对于Ogre摄像机来说,有一点跟你想象不一样的是同一个时间内你只能使用一台摄像机(当前)。这就是说,我们不能创建其中一个摄像机去观察场景的一部分,而用第二个去观察场景的另一部分,并且仅通过打开或关闭某一个摄像机就可以来呈现我们想要的一部分场景。不过要完成这一步有一个替代方式就是通过一些创建场景节点来扮演“摄像机句柄”。这些场景节点简单的参加到场景中指向摄像机可能要捕捉的位置。当只需要展示一部分场景时,摄像机只需要简单的把自己绑定到适当的节点上就可以了。

 

 

2.2当你开始处理多个摄像机时,视口类的概念就变得对你很有用了。我提出这个主题的原因是,我认为了解当渲染一个场景时Ogre是如何决定使用哪个摄像机的是非常重要的。在同一个时间内Ogre中可能有多个场景管理器在运行。也有可能把场景分为多个区域,然后用分开的摄像机去渲染场景中不同的区域(例如:思考一下控制台游戏中两个人的观察)。

 

2.3 Ogre currently supports three types of Shadows: Ogre目前支持3种类型的阴影(当前版本1.4.x目前已经支持四种阴影类型):

调制纹理阴影 (SHADOWTYPE_TEXTURE_MODULATIVE) - 是这3种中最节省资源的。她创建一个阴影投射者的黑与白渲染到纹理,然后用于场景中。 
调制模板阴影 (SHADOWTYPE_STENCIL_MODULATIVE) - 这项技术是在所有的非透明体被渲染到场景以后再渲染所有的阴影体来调制阴影,她耗费资源没有加成模板阴影强,但是也不是非常精确。 
加成模板阴影 (SHADOWTYPE_STENCIL_ADDITIVE) - 这项技术是渲染每一个光源作为分离的部分附加到场景中。 对显卡来说这是比较麻烦的,因为在场景中每一个附加的光源需要一个附加渲染通路。 
 

2.4 。SceneManager类中有一个setShadowTechnique成员函数,我们可以使用她设置我们想要的阴影类型。

 

2.5光源有一个范围属性描述光看上去的样子。两个更重要的属性是光的漫反射颜色和镜面反射颜色(diffuse and specular color)。每一个材质脚本定义有多少漫反射和镜面反射光线由材质反射来

 

2.6在Ogre中创建一个光源需要调用场景管理器中的createLight方法然后提供光源的名称,就跟我们创建实体和摄像机一样,光源仅仅有两个方法setPosition和setDirection(而且并不是像旋转,偏移,滚动一样有全套的移动函数)。如果你需要移动光源(例如创建一个光源跟随角色),你需要把光源绑定到场景节点上。

 

3.1 首先我们需要让OGRE创建一个地面。我们必须将场景管理器设为地面的场景管理器,而不是ExampleApplication里默认的那个。将下面的代码添加到chooseSceneManager函数里:

        mSceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE);3.2 场景管理器不是单例,您想创建多少就创建多少。与场景节点/灯光等不同的是,您可以直接使用 "new SceneManager()" 这种语句来直接创建它(而不必使用Root的createSceneManager方法,但你的确应该这么用)。你可以有多个场景管理器,来同时装载多个独立的几何体和实体。你可以通过重建视口的方式在任何时间交换这些场景管理器

 

3.3用哪个好? 
究竟用哪种天空完全取决于你的程序。假如你需要看到周围所有的东西,包括负y的方向,那你可能只有天空盒这个选择了。假如你有一个地面或者类似地板的东西可以遮住负y方向,那么使用天空穹会有一个更真实的效果。假如你看不到海平线(比如一个峡谷,一个监狱,或者城堡中间的院子),天空面会有一个很好的效果同时只有很低的GPU使用量。我们会在下一节中来解释用天空面的最重要的一个原因,是因为它能和云雾很好地结合在一起。

这些只是建议。当你自己写程序的时候应该把这几种都试试然后看看哪种最好再来决定最终用哪个。

3.4 雾化效果在OGRE里非常简单。但是在你使用它之前要注意,当你使用地面管理器(TerrainSceneManager)的时候,一定要在调用setWorldGeometry函数之前调用setFog函数。(别的场景管理器里没关系的)。

 

3.5你需要知道关于设置雾化效果的很重要的一点是他并不像你想象的那样在空的地方创建“雾”的实体。实际上雾只是当你观看物体时的一个滤镜。当你面前没有任何物体时,你是看不见雾的。事实上,你只会看到视口(viewport)的背景色。所以想要使雾逼真,我们必须将视口的背景色设成雾的颜色。

 

3.6在Ogre中我们可以注册一个类去接收消息当一帧被渲染到屏幕之前和之后。FrameListener接口定义两个函数:

bool frameStarted(const FrameEvent& evt)

bool frameEnded(const FrameEvent& evt)

Ogre的主循环(Root::startRendering)类似这样:

Root object调用frameStarted方法在所有已经注册的FrameListeners中。 
Root object渲染一帧。 
Root object调用frameEnded方法在所有已经注册的FrameListeners中。 
这个循环直到有任意一个FrameListener的frameStarted或者frameEnded函数返回false时终止。这些函数返回值的主要意思是“保持渲染”。如果你返回否,这个程序将退出。FrameEvent实体包含两个参数,但是只有timeSinceLastFrame在帧监听中是有用的。这个变量了解frameStarted或者frameEnded最近被激活时间。注意在frameStarted方法中,FrameEvent::timeSinceLastFrame将包含frameStarted时间最近被激活的时间(而不是最近被激活的frameEnded方法)。

 

3.7一个重要的概念你不能决定那个FrameListener被调用的次序。如果你需要确定FrameListeners被调用的准确顺序,你应该只注册一个FrameListener,然后用适当的顺序来调用所有的物体。

 

3.8 这个ExampleFrameListener(我们的TutorialFrameListener是从它继承来的),还提供了一个showDebugOverlay(bool)方法,用来告诉ExampleApplication是否要在左下角显示帧率的提示框。我们会把它打开:

       // Show the frame stats overlay       mFrameListener->showDebugOverlay(true);

3.9我们使用FrameListener来做的第一个事情就是,让鼠标左键来控制灯的开关。通过调用InputReader的getMouseButton方法,并传入我们要查询的按钮,我们能够检查这个按钮是否被按下。通常0是鼠标左键,1是右键,2是中键。在某些系统里1是中键、2是右键。

 

3.10 当你对一个节点进行平移,或者是绕某个轴进行旋转,你都能指定使用哪一个“变换空间”来移动它。一般你移动一个对象时,不需要指定这个参数。它默认是TS_PARENT,意思是这个对象使用的是父节点所在的变换空间。在这里,父节点是场景的根节点。

 

3.11Ogre定义了三种变换空间:TS_LOCAL, TS_PARENT, 和TS_WORLD。

 

6.1 Crazy Eddies GUI系统是一个为不具备或缺乏用户界面制作功能的图形API或引擎提供免费用户界面支持的开源的库。这个使用c++编写的库是针对那些想制作优秀的游戏却又没有GUI(图形用户界面)子系统的专业游戏开发者。

 

6.2 创建CEGUI日志的地方,一般都设置为Informative模式的。其具有四种模式:Standard, Errors, Informative 和 Insane。

 

6.33本质上CEGUI是通过向窗口添加第二个场景,这个场景是在Ogre的基本渲染队列完成后才渲染的。这个场景仅仅是由一系列3D矩形对象组成的。(也就是两个多边形沿着其边压制到一起)。

 

6.4CEGUI中巧妙的推出设置// Tell the frame listener to exit at the end of the next frame     void requestShutdown(void)     {         mShutdownRequested = true;     }     bool frameEnded(const FrameEvent& evt)     {         if (mShutdownRequested)             return false;         else             return ExampleFrameListener::frameEnded(evt);     }

 

7.1CEGUI是一个功能全面的GUI库,它能够植入像Ogre这样的3D应用程序(当然也支持纯DirectX和OpenGL)。就像Ogre只是一个图像库一样(不做声音、物理等其它的事情),CEGUI只是一个GUI库,意味着既不自己做渲染,也不与任何鼠标键盘事件挂钩。实际上,为了让CEGUI能渲染,你必须提供一个渲染器给它(包含在SDK的OgreGUIRenderer库)。而为了让它能够理解鼠标键盘事件,你必须手工地把它们注入系统。这也许一开始看起来觉得痛苦,但其实只需要一丁点代码就能实现。这样,你就可以对渲染和输入进行全面控制,CEGUI根本不会防碍你。

 

7.2OIS和CEGUI为键盘输入使用相同的键码。但鼠标按钮却不是这样。在按下鼠标按钮注入到CEGUI时,我们需要写一个函数来把OIS的按钮ID转换为CEGUI的按钮ID。在你代码顶部附近,TutorialListener类前面,添加以下函数:

CEGUI::MouseButton convertButton(OIS::MouseButtonID buttonID){    switch (buttonID)    {    case OIS::MB_Left:        return CEGUI::LeftButton;     case OIS::MB_Right:        return CEGUI::RightButton;     case OIS::MB_Middle:        return CEGUI::MiddleButton;     default:        return CEGUI::LeftButton;    }}

7.3CEGUI最常用的用法是,你不必在代码里创建每一个单独的对象。而你可以通过一个像CEGUI Layout Editor这样的编辑器,来为你的程序创建一个GUI布局。根据你的喜好,放置你的窗口、按钮以及其它部件到屏幕上之后,编辑器会把布局保存到一个文本文件里。你就可以之后加载这个布局到GUI sheet里面(它也是CEGUI::Window的一个子类)。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/wangwang123654/archive/2009/12/07/4959609.aspx

Ogre嵌入MFC傻瓜完全教程(一) 在三年前写过一个类似的博文,由于各种 阅读详情

相关推荐

从源代码开始构建Ogre图文教程(Ogre 1.8 Source + VS2010)

//--------------------------------------------------------------------------------------------------------------------------------------------------- //前言:捣鼓了一整天Ogre源代码下引擎环境的构建,从官网WIKI到百度, //再到谷歌,结合

指月的手指,成不了月亮,更得不到月亮!! 1万+

Ogre中SceneManager分析

SceneManager分析最近以为写引擎,需要研究ogre,以下是研究场景管理的结果。Ogre使用插件机制来实现场景管理功能。ScenceManager只是接口,他可以有很多具体的实现。Ogre允许在同一时刻同一场景中使用多个Scene Manager,这样在不同的场景类型切换时带来好处。(v1.4版本后加了一个SceneManagerEnumerator)。 场景管理主要工作包

痞子龙3D编程 3282

OGRE基础教程1(上)

 简介:本教程基于Ogre Wiki上的Basic Tutorial系列,并依据笔者使用的vs2005+sp1+OgreSDK1.4.3开发环境简化整理而来,其中穿插着笔者自己的理解。这是教程的第一部分,也是我的学习笔记。正文:凡是翻译过几篇技术类文章的人都深知从头至尾忠实重现作者的原意是一件多么令人头疼的事情。当我从诸多曾经许诺要翻译的文章中爬出来的时候,我决定这次不做那样一个“傻子”,重写

leexuany的专栏 1万+

ogre-next 学习笔记 - Day 6

ogre-next 学习笔记 - Day 6

weixin_43859510的博客 2938

OGRE 引擎官方基础教程 (二)

同之前的教程一样,我么会使用一些 预先写好的 结构作为切入点。 在第3,4讲里面我们会采用类似的方法   在BasicTutorial2类里面加入两个函数createViewport和createCamera,这两个函数在基类BaseApplication是定义好的虚函数 改写头文件如下 BasicTutorial2.h BasicTutorial2 header class Bas

cfzjxz的专栏 4026

ogre-next:aka ogre v2-用C ++编写的面向场景的灵活3D引擎

OGRE3D(面向对象的图形渲染引擎) Ogre是3D图形渲染引擎。不要与提供网络,声音,物理等功能的游戏引擎混淆。 Ogre 2.3进行了大刀阔斧的改革,以使用面向数据的设计将高性能图形聚焦于以下方面: 缓存友好的实体和节点布局 节点的线程批处理,平截头体剔除和其他技术(例如正向群集) 使用AoSoA(阵列结构的阵列)内存布局进行SIMD处理 通过背景流加载纹理 这使Ogre适用于旨在在屏幕上具有大量对象或具有紧凑渲染预算(例如VR)的项目。 这是在其中积极开发2.x分支的存储库。 1.x分支的积极开发在 两家分支机构都在积极发展。请参阅了解1.x和2.x之间的区别 这两个存储库都可以进行合并,但是由于它们之间的差异已经足够长的时间了,因此已经以不同的方式进行了拆分。 建造 状态(github) MSVC 支持的后端 Direct3D 11 OpenGL 3.3+ 金属 武尔坎

【Ogre编程入门与进阶】第四章 Ogre的设计理念与特色

4.1 Ogre的设计理念 Ogre内部结构非常的复杂,它是一个庞大的对象和模块的集合,Ogre具有很好的封装性,绝大多数的细节对程序员来说是透明的,即系统底层的细节都被封装起来,程序员无需知道具体的细节是什么,只需要简单的调用Ogre提供给我们的函数接口就可以实现我们想要实现的功能。对于OpenGL或者Direct3D这种底层API来说,是不具备这种封装性的,如果想要利用OpenGL或者Dir

Everything is possible 4053

生成式引擎优化(GEO)的概念与技术路径

生成式引擎优化(GEO)是针对生成式AI引擎的新型优化策略,旨在提升内容在AI搜索与问答平台中的可见性和可信度。与传统SEO相比,GEO更注重语义理解、知识图谱和多模态生成等技术,通过优化内容的结构化和平台适配性,使品牌信息在生成式AI中更易被采纳和呈现。其核心技术包括语义理解、向量数据库和实时反馈优化等,应用于品牌传播、智能客服和个性化推荐等领域。随着AI技术发展,GEO将向智能化、自动化方向演进,成为内容优化的重要工具。

Baixue5209的博客 1047

OGRE3D入门探索01:将渲染窗口嵌入到Win32主窗口

从《OGRE3D引擎入门重拾》这篇文章开始,本系列关注OGRE3D渲染引擎及其周边应用。 本文以一个简单的示例来说明如何将Ogre的渲染窗口嵌入到另一个父窗口中, 为了增加趣味性(就是这么任性哈)我特意增加了FMOD的音乐播放支持。 首先将代码贴上来吧 /////////////////////////////////////////////////...

akzc42847的博客 349

Unity3d游戏开发工程师笔试题学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、学习背景二、错题记录2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 提示:这里可以.

m0_54231818的博客 5464

k8s RoCE 部署: k8s-rdma-shared-dev-plugin + macvlan cni

写给自己的入门篇 文章目录前言一、创建 k8s 集群二、启用 primary network三、启用 secondary networkk8s-rdma-shared-dev-pluginMultus CNISecondary CNIMulti-Network CRD四、启用 pod五、在 pod 中启动 RoCE 流量总结 前言 写给自己的扫盲篇。后续会在原理方面持续更新 一、创建 k8s 集群 k8s 集群的创建有多种方法,可以按照官方文档的说明来.

sunshuying1010的博客 9775

OGRE教程中的需要注意的地方(转)

转自:http://blog.youkuaiyun.com/xiang_521/article/details/7483871【这个也不是原创,但是他没写转自哪里】 对于Ogre摄像机来说,有一点跟你想象不一样的是同一个时间内你只能使用一台摄像机(当前)。这就是说,我们不能创建其中一个摄像机去观察场景的一部分,而用第二个去观察场景的另一部分,并且仅通过打开或关闭某一个摄像机就可以来呈现我们想要的一部分场景...

weixin_30586085的博客 111

服务器测试之GPU基础汇总

GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。可以形象的理解为90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)GPU的设计原理——总结为大量的简单运算。

qq_41897488的博客 2万+

Ogre学习教程:Ogre1.8.1+VS2010环境配置

“伟大航路,我把世界上的一切都放在了那里,有种的话就去领取吧” 这是OGRE中文网的一则广告,我想,无论作为OGRE的学习者还是漫漫人生的一名旅人,这句话都是非常不错的激励语。放在这,是否能够让你隐约看到属于自己的新世界? Ogre(Object-oriented Graphics Rendering Engine)是一款优秀的C++开源图形渲染引擎。OGRE主要提供渲染引擎,

小熊不去实验室 1万+

机器人关节电机发热难题:从工程化角度拆解热管理解决方案(下)

摘要:本文系统分析了机器人关节电机与驱动系统的热管理方案,重点解决局部热点问题。针对不同功率场景提出了热管/均热板散热(适用于中小功率)和液冷散热(适用于高功率)的具体实施方案,详细比较了结构参数、材料选择、安装工艺和散热效果。特别强调了电机-驱动协同热管理的重要性,提出"工况联动+热路径共享"的核心理念,包括一体化散热结构设计和动态控制策略。最后介绍了热仿真与测试验证方法,确保方案的有效落地。通过系统级热管理,可显著降低温升(热点区域降温30-60℃),同时优化体积和能耗。

bother3000的博客 3325

HFSS仿真中如何提取最大E/H场强与频率关系曲线

本文详细讲解了在HFSS仿真中提取最大E/H场强与频率关系曲线的完整流程。通过使用场计算器(Field Calculator)和创建场报告,工程师可以准确获得器件在整个频带内的电场或磁场强度峰值,并进一步推导出关键的功率容量曲线,为高功率射频器件(如滤波器、耦合器)的设计提供至关重要的安全评估依据。

ss78901的博客 1097

OGRE 引擎官方基础教程 (一)

先决条件: 1.本范例假设你能够设置和编译一个OGRE应用程序,具体方法见设置方法,并且具备一定的 C++语言编程基础。 2.本范例是基于OGRE WIKI 框架程序的。 开始工作: 创建一个工程,命名为Tutorial,这里采用 Visual Studio 2010,加入下列文件 BaseApplication.h BaseApplication.cpp Tutorial

cfzjxz的专栏 1万+

从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真

搭建仿真的环境,导入VEINS和INET开源库,使用INET库中提供的网络协议和功能模型来模拟通信协议和网络功能,使用SUMO创建道路网络和车辆轨迹,并导出到OMNeT++中 在OMNeT++中使用VEINS通过socket和SUMO连接,借助VEINS实现的TRACI接口来设置车辆相关的行为和场景,最后在OMNET++中结合VEINS,SUMO和INET运行联合仿真实验,并分析车辆在遇到紧急情况下的通信状况和具体行为

mjmmm的博客 1万+

OGRE教程(一)

 OGRE教程(一):SceneNode, Entity, SceneManager     原始作者:Clay Culver 中文译者:Antking注意:这篇文章是针对OGRE 1.0.0,如果你使用其他的版本,如果遇到问题请到论坛中讨论。目录1 读者对象2 简介3 如何开始4 OGRE如何工作  4.1 SceneManager 基础  4.2 Entity 基础  4.3 Sc

Only me 1953

这20个网络工程项目经验,帮我跳槽加薪不止一次

嘿,大家好,我是圈圈,一个在网络工程圈子里混了十多年的老鸟。从国企的网管起步,到现在给大厂做顾问,我见过太多简历:有的光鲜亮丽,证书一堆,但一聊项目,就露怯;有的简历朴实,但列出的项目经验让人眼前一亮,直接拿offer。为什么?因为招聘官最看重实战。理论谁都会背,项目经验才是你的“硬通货”。尤其在网络工程这行,项目不光证明你的技能,还展示你解决问题的能力。今天,我就分享20个我亲身经历或见过的网络工程项目经验。每个都值得写进简历,不是吹牛,这些项目帮我跳槽加薪不止一次。

网络技术联盟站 431

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

OGRE渲染引擎之创建OGRE项目

本文翻译自OGRE 1.12.0 notes: 有关如何构建OGRE本身的说明,请参阅GORE构建指南 CMake Configure(配置) Ogre使用CMake作为其构建系统。建议你也在项目中使用它。然后你只需要在你的项目中添加以下行 # specify which version and components you need() find_package(OGRE 1.11 ...

Estelle 2303

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OGRE学习之创建OGRE指南

本文翻译自OGRE 1.12.0官网 OGRE支持在所有平台上使用CMake作为其构建系统。这篇文章将向您解释怎样使用CMake从源代码构建Ogre。你需要一个>=3,。3版本的CMake。 What is CMake? CMake是一个跨平台的构建系统,或者更准确的说是构建配置器。它是一个程序,从一组CMake脚本为你的平台创建一个本级构建系统,允许你构建Ogre。构建过程可以通过C...

Estelle 1450

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OGRE初级教程总结 【转载】

一下内容是对OGRE基础教程的总结,大家可以先阅读中级教程1---9的内容,然后再回过头来浏览这片文章,否则可能会有很多看不懂的地方。 OGRE基础教程1 主要讲了几个OGRE中的基本概念: 1. SceneManager:所有屏幕上可见的东西都由SceneManager来管理;有多种类型的SceneManager,分别用来渲染Terrain、BSP等等。 ...

ao084537的博客 151
上一篇: OGRE 使用技巧总结
下一篇: Ogre中的碰撞检测
性感花脸
博客等级 码龄20年 26粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值