//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);
//Unser Winkel für die Rotation des Würfels
f32 fWinkel = 0;
//Unsere Variablen für die Zeitmessung
u32 uAktuelleZeit = 0; //Zum Speichern der aktuellen Zeit
u32 uZuletztGestoppt = 0; //Die letzte gestoppte Zeit
const u32 uSchrittAlleMs = 50; //Nach welcher Zeit(ms) soll die Szene gedreht werden ?
//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"Einen Wuerfel darstellen mit Irrlicht !");
//Den Videotreiber erstellen und Zeiger aus dem Device abholen
IVideoDriver* driver = device->getVideoDriver();
//Ein Material deklarieren
video::SMaterial material;
//Das Material nimmt kein Licht an
material.Lighting = false;
//Das Material soll voll gezeichnet werden
material.Wireframe = false;
//Z-Positionen
const irr::f32 z_vorne = -0.3f; //Vorderseite
const irr::f32 z_hinten = 0.3f; //Rückseite
//Definieren der Vertices
video::S3DVertex vaVertices[8]; //Das Array vom Typ S3DVertex
//Vorne
vaVertices[0] = S3DVertex(-0.3f,-0.3f, z_vorne,0,0,0,SColor(255,255,0,0),0,0); //Punkt A
vaVertices[1] = S3DVertex(-0.3f, 0.3f, z_vorne,0,0,0,SColor(255,0,255,0),0,0); //Punkt B
vaVertices[2] = S3DVertex( 0.3f,-0.3f, z_vorne,0,0,0,SColor(255,0,0,255),0,0); //Punkt C
vaVertices[3] = S3DVertex( 0.3f, 0.3f, z_vorne,0,0,0,SColor(255,0,0,255),0,0); //Punkt D
//Hinten
vaVertices[4] = S3DVertex(-0.3f,-0.3f, z_hinten,0,0,0,SColor(255,255,255,0),0,0); //Punkt E
vaVertices[5] = S3DVertex(-0.3f, 0.3f, z_hinten,0,0,0,SColor(255,0,255,255),0,0); //Punkt F
vaVertices[6] = S3DVertex( 0.3f,-0.3f, z_hinten,0,0,0,SColor(255,255,0,255),0,0); //Punkt G
vaVertices[7] = S3DVertex( 0.3f, 0.3f, z_hinten,0,0,0,SColor(255,0,0,255),0,0); //Punkt H
//Definieren der Indicies
u16 uiIndicies[36] = {0, 1, 2, //A->B->C=Dreieck1 (Vorderseite)
2, 1, 3, //C->B->D=Dreieck2 (Vorderseite)
3, 6, 2, //D->G->C=Dreieck3 (Rechte Seite)
3, 7, 6, //D->H->G=Dreieck4 (Rechte Seite)
6, 7, 5, //G->H->F=Dreieck5 (Rückseite)
5, 4, 6, //F->E->G=Dreieck6 (Rückseite)
5, 1, 4, //F->B->E=Dreieck7 (Linke Seite)
4, 1, 0, //E->B->A=Dreieck8 (Linke Seite)
1, 5, 7, //B->F->H=Dreieck9 (Oberseite)
7, 3, 1, //H->D->B=Dreieck10 (Oberseite)
4, 0, 6, //E->A->G=Dreieck11 (Unterseite)
6, 0, 2};//G->A->C=Dreieck12 (Unterseite)
//Während das Device aktiv ist ...
while(device->run())
{
//Szene beginnen
driver->beginScene(true, true, SColor(3,150,203,255));
//Aktuelle Zeit abholen
uAktuelleZeit = device->getTimer()->getTime();
//Gewünschte Zeit vergangen ?
if (uAktuelleZeit >= (uZuletztGestoppt + uSchrittAlleMs))
{
uZuletztGestoppt = uAktuelleZeit; //Aktuelle Zeit stoppen
//Den Winkel erhöhen
fWinkel += 1.5f;
//Nicht über 360 Grad drehen
if (fWinkel > 360) fWinkel = 1;
}
//Material festlegen
driver->setMaterial(material);
//Die komplette Szene über eine Matrix drehen
core::matrix4 Matrix; //4x4 Matrix
Matrix.makeIdentity(); //Initialisieren
//Um die Y- u. Z-Achse drehen
Matrix.setRotationDegrees(core::vector3df(0, fWinkel, fWinkel));
//Übertragen der Matrix in die Weltmatrix
driver->setTransform(video::ETS_WORLD, Matrix);
//Zeichnen des Würfels
driver->drawIndexedTriangleList(
&vaVertices[0], //Zeiger auf das erste Element im Vertices-Array
8, //Anzahl der Elemente im Vertices-Array
&uiIndicies[0], //Zeiger auf das erste Element in Indicies-Array
12); //Anzahl der zu zeichnenden Dreiecke
//Szene beenden
driver->endScene();
}
//Das Device freigeben
device->drop();
//Keinen Fehler zurückgeben
return 0;
}