声明:
#include <irrlicht.h>//要是用Irrlicht引擎只需要包含这一个头文件就行了 //要使用的命名空间 using namespace irr; using namespace core; using namespace video; using namespace scene; using namespace io; using namespace gui; //为了使用Irrlicht.DLL文件,需要连接Irrlicht.lib, //可以通过settings设置,也可以通过下列方式设置 //第二个pragma 是为了隐藏控制台窗口的,但建议开启(也就是注释掉),可以看到许多提示信息 #ifdef _IRR_WINDOWS_ #pragma comment(lib,"Irrlicht.lib") //#pragma comment(linker,"/subsystem:windows /ENTRY:mainCRTStartup") #endif
int main(int argc,char** argv) { //首先需要做的就是通过irr命名空间中的createDevice获得一个设备,通过他才能开始之后的编程 IrrlichtDevice* device = createDevcie(video::EDT_SOFTWARE, dimension2d<u32>(720,455),16, false,false,false,0); //错误处理 if(!device) return 1; //为窗口设置一个标题 device->setWindowCaption(L"Hello World!"); //通过获得的设备对象,可以创建IVideoDriver,ISceneManager,IGUIEnvironment,这三者分别负责 //渲染设备,场景管理,GUI管理 IVideoDriver* driver->device->getVideoDriver(); ISceneManager* smgr=device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); //通过GUI管理对象在屏幕上写一个"Hello World!", guienv->addStaticText(L"Hello World!"/*文本内容,引号前加L*/, rect<s32>(300,100,450,120),true/*显示边框*/ ); //下面这一行在本例中用不到,因为我们只是操作gui部分,不用设置摄像机, //smgr->addCameraSceneNode(0,/*父节点,因为只用到一个所以没有*/ // vector3df(0,20,-30),/*摄像机位置 // vector3df(0,5,0)/*look at*/ //); //好了,可以调用循环部分了,结束条件是关闭程序, while(device->run()) { //场景管理器负责管理更显示有关的缓存:颜色缓存,深度缓存等, driver->beginScene( true,/*是否清理颜色缓存 true,/*深度缓存*/ SColor(255,255,255,255)/*背景颜色:argb*/ ); //有两部分内容需要渲染,一个是我们的游戏世界,一个是GUI部分 smgr->drawAll(); guienv->drawAll(); driver->endScene();//向屏幕传输 } //结束渲染循环,再再次调用createDevice()之前需要删除IrrlichtDevice,释放对象 device->drop(); return 0; }
//为了添加一个网格模型,诸如:.obj(maya),.bsp(quake3),或者其他格式,只需要调用下列函数,它内部进行判断 IAnimatedMesh* mesh = smgr->getMesh("../media/sydney.md2");//场景管理器负责加载这部分资源 //防错 if(!mesh) { device->drop();//释放对象,安全退出 return 1; } //为了显示动画,添加一个场景节点 IAnimatedMeshSceneNode* node = smgr->AddAnimatedMeshSceneNode(mesh);
if(node) { //从文件夹中加载纹理 ITexture *texture = driver->getTexture("../media/sydney.bmp"); node->setMaterialFlag(EMT_LIGHTING,false);/*通过这个函数以及参数可以设置材质的属性,这里设置光照为否,因为我们没有设置灯光,开启的话,看到的模型就变成白色的了 node->setMD2Animation(scene::EMAT_STAND);//通过这个函数设置刚才加载的模型动画所属EMD2_ANIMATION_TYPE 中的哪一个,这里设置为站立,之前没有设置动画也找出播放,是因为其默认为EMAT_STAND node->setMaterialTexture(0,/*次参数为这个node的所有材质中的纹理编号,这里为0*/ texture); }