已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
开源 3D 游戏引擎 Irrlicht 鬼火 用法入门 赵刚 Irrlicht 中文名 鬼火 是著名的 3D 开源引擎之一 该 3D 引擎结构清 晰 执行效率高 上手容易 无论是初学者学习 3D 游戏引擎 还是用来开发规 模较小的 3D 应用都是很不错的选择 本文以 Irrlicht 1 7 2 版 目前的最新版 为例 讲解其在 Windows 系 统中的用法 首先需要在 下载 Irrlicht 的 SDK 1 7 2 版的 SDK 尺寸为 24 6MB 非常轻巧 几分钟内即可下 载到本地 SDK 下载到本地后是一个名为 irrlicht 1 7 2 zip 文件 将该文件解压 可以右键点击 zip 在弹出菜单中选择 解压到当前文件夹 如果装了 WinRAR 软件的话 得到一个名为 irrlicht 1 7 2 的目录 进入该目录得到以 下结构 在 bin 中 Win32 VisualStudio 目录已经包含了编译好的 dll 当然如果需 要对引擎做些修改的话就需要重新编译 SDK 生成 dll 编译 SDK 非常容易 进 入 source 目录下的 Irrlicht 目录 可以找到 Visual Studio 的解决方案文件 7 1 版 8 0 版 9 0 版的都有 以使用 Visual Studio 2008 为例 可以双击 Irrlicht9 0 sln 文件打开解决方案 解决方案在 Visual Studio 2008 中的表现如下图 可以试一下不修改任何代码直接生成解决方案 编译过程应该会顺利通过 会有一大堆 warning C4819 可以不用理睬她们 完成后会在 bin 中的 Win32 VisualStudio 目录下找到一个新的 irrlicht dll 如果编译过程中出现了 fatal error C1083 无法打开包括文件 d3dx9shader h 这样的错误那说明你没有安装 DirectX SDK 如果一定要用 DirectX 作为底层渲染 API 那可以到 下载一个安装上 DirectX SDK 尺寸很大 500MB 如果不是特别喜爱微软产品的话 可以不用 DirectX SDK 直 接用 OpenGL 但是编译前要告诉 irrlicht 嗨 我不用 DirectX 呢 忽略它好 不好 否则 irrlicht 会执着的报错 让你编译不成功 怎么告诉 irrlicht 呢 很简单 打开 include 目录下的 IrrCompileConfig h 文件 找到 define IRR COMPILE WITH DIRECT3D 9 这一句 直接注释掉就可以了 再编译就能成功了 如果不成功 那非常不幸 我也不知道为什么 反正 我编译过好几个版本 都能很顺利的编译出来 查查 Visual Studio 的问题吧 其实编译成功了也没什么值得喜悦的 因为本来就是会编译成功的 如果 你修改了引擎中的很多代码还能编译成功的话 那才值得喜悦一下 如果想先看看 irrlicht 引擎的效果可以进入 bin 目录下的 Win32 VisualStudio 目录里面有很多 exe 文件 其中第一个是 01 HelloWorld exe 双击运行 可以立刻看到下面的画面 看起来是一个挺丑陋的画面 不过不用担心 这个画面不代表 irrlicht 的 实力 只表示 irrlicht 在你的电脑上运行正常 要画面漂亮 提供漂亮的模型 和纹理图片就好了 还有很多其他 demo 都可以试一下 比如 02 Quake3Map exe 出来下面的画面 比 HelloWorld 画面美不少 运行 02 Quake3Map exe 的时候会先出来一个控制台窗口 选 a 就好了 表示使用 OpenGL 作为底层渲染 API 运行时鼠标会隐藏起来 这样你无法通过点击窗口上的 X 关闭窗口 要 关闭运行窗口退出程序可以按下 ALT F4 这一招很灵 一定想看看怎样用 irrlicht 写一个最简单的程序 HelloWorld 了 正好 irrlicht 自己带着一个作为入门例子的 HelloWorld 我们打开它看个究竟 进 examples 目录看到 01 HelloWorld 目录 进去后双击 HelloWorld vc9 vcproj 即可打开 HelloWorld 工程 HelloWorld 工程里只 有一个 main cpp 文件 文件内容如下 去除了英文注释 include using namespace irr using namespace core using namespace scene using namespace video using namespace io using namespace gui ifdef IRR WINDOWS pragma comment lib Irrlicht lib pragma comment linker subsystem windows ENTRY mainCRTStartup endif int main IrrlichtDevice device createDevice video EDT SOFTWARE dimension2d 640 480 16 false false false 0 if device return 1 device setWindowCaption L Hello World Irrlicht Engine Demo IVideoDriver driver device getVideoDriver ISceneManager smgr device getSceneManager IGUIEnvironment guienv device getGUIEnvironment guienv addStaticText L Hello World This is the Irrlicht Software renderer rect 10 10 260 22 true IAnimatedMesh mesh smgr getMesh media sydney md2 if mesh device drop return 1 IAnimatedMeshSceneNode node smgr addAnimatedMeshSceneNode mesh if node node setMaterialFlag EMF LIGHTING false node setMD2Animation scene EMAT STAND node setMaterialTexture 0 driver getTexture media sydney bmp smgr addCameraSceneNode 0 vector3df 0 30 40 vector3df 0 5 0 while device run driver beginScene true true SColor 255 100 101 140 smgr drawAll guienv drawAll driver endScene device drop return 0 main 之前都是些文件包含 使用的名字空间等生命 其中 pragma comment linker subsystem windows ENTRY mainCRTStartup 这 句话告诉编译器 程序运行的时候不要弹出控制台窗口 可以注释掉 如果注 释掉就会弹出黑色的控制台窗口 进入 main 后 第一件要做的事情是创建设备 IrrlichtDevice device createDevice video EDT SOFTWARE dimension2d 640 480 16 false false false 0 一个 irrlicht 设备表现为一个窗口 如果创建设备失败 那程序接下来就没什 么事可以做了 只能报告一个错误 并退出 if device return 1 如果设备创建成功 就会获得一个窗口 窗口的大小为 640 480 video EDT SOFTWARE 参数告诉 irrlicht 创建一个使用软件渲染器 的窗口 如果希望用 OpenGL 作为底层渲染 API 可以将 video EDT SOFTWARE 修改成 video EDT OPENGL 接下来这句 device setWindowCaption L Hello World Irrlicht Engine Demo 设置 了窗口的名称 你可以将它修改成你想要的名称 IVideoDriver driver device getVideoDriver ISceneManager smgr device getSceneManager IGUIEnvironment guienv device getGUIEnvironment 这三句将设备里建立好的视频驱动对象 场景管理对象和图像用户接口对象保 存在零时变量里 以备后用 guienv addStaticText L Hello World This is the Irrlicht Software renderer rect 10 10 260 22 true 表示在屏幕的 10 10 位置出显示一行文字 IAnimatedMesh mesh smgr getMesh media sydney md2 表示读入一个 3D 模型文件 建立一个带骨骼动画的网格对象 如果建立失败 比如磁盘中根本没有所谓的 sydney md2 文件 那就会失败 不 过只要用户没有删除 SDK 里的文件 则这个文件是存在的 建立会成功 那 程序接下来也没什么要展示的啦 退出完事 if mesh device drop return 1 这里执行了 device drop 表示退出之前要将设备对象释放掉 其实就是不 释放程序退出后设备对象也会被释放掉 但作为 C 程序员 及时释放没有用 的对象是好习惯 接下来这句 IAnimatedMeshSceneNode node smgr addAnimatedMeshSceneNode mesh 要理解一下 为什么要执行这么一句 原来 irrlicht 里所有的在场景里看得见 的对象都以 SceneNode 场景节点 的方式出现的 刚才从磁盘中建立的网格 对象只是在内存中的一个孤立数据 要让 irrlicht 将她显示出来 比如将她以 场景节点的方式加到场景树里去 场景节点建立出来后还可以对她设置一些参数 if node node setMaterialFlag EMF LIGHTING false node setMD2Animation scene EMAT STAND node setMaterialTexture 0 driver getTexture media sydney bmp 这几句将节点的的材质属性设成关闭灯光 动作为站立 用 sydney bmp 作为纹 理 smgr addCameraSceneNode 0 vector3df 0 30 40 vector3df 0 5 0 这句告诉 irrlicht 场景中的摄像机位于世界坐标 0 30 40 这个位置 镜 头的朝向是 0 5 0 现在渲染的窗口有了 渲染的对象 3D 模型 也准备好了 摄像机也对准了 那接下去就该进入没完没了的渲染循环了 while device run driver beginScene true t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急急救员岗中诚信道德考核试卷含答案
- 黄酒酿造工技术改进水平考核试卷含答案
- 乳品加工工岗前理论综合技能考核试卷含答案
- 夏令营消防安全活动
- 口腔医学职业前景
- 医疗安全(不良)事件报告制度培训考试试题
- 精神科护理技巧与心理支持
- 2026年山西体育职业学院高职单招笔试数学历年参考题库含答案解析
- 2026年大学试题(计算机科学)-DCS分布式控制系统历年参考题库含答案解析
- 2026年大学试题(管理类)-风景名胜区规划旅游区规划管理历年参考题库含答案解析
- 临床护理实践指南手术室器械传递
- 医院手术室无影灯安装方案
- 2026年新修订《中国共产党发展党员工作细则》逐条全文精讲(权威完整版)
- 墙面抹灰空鼓开裂修补方案
- 2026秋新教材粤教粤科版小学科学五年级上册(全册)教学设计(附目录p194)
- 林木采伐专项施工方案
- 康复护理评定的常用方法
- 2026新教材语文 统编版语文五年级上册 第六单元 《口语交际:父母之爱》教学课件
- 中国儿童严重过敏反应诊断与治疗建议课件
- 2026贵州航天控制技术有限公司(航天科工十院0612研究所)招聘考试参考试题及答案解析
- 雨课堂学堂在线学堂云《创新思维与创业实验(东南)》单元测试考核答案
评论
0/150
提交评论