-
【Irrlicht鬼火引擎】把握引擎应用流程,入门法度HelloWorld
添加时间:2013-7-15 点击量:解析
一、简述应用步调
一般而言,对于一个简单的法度,Irrlicht引擎的一般应用步调如下:
预处理惩罚:
(1)包含 <irrlicht.h> 头文件
#include <irrlicht.h>
(2)设置定名空间
using namespace irr;
设置定名空间会让之后的编程稍微轻松一点,就像应用C++进行编程时,应用using namespace std;一样,std::cout<<→cout<<。
(3)通知编译器连接irr库文件
#ifdef _IRR_WINDOWS_
#pragma comment(lib, Irrlicht.lib)
#pragma comment(linker, /subsystem:windows /ENTRY:mainCRTStartup)
#endif
若是不进行如上操纵的话,在法度编译的过程中,会在Link项目组报错。所以说这一步是很是首要的,必然不要忘怀。到这里,预处理惩罚的步调就完成了,接下来,我们要给法度供给一个main函数,作为法度的进口。
在main函数中须要做的步调如下:
(1)创扶植备
(2)获取场景经管器,GUI景象,视频设备的指针,应用他们进行衬着把握
(3)在device->Run()的景象下,进行轮回。在driver->beginScene()和driver->endScene()中进行所有内容的衬着把握。(我们之前提到过,driver是IVideoDriver的指针,负责2D\3D的衬实在现)
(4)开释设备
一般而言,应用device->drop();语句就实现了设备的开释。就如许,一个很是根蒂根基的基于Irrlicht引擎的法度就完成了,我们可以在这个根蒂根基之上,进行各类添加操纵,比如说添加一个mesh模型,添加一个FPS摄像机,添加地形,添加天空盒等等。这些操纵在将来的文章中会一一提到。
二、helloWorld法度示例
下面,为大师显现一个按照上边所述流程而写的简单法度,在法度中,在须要懂得、重视的项目组添加了注释,用来申明语句在法度中的感化,会对你的懂得有所帮助!
//引入头文件
#include <irrlicht.h>
//设置定名空间,开端的时辰进行如下声明,可以省去今后写irr::core:: 的麻烦
using namespace irr;
using namespace core;
/scene是场景经管,包含场景节点,摄像机,例子体系,MESH,通知布告板,灯光,动画器,天空盒,地形等绝大项目组
的3D功能/
using namespace scene;
/video首要负责对视频驱动的设置,2D和3D的衬着都在这里实现,包含了纹理,材质,灯光,,顶点等衬着属
性的把握/
using namespace video;
using namespace io;
using namespace gui;
//为了可以或许应用Irrilcht.dll文件,要通知编译器连接Irrlicht.lib 库文件
#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<u32>(640, 480), 16,
false, false, false, 0);
if (!device)
return 1;
//设置窗口名称
device->setWindowCaption(LHello World! - Irrlicht Engine Demo);
IVideoDriver driver = device->getVideoDriver();
ISceneManager smgr = device->getSceneManager();
IGUIEnvironment guienv = device->getGUIEnvironment();
//在窗口内添加一个静态文本
guienv->addStaticText(LHello World! This is the Irrlicht Software renderer!,
rect<s32>(10,10,260,22), true);
//场景中参加摄像机,在(0,30,-40)地位,视点地位在(0,5,0)
smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
while(device->run())
{
//所有的绘制都必须在beginScene()和endScene()之间
//beginScene()清空屏幕弥补上色彩SColor(255,100,101,140)
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
//法度停止的时辰,记得要删除设备对象
device->drop();
return 0;
}
所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》