Zum Inhalt springen

Irrlicht - from Noob to Pro: Beispielcode2

Aus Wikibooks
//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 Dreieck 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;
	
	//Während das Device aktiv ist ...
	while(device->run())
	{		
		//Szene beginnen
		driver->beginScene(true, true, SColor(3,150,203,255));

		//Material festlegen
		driver->setMaterial(material);

		//Position des Dreiecks auf der Z-Achse (="Tiefenachse")
		const irr::f32 z = 1.0f;

		//Definieren der Vertices
		video::S3DVertex vaVertices[3]; //Das Array vom Typ S3DVertex
	        //Punkt A
		vaVertices[0].Pos.X = -0.5f; //X
		vaVertices[0].Pos.Y = -0.3f; //Y
		vaVertices[0].Pos.Z = z;	 //Z	
		vaVertices[0].Color = video::SColor(255,255,0,0); //Rot
		//Punkt B
		vaVertices[1].Pos.X = 0.5f;  //X
		vaVertices[1].Pos.Y = -0.3f; //Y
		vaVertices[1].Pos.Z = z;     //Z
		vaVertices[1].Color = video::SColor(255,0,255,0); //Grün
		//Punkt C
		vaVertices[2].Pos.X = 0.0f;  //X
		vaVertices[2].Pos.Y = 0.5f;  //Y
		vaVertices[2].Pos.Z = z;     //Z
		vaVertices[2].Color = video::SColor(255,0,0,255); //Blau

		//Definieren der Indicies
		u16 uiIndicies[3] = {2,  //Punkt C
				     1,  //Punkt B
				     0}; //Punkt A
		
		//Zeichnen des Dreiecks
		driver->drawIndexedTriangleList(
			&vaVertices[0],		//Zeiger auf das erste Element im Vertices-Array
			3,					//Anzahl der Elemente im Vertices-Array
			&uiIndicies[0],		//Zeiger auf das erste Element in Indicies-Array
			1);					//Anzahl der zu zeichnenden Dreiecke

		//Szene beenden
		driver->endScene();
	}
	//Das Device freigeben
	device->drop();
	
	//Keinen Fehler zurückgeben
	return 0;
}