鬼火引擎入门相关知识熟悉
一 Irrlicht简介
概念
Irrlicht引擎是用C++写的高性能实时3D引擎。可以应用于C++程序或者.Net语言中,通过openGL或者自己的软件找色程序,可以实现跨平台。
起源与发展
Irrlicht是一个德国神话故事中的一种动物的名字,它能够发光和飞翔,可以在大部分的沼泽地附近发现它。单词"Irrlicht"是两个德国单词("irr"意思是疯狂的;而"Licht"意思是光)的组合。在英语中,它被译为"鬼火"。
二 组成结构
Irrlicht引擎共分为五部分:Core、Scene、Video、GUI、FileSystem。
1)Core
该部分由一些容器类及数学库组成,如string、vector等。
对应的名字空间为:namespace irr::core
2)Scene
该部分主要负责三维场景的绘制及管理,包括场景节点,摄像机,粒子系统、mesh 资源,公告板,灯光,动画器,天空体,地形等。
Irrlicht的场景中的所有的东西都是场景节点,统一由场景管理器来管理。
对应的名字空间为:namespace irr::scene
3)Video
该部分主要负责对图片纹理的载入及管理,2D和3D的渲染都在这里实现。包括纹理,材质,灯光,图片,顶点等渲染属性的控制。
对应的名字空间为:namespace irr::video
4)GUI
该部分包括了一些二维GUI控件
对应的名字空间为:namespace irr::gui
5)FileSystem
该部分负责文件系统的读写。
对应的名字空间为:namespace irr::io
三 Irrlicht引擎使用一般步骤
1.创建Device
IrrlichtDevice *m_device = createDevice(),实例化根对象,它使用引擎完成一切事情。
参数如下:
·deviceType:设备类型。当前你可选取Null设备以及软设备,如DirectX8,DirectX9或OpenGL。
·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.缺少库
加入framework:openGL.framework、AppKit.framework、IOKit.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