Irrlicht für Einsteiger

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Neue Antwort erstellen

Farbfinsternis

Betreff: Irrlicht für Einsteiger

BeitragFr, Jun 05, 2009 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Irrlicht ganz einfach

1. Die Vorspeise

Am Anfang erscheint Irrlicht wie ein riesiges Monster das kaum zu bewältigen ist. In der Tat ist es ein Monster denn es ist eine sehr umfangreiche Grafik-Engine, aber wenn man erst die Konzepte verstanden hat ist Irrlicht einfach zu handhaben und handzahm. Dieses Tutorial soll den Einstieg erleichtern und grundlegende Dinge erläutern die, einmal verstanden, den Umgang mit der Engine wesentlich einfacher gestalten.

Dieses Tutorial wird komplett im SuperStrict Mode durchgezogen und das Framework ist irrlicht.core, zusätzlich benötigte Module werden an den entsprechenden Stellen importiert.


1.1 Das Konzept

Der Wrapper für Irrlicht wurde von gman programmiert und versucht die Struktur der Irrlicht Engine so genau wie möglich von C++ auf BlitzMax zu übertragen. Das hat den Grund dass man so die original API Dokumentation zu Rate ziehen kann um den Umgang mit der Engine zu lernen. Selbstverständlich konnte der Zugriff auf die Engine in BlitzMax nicht zu 100% übertragen werden, aber in der Regel wird man schnell fündig wenn die BlitzMax Dokumentation etwas nicht erläutern will.
Wer aus ideologischen, idiotischen oder gesundheitlichen Gründen das Klassenmodell nicht verwenden möchte kann auch das Blitz3D ähnliche Interface verwenden das gman mit seinem Wrapper mitliefert. Dieses ist jedoch kaum dokumentiert und ich habe mich auch noch nicht damit befasst. Dieses Tutorial wird einzig das OOP Interface zum Thema haben.


1.2 Graphics3D

Ein Graphics3D existiert in Irrlicht nicht. Dafür gibt es aber die Klasse IrrlichtDevice welche widerum die Funktion Create() bereit stellt. Es gibt noch einen zweiten Weg der noch etwas komplexer ist, aber den erläutere ich vielleicht später in einem "Advanced" Teil dieser Tutorial Serie.

Um einen Bildschirm (Fenster oder Fullscreen) mittels Irrlicht zu öffnen verwenden wir also die Funktion Create() aus der Klasse IrrlichtDevice und lassen uns einen Kontext auf die Engine zurückgeben.
Code: [AUSKLAPPEN]

SuperStrict
Framework irrlicht.core

Local irr:IrrlichtDevice = IrrlichtDevice.Create()

Auch wenn ihr jetzt denkt dass das jetzt super einfach wäre und schon in die Tasten haut: Create() hat einen ordentlichen Rattenschwanz an Parametern.

  • driver:Int
  • size:Dimension2di
  • bits:Int
  • bFullscreen:Int
  • bStencilbuffer:Int
  • bVsync:Int
  • evt:IEventReceiver

driver:Int
Der Parameter driver erwartet eine Konstante die der Engine sagt ob sie mit OpenGL, DirectX, einem der beiden Software-Renderer oder ohne Ausgabe mit einem Null-Device arbeiten soll. Die Konstanten hierzu sind gut lesbar und lauten:

  • EDT_OPENGL
  • EDT_DIRECT3D8
  • EDT_DIRECT3D9
  • EDT_SOFTWARE
  • EDT_BURNINGVIDEO (auch ein Software-Renderer)
  • EDT_NULL


size:Dimension2di
Irrlicht verwaltet viele zusammengehörende Werte in Arrays die dann mittels Types als Datentyp präsentiert werden. So definiert Dimension2Di ein 2D Array (sieht man ja im Namen) aus Integern (das "i" am Ende). gman war so nett und hat dazu eine Funktion spendiert mit der man ein derartiges Array füllen kann: _Dimension2di(). Es gibt für viele derartiger "Arrays" eine Funktion die sich dadurch auszeichnet dass sie genauso heißt wie der Datentyp, nur dass ein Unterstrich vorangestellt wird, bspw. für den Datentyp Vector3df die Funktion _Vector3df().
Um nun den Parameter size zu bedienen müssen wir nur schreiben _Dimension2di(800, 600). Die Auflösung 800x600 habe ich hier exemplarisch angegeben, natürlich darf jede verfügbare Auflösung genutzt werden.

bits:Int
Der Parameter bits definiert die Farbtiefe des Bildschirms, diese kann 32 oder 16 sein. Als Standardwert ist 16Bit vergeben.

bFullscreen:Int
Dieser Parameter ist ein Flag der mit True oder False belegt werden kann. True zwingt Eure Applikation in den Vollbildmodus, False verhindert dies. Dass es sich um ein Flag handelt seht ihr am führenden "b" welches für "BOOL" steht. Einige werden anmerken dass bFullscreen ein Integer erwartet aber True oder False in BlitzMax nur Bytes sind. Das ist richtig, aber ich musste mich belehren lassen dass Integer zum einen schneller sind als Bytes und zum anderen keine weiteren Nachteile mit sich bringen da BlitzMax auch den Datentyp Byte als volles Integer anlegt. Der Default-Wert für bFullscreen ist False.

bStencilbuffer
Dieses interessante Flag verschafft Eurem Spiel die Möglichkeit Echtzeitschatten zu nutzen wenn Ihr es auf True setzt. Als Standard ist dieser Wert auf False gesetzt.

bVsync:Int
Auch bVsync ist wieder ein Flag welches definiert ob die Applikation mit vertikaler Synchronisation oder ohne laufen soll. Standard mäßig ist hier False eingesetzt.

evt:IEventReceiver
Normalerweise muss hier ein Objekt vom Typ IEventReceiver übergeben werden. Der EventReceiver sorgt sich um eingehende Ereignisse und bietet Euch diverse Methoden um mittels Tastatur und Maus in das Geschehen einzugreifen. Der Default-Wert für diesen Parameter ist NULL und so soll es auch bleiben da wir für dieses Tutorial den wesentlich besseren SmoothEventReceiver aus dem Irrlicht-Addon verwenden werden. Woher wir den bekommen, wo der hin muss und wie wir den initialisieren erläutere ich später noch.

Wenn Ihr also Eure App unter OpenGL, ohne Schatten in 16Bit im Fenster und ohne VSync ausführen wollt muss der oben angeführte Code so aussehen:
Code: [AUSKLAPPEN]

SuperStrict
Framework irrlicht.core

Local irr:IrrlichtDevice = IrrlichtDevice.Create(EDT_OPENGL, _Dimension2di(800, 600))


1.3 Ein Bildschirm, ein Würfel und ein EventReceiver
Im zweiten Tutorial werde ich auf den vermissten SmoothEventReceiver eingehen, erklären wie man einen Würfel, eine Kamera und ein Licht bastelt und warum PolledInput und Irrlicht sich hassen.
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group