Irrlicht - from Noob to Pro: Beispielcode5
Erscheinungsbild
//Einbinden der Header-Datei von Irrlicht
#include <irrlicht.h>
//Einbinden der Namespaces
using namespace irr;
using namespace core;
using namespace video;
//Die Hauptprozedur main()
int main()
{
//Unser Irrlicht-Device erstellen und initialisieren
IrrlichtDevice *device =
createDevice( video::EDT_OPENGL, dimension2d<u32>(640, 480), 32,
false, false, false, 0);
//Konnte das Device erstellt werden ?
if (!device)
return 1; //Falls nicht, Fehlercode zurückgeben und Programm abbrechen
//Den Text des Hauptfensters festlegen
device->setWindowCaption(L"Ein Mesh in Irrlicht !");
//Den Videotreiber erstellen und Zeiger aus dem Device abholen
IVideoDriver* driver = device->getVideoDriver();
//Einen Szene-Manager erstellen und Zeiger aus dem Device abholen
scene::ISceneManager* smgr = device->getSceneManager();
//Erstellen der SceneNode für den Lautsprecher und laden der exportierten Datei
scene::ISceneNode * Speaker_Node = smgr->addMeshSceneNode(smgr->getMesh("Lautsprecher.obj"));
//Keine Lichtberechnung für den Lautsprecher
Speaker_Node->setMaterialFlag(EMF_LIGHTING, false);
//Position korrigieren
Speaker_Node->setPosition(core::vector3df(0.0, 0.0,3));
//Rotation korrigieren (Objekt steht auf dem Kopf)
Speaker_Node->setRotation(core::vector3df(0.0,0.0,180));
//Culling umkehren (falls nötig)
Speaker_Node->setMaterialFlag(EMF_BACK_FACE_CULLING, true);
Speaker_Node->setMaterialFlag(EMF_FRONT_FACE_CULLING, false);
//Einen Rotations-Animator für den Lautsprecher erstellen
scene::ISceneNodeAnimator* anim = smgr->createRotationAnimator(
core::vector3df(0.0,1.0,0.0)); //Drehung um die Y-Achse
//Der Lautsprecher-Node den Animator hinzufügen
Speaker_Node->addAnimator(anim);
//Den Animator wieder freigeben, da er nicht mehr gebraucht wird
anim->drop();
//Eine Integer-Variable zum Speichern der letzten FPS
int lastFPS = -1;
//Einen GUI_Manager erstellen und Zeiger aus dem Device abholen
gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
//Ein Text-Element definieren und an den GUI-Manager übergeben
gui::IGUIStaticText* GUI_debug_text = guienv->addStaticText
(L"",rect<s32>(5, 5, 200, 200),false,true,0,-1,false);
//Eine Kamera erstellen
smgr->addCameraSceneNode(0, core::vector3df(0,0,-2), core::vector3df(0,0,0));
//Während das Device aktiv ist ...
while(device->run())
{
//Szene beginnen
driver->beginScene(true, true, SColor(3,150,203,255));
//Dem Szenemanager sagen, dass er alle Nodes zeichnen soll
smgr->drawAll();
//Die aktuellen Frames per second einholen und merken
int iFPS = driver->getFPS();
//Wieviel Dreiecke wurden beim letzten Durchlauf gezeichnet ?
u32 uTrisDrawn = driver->getPrimitiveCountDrawn();
//FPS-Zahl hat sich geändert ?
if (lastFPS != iFPS)
{
//String erstellen
core::stringw tmp(L"Laden einer Mesh-Datei in Irrlicht\nTreiber : ");
tmp += driver->getName();
tmp += L"\n FPS: [";
tmp += iFPS;
tmp += "]\n";
tmp += "Dreiecke gezeichnet : ";
tmp += uTrisDrawn;
tmp += "\nGrafikkarte ist von : ";
tmp += driver->getVendorInfo();
//String anzeigen
GUI_debug_text->setText(tmp.c_str());
//Letzte FPS merken
lastFPS = iFPS;
}
//Dem GUI-Manager sagen, dass er alle GUIs zeichnen soll
guienv->drawAll();
//Szene beenden
driver->endScene();
}
//Das Device freigeben
device->drop();
//Keinen Fehler zurückgeben
return 0;
}
|