Listing 1. Irrlicht Sample Program

1  #include <irrlicht/irrlicht.h>

2  #include "unistd.h"

3  using namespace irr;
4  using namespace irr::core;
5  using namespace irr::video;
6  using namespace std;

7  IrrlichtDevice*                 device;
8  video::IVideoDriver*            driver;
9  scene::ISceneManager*           smgr;
10 scene::ICameraSceneNode*        camera;

11 scene::IAnimatedMesh*           ground;
12 scene::IMeshSceneNode*          ground_node;

13 scene::IAnimatedMesh*           house;
14 scene::IMeshSceneNode*          house_node;

15 scene::IAnimatedMesh*           avatar;
16 scene::IAnimatedMeshSceneNode*  avatar_node;

17 video::SMaterial                material;
18 scene::ISceneNode*              cube;

19 int    main () {

20     //video::EDT_SOFTWARE
21     //video::EDT_NULL
22     //video::EDT_OPENGL,

23     device=createDevice(video::EDT_OPENGL,
24     dimension2d<s32>(640,480),16,false,true);
25
26     if (device == 0) return(1);

27     driver = device->getVideoDriver();
28     smgr = device->getSceneManager();

29     smgr->addSkyBoxSceneNode(
30             driver->getTexture("./graph/irrlicht2_up.jpg"),
31             driver->getTexture("./graph/irrlicht2_dn.jpg"),
32             driver->getTexture("./graph/irrlicht2_lf.jpg"),
33             driver->getTexture("./graph/irrlicht2_rt.jpg"),
34             driver->getTexture("./graph/irrlicht2_ft.jpg"),
35             driver->getTexture("./graph/irrlicht2_bk.jpg"));
36
37     smgr->addLightSceneNode(0, vector3df(0, 100, 0),
38             video::SColorf(1.0f, 1.0f, 1.0f), 1000.0f, -1);

39     smgr->setAmbientLight(video::SColorf(255.0,255.0,255.0));

40     camera = smgr->addCameraSceneNodeFPS(0,30.0f,90.0f,-1,
                        0,0,false,0.0f);
41     camera->setPosition(vector3df(30,10,30));

42     ground = smgr->getMesh("./graph/grass.obj");
43     ground_node = smgr->addMeshSceneNode(ground);
44     ground_node->setScale(vector3df(1000,1,1000));
45     ground_node->setMaterialFlag(EMF_LIGHTING, false);

46     material.setTexture(0,
                  driver->getTexture("./graph/building.tga"));
47     house = smgr->getMesh("./graph/building.obj");

48     for (int i=0; i<5; i++) {
49         house_node = smgr->addMeshSceneNode(house);
50         house_node->setScale(vector3df(.5,.5,.5));
51         house_node->setPosition(vector3df(30*i+5,0,-30));
52         house_node->getMaterial(0) = material;
53         house_node->setRotation(vector3df(0,90,0));
54     }

55     material.setTexture(0,
                  driver->getTexture("./graph/sydney.bmp"));
56     avatar = smgr->getMesh("./graph/sydney.md2");
57     avatar_node = smgr->addAnimatedMeshSceneNode(avatar);
58     avatar_node->setScale(vector3df(.1,.1,.1));
59     avatar_node->setPosition(vector3df(5,2.5,5));
60     avatar_node->setRotation(vector3df(0,270,0));
61     avatar_node->getMaterial(0) = material;

62     cube = smgr->addCubeSceneNode(1.0f, 0, -1,
63                    vector3df(10, 2, 10),
64                    vector3df(45.0, 0, 0),
65                    vector3df(1.0f, 1.0f, 1.0f));
66     cube->setMaterialTexture(0,
               driver->getTexture("graph/purple.jpg"));

67     cube->addAnimator(
               smgr->createRotationAnimator(vector3df(1,.5,.25)));

68     while (device->run()) {
69         driver->beginScene(true,true,
                     video::SColor(255,100,101,140));
70         smgr->drawAll();
71         driver->endScene();
72     }

73     driver->drop();

74     return(0);
75 }

