Code: Select all
#include <irrlicht.h>
using namespace irr;
#pragma comment(lib, "Irrlicht.lib")
int main()
{
IrrlichtDevice *device = createDevice(video::EDT_DIRECTX8, core::dimension2d<s32>(1024, 768), 32, true, true);
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
device->getCursorControl()->setVisible(false);
scene::IAnimatedMesh* mesh = smgr->getMesh("terrain.ms3d");
smgr->addLightSceneNode(0, core::vector3df(0,600,0), video::SColorf(1000.0f,1000.0f,1000.0f,1000.0f), 1000.0f);
//nice texture manipulation
//smgr->getMeshManipulator()->makePlanarTextureMapping(mesh->getMesh(0), 3.5f);
scene::ISceneNode* node = 0;
node = smgr->addOctTreeSceneNode(mesh);
node->setScale(core::vector3df(80,45,80));
node->setPosition(core::vector3df(0,-500,0));
node->setMaterialTexture(0, driver->getTexture("grass.jpg"));
node->getMaterial(0).EmissiveColor.set(0,0,0,0);
// add animated water
mesh = smgr->addHillPlaneMesh("myHill",
core::dimension2d<f32>(512,512),
core::dimension2d<s32>(40,40), 0, 0,
core::dimension2d<f32>(0,0),
core::dimension2d<f32>(10,10));
node = smgr->addWaterSurfaceSceneNode(mesh->getMesh(0), 3.0f, 300.0f, 30.0f);
node->setPosition(core::vector3df(0,-480,0));
node->setMaterialTexture(0, driver->getTexture("water.jpg"));
node->setMaterialTexture(1, driver->getTexture("water2.jpg"));
node->setMaterialType(video::EMT_REFLECTION_2_LAYER);
// create light
node = smgr->addLightSceneNode(0, core::vector3df(0,0,0),
video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600.0f);
scene::ISceneNodeAnimator* anim = 0;
anim = smgr->createFlyCircleAnimator (core::vector3df(0,150,0),250.0f);
node->addAnimator(anim);
anim->drop();
// attach billboard to light
node = smgr->addBillboardSceneNode(node, core::dimension2d<f32>(50, 50));
node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
node->setMaterialTexture(0, driver->getTexture("particlewhite.bmp"));
// create a particle system
scene::IParticleSystemSceneNode* ps = 0;
ps = smgr->addParticleSystemSceneNode(false);
ps->setPosition(core::vector3df(-70,60,40));
ps->setScale(core::vector3df(2,2,2));
ps->setParticleSize(core::dimension2d<f32>(20.0f, 10.0f));
scene::IParticleEmitter* em = ps->createBoxEmitter(
core::aabbox3d<f32>(-7,0,-7,7,1,7),
core::vector3df(0.0f,0.03f,0.0f),
80,100,
video::SColor(0,255,255,255), video::SColor(0,255,255,255),
800,2000);
ps->setEmitter(em);
em->drop();
scene::IParticleAffector* paf = ps->createFadeOutParticleAffector();
ps->addAffector(paf);
paf->drop();
ps->setMaterialFlag(video::EMF_LIGHTING, false);
ps->setMaterialTexture(0, driver->getTexture("particle.bmp"));
ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);
// add animated character
mesh = smgr->getMesh("faerie.md2");
scene::IAnimatedMeshSceneNode* anode = 0;
anode = smgr->addAnimatedMeshSceneNode(mesh);
anode->setPosition(core::vector3df(-50,22,-60));
anode->setMD2Animation(scene::EMAT_STAND);
anode->setMaterialTexture(0, driver->getTexture("Faerie5.BMP"));
//glock
mesh = smgr->getMesh("glock.ms3d");
scene::IAnimatedMeshSceneNode* glocknode = 0;
glocknode = smgr->addAnimatedMeshSceneNode(mesh);
glocknode->setPosition(core::vector3df(-50,22,-60));
glocknode->setMaterialTexture(0, driver->getTexture("glock.jpg"));
//9mm
mesh = smgr->getMesh("9mm.ms3d");
scene::IAnimatedMeshSceneNode* mmnode = 0;
mmnode = smgr->addAnimatedMeshSceneNode(mesh);
mmnode->setPosition(core::vector3df(-110,50,-60));
mmnode->setMaterialTexture(0, driver->getTexture("9mm.jpg"));
//skydome
mesh = smgr->getMesh("sphere.ms3d");
scene::IAnimatedMeshSceneNode* snode = 0;
snode = smgr->addAnimatedMeshSceneNode(mesh);
snode->setPosition(core::vector3df(0,-500,0));
snode->setScale(core::vector3df(250,250,250));
snode->setMaterialTexture(0, driver->getTexture("sky.jpg"));
//shadows
anode->addShadowVolumeSceneNode();
glocknode->addShadowVolumeSceneNode();
mmnode->addShadowVolumeSceneNode();
snode->addShadowVolumeSceneNode();
smgr->setShadowColor(video::SColor(220,0,0,0));
/*
Finally we simply have to draw everything, that's all.
*/
scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS();
camera->setPosition(core::vector3df(-50,50,-150));
camera->setFarValue(15000.0f);
int lastFPS = -1;
while(device->run())
{
driver->beginScene(true, true, 0);
smgr->drawAll();
driver->endScene();
int fps = driver->getFPS();
if (lastFPS != fps)
{
wchar_t tmp[1024];
swprintf(tmp, 1024, L"Imperial Guard - "\
L"(fps:%d) Triangles:%d", fps,
driver->getPrimitiveCountDrawn());
device->setWindowCaption(tmp);
lastFPS = fps;
}
}
device->drop();
return 0;
}