Irrlicht源码分析_1

Irrlicht一共由五个部分组成:

1 Irrlicht  框架

{

2 Irrlicht::Core : 数学库

3 Irrlicht::GUI : gui图形库

4 Irrlicht::Video : 图形设备

5 Irrcht::Scene : 场景

}

 

当然还有一些其他较小的部分,但一般都不在单独拿出来说:譬如 Irrlicht::OS等

 

最为开始过一遍整体流程:

注:我将Irrlicht这个recode了一遍,所以下面的代码不能直接应用于Irrlicht引擎中,但是整个思路是一样的。

#include "kk.h"
using namespace kk;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#include <windows.h>

int WINAPI WinMain(  
                   HINSTANCE hInstance,       // handle to current instance  
                   HINSTANCE hPrevInstance,      // handle to previous instance  
                   LPSTR lpCmdLine,           // command line  
                   int nCmdShow                    // show state  
                   )  
{
kkDevice *device=
createDevice( video::EDT_DIRECT3D9, dimension2d<s32>(640, 480), 16,
   false, false, false, 0);
 device->setWindowCaption(L"Hello World! - KK Engine Demo");
 IVideoDriver* driver = device->getVideoDriver();
 ISceneManager* smgr = device->getSceneManager();
 IGUIEnvironment* guienv = device->getGUIEnvironment();
 //guienv->addStaticText(L"Hello World! This is the DX9 renderer!",
 // rect<int>(10,10,260,22), true);
 IAnimatedMesh* mesh = smgr->getMesh("media/sydney.md2");
 IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
 
 ITexture* texture = driver->getTexture("media/sydney.bmp");
 if (node)
 {
  node->setMaterialFlag(EMF_LIGHTING, false);
  node->setMD2Animation ( scene::EMAT_STAND );
  node->setMaterialTexture( 0, texture );
 }
 kk::scene::ICameraSceneNode* cam = smgr->addCameraSceneNode(0, vector3df(30,30,-40), vector3df(10,5,10));

 core::triangle3df f;
 f.pointA=core::vector3df(0,0,0);
 f.pointB=core::vector3df(1,0,0);
 f.pointC=core::vector3df(0,1,0);

 float t=0.0f;
 while(device->run())
 {
     t+=0.001f;
     cam->setPosition(core::vector3df(50*cos(t),30,50*sin(t)));
    driver->beginScene(true, true, SColor(255,100,101,140));
    smgr->drawAll();

    driver->draw2DImage(texture,core::position2di(10,20),core::rect<s32>(0,0,100,100));
  //driver->draw3DBox(core::aabbox3df(core::vector3df(-10,-10,-10),core::vector3df(10,10,10)));
  //driver->draw2DLine(core::position2di(0,0),core::position2di(100,100));
    driver->draw3DLine(core::vector3df(0,0,0),core::vector3df(0,1,0));
  
  //driver->draw3DTriangle(f);
    guienv->drawAll();
    driver->endScene();
 }
 
 device->drop();
 return 0;
}


1 创建win32设备

  以及 D3D设备,driver

  以及场景管理器SceneManager

2 目的是为了显示一个MD2动画,所以加入了一个IAnimatedMesh的MD2文件

3 把他加入到场景管理器中 [设置了一些参数:纹理,光照]

4 创建一个摄像机使得我们能够看到这个物体,加入到SceneManager中

5 绘制gui和Mesh[其中所有的绘制工作都是由Device完成的]

  smgr->drawAll();表示绘制加入到场景管理器中的所有Mesh

  guienv->drawAll();会把gui元素绘制出来[两者同时存在时容易出现Mesh透视这样的错误]

 

  

posted @ 2015-01-24 17:04  kalluwa  阅读(617)  评论(0编辑  收藏  举报