代码风格:
1.接口以I开头,实现以C开头,保存数据的结构体以S开头
2.函数名以小写字母开头,变量以大字母开头
3.接口的公共函数,其参数大部分给了默认值
4.采用名字空间
名字空间irr 里面又包含5个子命名空间,我们可以从文档中的Namespace List查询到,分别为:
irr 此命名空间中可以找到IRR的一切都在Irrlicht引擎
irr::core
此命名空间中,可以找到基础类,如向量,平面,数组,列表等
irr::gui
命名空间包含的图形用户界面,轻松创造有用的类
irr::io
此命名空间提供输入/输出接口:读取和写入文件,访问zip归档文件,XML文件等等
irr::scene 所有的场景管理,可以发现在这个命名空间:网格加载,八叉树和广告牌等,特殊场景节点等等
irr::scene::quake3
irr::video
视频命名空间包含用于访问的视频驱动程序。在这里完成所有的2D和3D渲染
大多数类从irr::IReferenceCounted引用计数类虚派生:
公有成员
a.该类提供grab()函数 进行计数
b.提供drop()函数释放计数,当计数为0时删除该对象
c.提供getReferenceCount()函数获取引用计数ReferenceCounter
d.提供getDebugName()函数获取调试名称
保护成员
e.提供setDebugName(const c8* newName)函数设置调试名称
私有成员
f.const c8* DebugName; //调试名称
g.mutable s32 ReferenceCounter;//参考计数器。可变const对象的引用计数。
从文档里的HelloWorld例子中可以看出:
1.首先利用irr名字空间里的全局函数cretaeDevice函数创建窗口,Device设备,GUI环境,场景管理等!这时第一个参数区分渲染设备 并确定窗口宽和高,位深,是否全屏 使不使用模板缓冲等等!最后一个参数给定事件接收器的对象,即回调处理函数指针
createDevice()函数调用createDeviceEx(p);-区分平台(这里选win32为例) dev = new CIrrDeviceWin32(params);
class CIrrDeviceWin32 : public CIrrDeviceStub, video::IImagePresenter (CIrrDeviceWin32 派生自CIrrDeviceStub,而CIrrDeviceStub派生自IrrlichtDevice)
CIrrDeviceStub::CIrrDeviceStub(const SIrrlichtCreationParameters& params)构造函数中创建日志对象,创建随机种子,创建文件系统对象!
CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)构造函数中打印系统版本,创建 调整窗口和显示更新窗口并移动窗口 最后根据参数类型createDriver()创建设备,设置默认顶点,创建材质,设置渲染状态,存储深度缓冲
2.device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo"); 设置窗口名称
3.获取设备,GUI环境,场景管理的指针
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
4.使用GUI环境设备绘制一个Label
guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!",rect<s32>(10,10,260,22), true);
5. /*
使用场景管理器getMesh()读取mesh信息,再创建一个场景节点来显示这个mesh就可以了
Irr引擎同时还支持.obj(Maya文件) .bsp(Quake3地图文件) .ms3d(Milshape文件).也支持
Quake2模型
*/
IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2");
if (!mesh)
{
device->drop();
return 1;
}
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
6./*
接下来我们让mesh更好看点,我们对材质环境进行一些设置:
1.这里不需要动态光影,所以关闭灯光效果,若打开了会是漆黑的
2.然后我们设置帧循环,保证我们模型动作
3.最后我们在mesh上贴一层纹理,若没有纹理的话,mesh上将会填充一种颜色
*/
if (node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setMD2Animation(scene::EMAT_STAND);
node->setMaterialTexture( 0, driver->getTexture("../media/sydney.bmp") );
}
7./*
设置摄像头的3D空间位置(0,30,-40)以及观察目标点(0,5,0)
*/
smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
8./*
现在设置好了场景,还要绘制
首先创建一个死循环,按下ALT+F4将退出
*/
while(device->run())
{
/*
在beginScene() 和 endScene()中间写下需要绘制的代码
beginScene()会将屏幕以指定的颜色和深度缓冲清空
之后我们使用场景管理器和GUI环境去进行内存中的绘制
最后endScene把这些绘制到屏幕中
*/
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
9./*
最后再释放Irr设备
前面的视频设备,场景管理器,GUI环境这些仅仅是进行了获取,并非"Create",所以我们仅
删除Irr设备,它是Create出来的
我们调用drop()函数将其释放
*/
device->drop();
- Irrlicht引擎剖析二
- Irrlicht引擎I 配置
游戏是一个比较大的系统,包含了图形引擎.网络.AI.声音.UI等模块,模块的开发可能会分别进行或者采用开源项目,Irrlicht引擎基本包含了这些模块,不过在使用中也会陆续加入其它的模块.以前开发的程 ...
- 在QT中使用Irrlicht引擎的方法与步骤
Ø 相关库,插件安装部分 本篇文档介绍在Qt5.2.0下面使用lrrlicht引擎在Qt窗口中输出(开发环境:vs2012) 1. 首先安装好Qt5.2.0,下载地址: http://downlo ...
- 【原创 Hadoop&Spark 动手实践 7】Spark 计算引擎剖析与动手实践
[原创 Hadoop&Spark 动手实践 7]Spark计算引擎剖析与动手实践 目标: 1. 理解Spark计算引擎的理论知识 2. 动手实践更深入的理解Spark计算引擎的细节 3. 通过 ...
- [转]Cryengine渲染引擎剖析
转篇Napoleon314 大牛的分析,排版好乱,见谅,耐心读,这是个好东西,注意看他自己的实现,是个技术狂人啊,Ogre焕发次时代的光芒啊~~~努力 ------------------------ ...
- SQL Server 存储引擎-剖析Forwarded Records
我们都知道数据在存储引擎中是以页的形式组织的,但数据页在不同的组织形式中其中对应的数据行存储是不尽相同的,这里通过实例为大家介绍下堆表的中特有的一种情形Forwared Records及处理方式. 概 ...
- 【Spark深入学习 -13】Spark计算引擎剖析
----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark ...
- Oracle 高性能SQL引擎剖析----执行计划
执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL引擎为语句生成执行 ...
- 转:Irrlicht 0.1引擎源码分析与研究(一)
目录(?)[-] 主要技术特性 引擎概览 Irrlicht的窗口管理 Irrlicht引擎主要是由一个名叫Nikolaus Gebhardt奥地利人所设计,是sourceforge上的一个开源项目 ...
随机推荐
- 方法引用(method reference)
目录 方法引用(method reference) 1. 含义 2. 分类 3. 总结 方法引用(method reference) 1. 含义 方法引用实际上是 Lambda 表达式的一种语法糖. ...
- (十一)shiro与ssm整合
所有代码在:here pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h ...
- SIFT算法研究
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://underthehood.blog.51cto.com/2531780/65835 ...
- Go 结构体的使用
结构体是用户定义的类型,表示若干个字段(Field)的集合.有时应该把数据整合在一起,而不是让这些数据没有联系.这种情况下可以使用结构体. 例如,一个职员有 firstName.lastName 和 ...
- WordPress,SAP Kyma和微信三者的集成
我们来继续学习如何在实战中使用SAP Kyma. Jerry在之前的文章里,分别介绍了如何本地搭建WordPress实例: 什么?在SAP中国研究院里还需要会PHP开发? 以及如何把这个本地搭建的Wo ...
- linux之mariadb的安装
1.概述 mysql为关系型数据库. mysql的分支-- mysql (自己本身) -- 2008前后的被SUN收购 SUN之后又被oracle收购 系统集成--什么都干(- 套解决方案) mari ...
- httpd-2.4源码编译
APR APR(Apache portable Run-time libraries,Apache可移植运行库) 主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库.在早 ...
- 2.数码相框-编码(ASCII/GB2312/Unicode)介绍
转载:https://www.cnblogs.com/lifexy/p/8485634.html 在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Uni ...
- Python使用selenium模拟点击(一)
本文适合有点Python基础阅读,(没基础的话,相对的比较蒙蔽,争取能让小白能一步一步跟上来) 2019-03-05 14:53:05 前几天由于需要到一个网站进行签到~~听说Python能够模拟请求 ...
- socket 编程的一些应用例子
1.#传输文件的例子 import socketfrom socket import *import osimport requests import time,socketserver,struct ...