代码风格:
 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();

最新文章

  1. HashMap与HashTable的区别
  2. SharePoint Conference 2014 Keynote
  3. node.js表单——formidable
  4. cucumber learning : http://www.cnblogs.com/puresoul/category/340832.html
  5. 【iOS】线程安全的文件读写
  6. HDU2204 Eddy&#39;s爱好(容斥原理)
  7. 【CITE】VS2012程序打包部署
  8. selenium-webdriver的等待方法
  9. 使用Mono Runtime Bundle制作安装包让C#桌面应用程序脱离net framework
  10. Pascal&#39;s Triangle 解答
  11. 非GUI-Qt程序运行后显示Console(简单好用)
  12. 使用tcpdump抓Android网络包
  13. modelsim中的文件操作—— 大数据测试
  14. HDU 3830 Checkers
  15. 认真地搞OI
  16. JDBC之代码优化
  17. 移动端开发H5页面点击按钮后出现闪烁或黑色背景的解决办法
  18. 2017-12-14python全栈9期第一天第三节之python历史
  19. PKUWC2019垫底记
  20. 利用jenkins+saltstack+sh部署项目到多台服务器

热门文章

  1. Linux 安装Mysql(图文教程)
  2. .Net Core Swagger:Actions require an explicit HttpMethod binding for Swagger 2.0
  3. C#如何调用C++(进阶篇)
  4. nodejs连接mysql数据库,报错Client does not support authentication protocol requested by server的解决方法
  5. luogu2657-Windy数题解--数位DP
  6. bat实现守护程序保证平台正常运行
  7. background 背景图片 --css3
  8. socket基本用法
  9. Oracle dump函数的用法
  10. Dubbo:1