Author: FK_Duzhi

虽然Irr本身还有一些缺陷和功能上的不足,例如3D部分功能并不强大,编辑器比较缺乏,部分封装
也比较死板,灵活性缺乏。以致于其适用性总受到一定制约,然而这并不能掩饰它的长处:使用起来绝对简单。
这些例子却相当的显示出Irr引擎的特点,简洁,明了,针对性强。非常适合Irr新手学习。

本套例子适用范围不是3D菜鸟,例子内部对很多的3D名词和概念并没有做出充分的解释。
它适用于本身已经对3D有一定了解的游戏程序员学习。

学习这套引擎,你还需要一个Irr引擎库以及例子中的素材,这些在Irr官方都有,而且是随
源代码一同提供的,无需下载。
另外你还需要自己去微软官方下载一份DXSDK(或者用OpenGL也可, 若使用BurningVideo则
极其影响速度了)。

学习Irr引擎的话,最好是从这些例子入手,比起直接看源代码或API文档有效的多,
学习的时候,不妨多尝试更改里面一些函数的参数并查看结果,会使你对函数的理解更加深刻。
(例子中并没有详细解释API参数,但是因为很简单,应当3D程序员可以做到一目了然)

现在我已翻译完毕Irr引擎自带的16个例子,接下来我对其进行简单的统计分析。

01.HelloWorld
http://hi.baidu.com/freedomknightduzhi/blog/item/317de73dec7992c49e3d624a.html

这个例子简单的告诉我们Irr引擎的一般使用步骤:
1)包含一个irrlicht.h头文件,若需要控制台,则再包含iostream,根据平台以及消息机制的
需求,你可以再包含windows.h。
2)设置命名空间,所有Irr引擎文件都在irr命名空间之下被定义,irr命名空间之下又有五大模块
,每个模块有自己独立的命名空间,分别为
   core---内部是一些引擎核心类,包括各种数据结构,自定义结构类型。
   gui---内部是一些常用的图形用户接口类,实现了各种常用控件
   io---内部是一些输入输出,xml,zip,ini文件读取写入等操作接口
   scene---内部主要负责场景管理,包括场景节点,摄象机,粒子系统,Mesh,公告版,灯光,
           动画器,天空盒,地形等绝大部分的3D功能,在Irr的思想中,这些东西都归属于一个
           一个的场景节点,统一由sceneManager管理。在其中又有一个特殊的命名空间irr::scene::quake3,
           这个命名空间内的类和函数负责对quake3格式的文件进行特殊的完善处理。
   video---内部主要是负责对视频驱动的设置,2D和3D渲染都在这里实现。包括了纹理,材质,灯光,
           图片,顶点等渲染属性的控制。
3)通知编译器链接irr库文件。

在以上预处理步骤完成后,我们在main中需要做的步骤如下:
1)创建设备
2)获取场景管理器,GUI环境,视频设备的指针,使用他们进行渲染控制。
3)之后在beginScene和endScene中进行DrawAll
4)释放设备

就这样,一个最基本的完整的基于Irr引擎的程序就完成了。

02.Quake3Map
http://hi.baidu.com/freedomknightduzhi/blog/item/34a4d90398200bef09fa9343.html

这个例子仅简单的介绍了下如何Load一个Quake3的场景,其中没有什么特殊的概念。
只需注意一下Irr的思想就可以,将场景和摄象机都做为场景节点来处理。
最后,提供了用户选择设备类型的功能,并显示了FPS。

03.CustomSceneNode
http://hi.baidu.com/freedomknightduzhi/blog/item/8316ab3586254c1291ef3914.html

这个例子实用性更低了,感觉是为了3D编程入门用户使用的,它告诉了我们如何自己定义创建一个场景节点。
之前的Quake3Map是从文件中读取的各种模型信息,而这里,我们自己手工定义顶点,颜色等信息,并将其
做为一个场景节点加载到Irr程序中去。由于实际开发中几乎不会手工定义这些东西,所以实用性相当低,
仅值得简单了解。

04.Movement
http://hi.baidu.com/freedomknightduzhi/blog/item/38723395f10cae0b7bf48094.html

这个例子相当重要,它增加了一个用户输入处理的功能。这个功能的实现实际上很简单,如下步骤:
1)自定义一个类,继承于IEventReceiver类,并实现其中的函数OnEvent(sEvent)
2)根据sEvent参数值进行不同的逻辑处理
3)生成这个事件处理类的对象,在创建设备的时候将其做为参数传给设备就OK了。

本例中另外一个要点就是,为场景节点设置一个Animator,很遗憾,一直到现在,我依旧无法正确的对
Animator这个单词进行翻译,它可以实现旋转,移动等多种令模型生动起来的功能,使用起来也很简单,如下:
1)使用场景管理器创建一个Animator,注意它有不同的类型,可以实现不同的功能。
2)将它和一个场景节点捆绑起来,之后场景节点就实现了该Animator所具有的功能。
3)值得注意的是,当Animator被绑定之后,它就可以立即释放了,所以个人猜测在绑定的时候,场景管理器
对Animator创建了一个副本,将副本给了目标场景节点,而非这个Animator本身。

05.UserInterface
http://hi.baidu.com/freedomknightduzhi/blog/item/c17e1e4eb48439c9d0c86a77.html

这个例子也比较重要,它演示了GUI的使用方法。
这个使用方法是相当容易的,甚至到了一种太简单的地步,就是你简单的使用GUI环境指针add就OK了。
具体的请见代码,很容易理解。值得注意的是,GUI在创建的时候,需要提供一个ID编号,这样的话,在
消息接收器中,就可以根据GUI的ID编号来获知是哪个GUI应当处理的事件了,很简单,很高效!

06.2DGraphics
http://hi.baidu.com/freedomknightduzhi/blog/item/6faf98fde6817e1508244d3b.html

这个例子中演示了如何使用Irr引擎实现2D图形渲染,并不大重要。
代码中没有什么难理解之处,不过Irr支持的图片格式可真不少,某志不再在此列举了,有兴趣的可以看看Irr文档。
2D部分Irr引擎明显没有做为重点来做,都是比较底层的功能,真正拿它来做2D游戏的话,还需要用户进一步封装。

07.Collision
http://hi.baidu.com/freedomknightduzhi/blog/item/ea4a9f354c4b3488a71e124d.html

这是一个相当重要的例子,它告诉了我们如何使用Irr引擎进行碰撞检测和鼠标拣选。
Irr引擎中的碰撞检测是依靠碰撞Animator的,方法如下:
使用场景管理器创建两个碰撞Animator,将他们分别绑定到要进行碰撞的两个目标对象上,就OK了。注意的是,
碰撞Animator(检测器)参数设置会比较麻烦,需要好好看下SDK。

这个例子的第二要点就是鼠标拣选,虽然作者演示了两种鼠标拣选模式,一种基于三角面的拣选,一种基于碰撞盒的拣选,
实际上区别不大,都是通过场景管理器getSceneCollisionManager获取碰撞管理器来进行处理,由于封装的很好,
所以不会太难。(若无法理解这两中拣选的区别,请运行例子测试)

08.SpecialFx
http://hi.baidu.com/freedomknightduzhi/blog/item/003abc58b79776dd9d820472.html

这也是个比较重要的例子,主要演示了几种常用特效的使用,包括水面,移动光源,粒子系统,动态阴影。
实际上这些特效在Irr中有很方便的封装,你只要使用场景管理器创建一个相应的SceneNode,再设置其参数就可以了。
在这里,你会更加明确的感受到Irr作者对场景节点的喜好了,一切都是场景节点!包括阴影也照样。- -
具体的实现还请看例子,例如水面的双层纹理效果,粒子发射器的参数分别什么作用,还需要用户简单的更改调试查看。

09.MeshViewer
http://hi.baidu.com/freedomknightduzhi/blog/item/8f47e69578756548d1135eca.html

实际上,这个例子是一个让用户休息一下的例子,其中没有新的知识点,只是将GUI和图形渲染之间进行了一些衔接罢了,
对GUI的使用还有问题的朋友可以进去看看。想这么点代码就做一个MeshViewer还是艰难了点吧,虽然我承认Irr封装的够强悍。

10.Shaders
http://hi.baidu.com/freedomknightduzhi/blog/item/d67e37d8df84613632fa1c56.html

这个例子告诉了我们如何使用Irr引擎实现Shader.
Irr引擎既支持高级Shader语言,也支持asm,也允许从文件中进行Shader的读取。但是操作难度不大,步骤如下:
1)创建一个Shader回调类继承IShaderConstantSetCallBack实现其中的OnSetConstanes函数,
每桢材质渲染前,Irr设备都会调用这个函数。
2)通过设备指针获取GPU服务对象指针
3)通过GPU服务对象指针去创建Shader材质,并将Shader回调类的对象做为参数传入。
例:MyShaderCallBack* mc = new MyShaderCallBack();
newMaterialType1 = gpu->addHighLevelShaderMaterialFromFiles(vsFileName, psFileName, mc,...);
这样就OK了,真的,没见过比这更简单的设置Shader了。

11.PerPixelLighting
http://hi.baidu.com/freedomknightduzhi/blog/item/80fcfa3f023c75c17c1e7144.html

所谓的PerPixelLighting逐象素光照,个人感觉就是凹凸贴图的另一个名词而已。
这个例子中实现凹凸贴图,使用了两种方式,法线映射和视差映射。这两种映射依旧是两个函数的调用而已,
当然,这需要硬件支持Shader,也需要我们明白一点凹凸帖图的原理:模型上贴两层纹理,一层颜色纹理用来普通的显示,
一层高度纹理,我们通过高度纹理图来生成一个切线图,进行渲染就可以实现有立体感的凹凸贴图了。
这里需要注意的是createMeshWithTangents是将一个高度图转换为切线图的函数,它的内部对纹理图进行的复制,所以,
最后记得要drop掉。
另外,在本例中增加了雾特效,这个实现本身相当容易,不过请记住打开每个场景的雾效开关,默认它是关闭着的。

12.TerrainRendering
http://hi.baidu.com/freedomknightduzhi/blog/item/70e377eedb7c81f8b2fb95ee.html

此例子实现地形渲染,没有什么要点在其中的,只是作者在告诉用户,Irr引擎使用了地形Lod和纹理混合的功能罢了。

13.RenderToTexture
http://hi.baidu.com/freedomknightduzhi/blog/item/fb3fff13d35156015baf537d.html

本例子实现动态纹理渲染,如果用户了解镜面渲染原理的话,本例子也没有什么要点可言,只是进行两次渲染实现个动态渲染纹理而已,
而且,这里Irr引擎封装不足,完全可以进一步改进。

14.Win32Window
http://hi.baidu.com/freedomknightduzhi/blog/item/da20baeeb7acee2a2cf5344f.html

这是个很有趣的例子,在一个Win32窗口内运行Irr程序,请注意例子中提示的两种消息接收方式,在特殊条件下该例子比较有用。
Irr支持用户使用Win32自身的消息分发系统,也允许继承自身的OnEvent进行消息处理,这两种方法都有效,注意,后一种方式必须
Device->Run(),详细情况请见例子。

15.LoadIrrFile
http://hi.baidu.com/freedomknightduzhi/blog/item/c1a98f44b2f18d81b3b7dc59.html

这是一个脑残的例子,不知道作者在想些什么,一个loadScene(XX.irr) 把我们打发了,可能主要目的是向我们推荐他的irrEdit吧,
我们拿记事本打开.irr文件,会发现,那不过是xml格式的一套信息而已,类似于Direct的.x对模型的格式定义一样,.irr是对场景的
一个格式定义。

16.Quake3MapShader
http://hi.baidu.com/freedomknightduzhi/blog/item/077bf7f9282fb65a252df21a.html

这个例子和02.Quake3Map基本上一致,不同之处在于两点:1:本例加了个截屏功能。2:在02例子的场景之上,本例添加了一些Shader。
阅读本例需要我们对quake3的地图文件格式有一定的了解,即使你想去了解也没有关系,你只需要明白,Quake3地图是将地图上的物件
(如桌子,灯座,甚至灯光)都寄存在相关材质中就OK了。本例中大量使用irr::scene::quake中的函数,对quake格式没兴趣的朋友可以
不看。

简单的Irr例子介绍就这样了,之后我会继续翻译Irr相关文档说明以及API文档,并将其发布在我的博客之中,欢迎来访指教。
http://hi.baidu.com/freedomknightduzhi 或E-mail for me: duzhi5368@163.com

Irrlicht引擎例子说明及中文链接相关推荐

  1. 有研究irrlicht引擎的吗,交流交流

    我最近在研究这个开源引擎 不知道irrlicht引擎和其他商业引擎比起来怎么样? 这个引擎虽然没有IDE不过一直在更新,在进步. 知道这个引擎的发表发表你的看法 补充: 最近找到了irrlicht中文 ...

  2. 战神引擎各类修改地址中文注释汇总

    战神引擎各类修改地址中文注释汇总 战神引擎-怪物资料+掉落 D:\mud2.0\Mir200\Envir\MonItems D:\mud2.0\Mir200\Envir\PsMapQuest Help ...

  3. 游戏引擎架构第二版中文pdf_阿里架构有多牛,一文带你看遍阿里技术架构!

    阿里的架构能力自不用多言.本期1C9U就带大家实际看看阿里的架构大牛们的精彩分享. 互联网架构 16:20 - 17:10 黄贵 - 阿里新一代分布式数据库X-DB技术剖析.pdf 互联网架构 10: ...

  4. 一个简单的规则引擎例子

    本例使用的规则引擎包是RulesEngine,关于RulesEngine的介绍,请自行补充,这里只是一个极简单使用场景. 例子大体就是用户有一些优惠券,系统会根据用户订单情况,筛选可以使用的优惠券供用 ...

  5. 【报告分享】中国数据智能应用趋势报告:解码数据中台最佳实践,企业数字化转型新引擎.pdf(附下载链接)...

    大家好,我是文文(微信:sscbg2020),今天给大家分享爱分析于2020年10月份发布的报告<中国数据智能应用趋势报告:企业数字化转型新引擎,解码数据中台最佳实践.pdf>,希望对您有 ...

  6. 游戏引擎架构第二版中文pdf_NBA 2K20国行版售价正式公布 依然有中文解说

    各位玩家朋友们大家晚上好 <电玩巴士每日游报> 将为玩家朋友们总结当日热点游戏资讯 在您休息和下班时间和我们一起来看看 今天资讯圈的那些事儿吧 四款新颜色PS4手柄9月6日上市 配色太炫酷 ...

  7. 游戏引擎架构第二版中文pdf_SCITranslate v10.0 普通版和VIP版

    由于国内某翻译引擎的封锁,所以SCItranslate 10.0版通过Chrome插件调用Google的翻译引擎. VIP版有四种翻译功能: [全文翻译]按照PDF的原始排版模式进行翻译,翻译成中文后 ...

  8. 【U3D引擎】没有切换中文选项切换中文模式?

    U3D没有切换中文选项&切换中文模式? 第一步,查看是否有勾选简体中文模块 第二步,拉到底部,勾选简体中文,点击继续 第三步,勾选已阅读同意后点击安装 第四步,等待下载安装完成 过程中会自动安 ...

  9. php模板引擎 例子,PHP实现简单的模板引擎功能示例

    本文实例讲述了PHP实现简单的模板引擎功能.分享给大家供大家参考,具体如下: php web开发中广泛采取mvc的设计模式,controller传递给view层的数据,必须通过模板引擎才能解析出来.实 ...

  10. Phaser开源2d引擎 html5游戏框架中文简介

    功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...

最新文章

  1. TCP/IP网络中专有名词注解
  2. linux设置NO_PROXY绕过代理
  3. CentOS7.0使用Yum安装Nginx
  4. 用boost库实现traceroute小工具
  5. she is so css什么意思,输入she is so什么意思 微信she is so什么梗
  6. 数组巧去重new Set
  7. php重定向mysql_使用.php文件生成MySQL转储
  8. 新概念英语(1-59)Is that all
  9. could not read data from '/Users/xxxx/myapp-Info.plist'
  10. 与FPGA相关的独热码
  11. H桥和NMOS,PMOS理解
  12. 微信公众号软件安装管家所有软件插件打包
  13. 企业微信给微信好友定时发送图文并茂的消息
  14. 【C++】数字的组合排列情况
  15. 工具条Toolstrip应用
  16. 成为一名合格的java工程师
  17. 进程和线程合集以及实例
  18. iPhone X携人脸识别改变行业,美图美妆用人脸识别改变女人
  19. PCBA方案设计——医疗器械认证血氧仪方案
  20. pdf文件内容查看器 -- 采用wpf开发

热门文章

  1. android listview固定内容,Android ListView 列表分隔,条目中添加分类信息(文字,图片等)...
  2. java 多表联合查询后的结果的结果放入list里 如何拿出来_联表查询出来的结果集合放入两个POJO中然后放入List里,然后在JSP里显示出来。高手请进……急……在线等!...
  3. JSF+Spring+Hibernate整合要点
  4. 双向lstm-crf源码的问题和细微修改
  5. Git : SSH 协议服务器
  6. win8下hosts保存文档失败,提示:请检查文件是否被另一个应用程序打开
  7. Head First SQL Your Brain on SQL读书笔记
  8. jquery常用基本用法,让你爱上它!
  9. 用qt调用第三方库resolve
  10. 【SpringBoot_ANNOTATIONS】生命周期 04 BeanPostProcessor 后置处理器