鬼火引擎入门相关知识熟悉

来源:互联网 发布:织梦cms在线演示 编辑:程序博客网 时间:2024/04/20 08:35

鬼火引擎入门相关知识熟悉


Irrlicht简介


概念

   Irrlicht引擎是用C++写的高性能实时3D引擎。可以应用于C++程序或者.Net语言中,通过openGL或者自己的软件找色程序,可以实现跨平台。



起源与发展


    Irrlicht是一个德国神话故事中的一种动物的名字,它能够发光和飞翔,可以在大部分的沼泽地附近发现它。单词"Irrlicht"是两个德国单词("irr"意思是疯狂的;而"Licht"意思是光)的组合。在英语中,它被译为"鬼火"




组成结构

Irrlicht引擎共分为五部分:CoreSceneVideoGUIFileSystem


1Core

该部分由一些容器类及数学库组成,如stringvector等。

对应的名字空间为:namespace irr::core

2Scene

该部分主要负责三维场景的绘制及管理,包括场景节点,摄像机,粒子系统、mesh 资源,公告板,灯光,动画器,天空体,地形等。

Irrlicht的场景中的所有的东西都是场景节点,统一由场景管理器来管理。

对应的名字空间为:namespace irr::scene

3Video

该部分主要负责对图片纹理的载入及管理,2D3D的渲染都在这里实现。包括纹理,材质,灯光,图片,顶点等渲染属性的控制。

对应的名字空间为:namespace irr::video

4GUI

该部分包括了一些二维GUI控件

对应的名字空间为:namespace irr::gui

5FileSystem

该部分负责文件系统的读写。
对应的名字空间为:namespace irr::io




Irrlicht引擎使用一般步骤


1.创建Device

IrrlichtDevice *m_device = createDevice(),实例化根对象,它使用引擎完成一切事情。


参数如下:


  ·deviceType:设备类型。当前你可选取Null设备以及软设备,如DirectX8DirectX9OpenGL


  ·windowSize:要创建的窗口的大小或全屏幕模式。这个例子中使用512x384


  ·bits:每像素位数(当在全屏幕情况时)。仅允许值为16或者32


  ·fullscreen:指定是否你想使设备运行于全屏幕方式。


  ·stencilbuffer:指定是否你想使用模板缓冲区以用于绘制阴影。


  ·vsync:指定是否你想启动vsync(仅在全屏幕情况),可选。


  ·eventReceiver:一个接收事件的对象,可选。



2.获取渲染的控制器 


       获取视频设备的指针、场景管理器、GUI环境,使用它们进行渲染控制

       视频设备的指针:IVideoDriver的指针,负责2D/3D的渲染实现。



3.运行、绘制


       使用device->run()来控制一个游戏的循环。该循环将不断进行,直到获取到一个关闭窗口事件来退出设备。


       在beginScene()endScene()命令对之间进行所有内容的绘制控制。

    beginScene()用指定的一种颜色清屏,如果需要的话,可以同时清除深度缓冲区;接着使用场景管理器和GUI环境来绘制它们的内容;最后调用endScene(),所有内容都会被绘制到屏幕上去。



4.释放

       使用drop()释放创建的IrrlichtDevice对象。



四 例子(Xcode



#include using namespace irr;using namespace core;using namespace scene;using namespace video;using namespace io;using namespace gui;int main(int argc, const char * argv[]){    IrrlichtDevice *device = createDevice(EDT_OPENGL);        if(!device)  return -1;        device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");        IVideoDriver *drive     = device->getVideoDriver();    ISceneManager *smgr     = device->getSceneManager();    IGUIEnvironment *guiev  = device->getGUIEnvironment();        guiev->addStaticText(L"Hello World! This is the Irrlicht Software renderer!", rect(10,10,260,22) ,true);        smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));        while (device->run())    {        drive->beginScene(true, true, SColor(255, 100, 101, 140));                smgr->drawAll();                guiev->drawAll();                drive->endScene();    }        device->drop();        return 0;}



五 常见bug,解决方法

1.缺少库

      加入frameworkopenGL.frameworkAppKit.frameworkIOKit.framwork


2.buildSetting

    C++ Standard Libray:libstdc++


3.CGContextGetBlendMode: invalid context 0x0. If you want to see the 

backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

    IrrlichtDevice *device = createDevice(EDT_OPENGL);需要使用EDT_OPENGL.




参考资料

1.认识鬼火引擎

http://blog.csdn.net/u013467442/article/details/49123587

2.掌握鬼火引擎使用流程,入门程序HelloWorld

http://blog.csdn.net/edricbjtu/article/details/9333533

3.安装配置Irrlicht鬼火引擎

http://blog.csdn.net/edricbjtu/article/details/9329723