Texture Loader

Aus DGL Wiki
Version vom 8. April 2005, 21:49 Uhr von 217.184.65.19 (Diskussion) (Bestehende Texture Loader)

Wechseln zu: Navigation, Suche

Texture Loader

Was ist das?

Der Texture Loader ist ein Tool, welches das Verwalten von Texturen erleichtern soll.
Sobald man Texturen in seinen Projekten verwenden will, benötigt man einen Texture Loader.

Was macht ein Texture Loader?

Er lädt Texturen!
So einfach wie es klingt ist es aber nicht. Texture Loader sind meist recht vielfältige Tools. Viele von ihnen ermöglichen es dem Nutzer Bilder verschiedener Bildformate (wie z.B. *.jpg, *.tga, *.png etc) zu Laden und als Texture zur Verfügung zu stellen.

Man kann sich leicht vorstellen, dass der Texture Loader für jedes Bildformat seine Ladeprocedur anpassen muss. (Ein nicht zu unterschätzender Aspect, wenn man selber einmal einen Texture Loader schreiben will.)

Wie schreibe ich einen Texture Loader?

Am besten gar nicht!
Es gibt schon eine Menge leistungsfähige Texture Loader. (z.B. "glBitmap.pas" welcher aus der DGL Comunity stammt.) Wenn die Funktionen von keinem Loader deinen Ansprüchen genügen, dann nimm den der diesen am nächsten kommt und erweitere ihn entsprechend.

Wenn es unabdingbar ist, dass der Texture Loader selber geschrieben sein muss, dann hier ein paar Tips:

  • Verwende für die Texturen Klassen
  • Ermögliche das Laden aus Streams. Damit wird dein Loader vielseitiger.
  • Die wichtigsten Bildformate für Texturen sind *.bmp, *.jpg, *.tga, *.png
  • Informationen zu den Bildformaten findest du auf wotsit.org

(Es kann nie schaden sich einmal den Code eines bestehenden Texture Loader anzusehen.)

Außerdem sind die folgenden Befehle sicherlich wichtig:

Wichtige OpenGL Befehle

glGenTextures, glDeleteTextures, glBindTexture, glTexParameter, glTexImage1D, glTexImage2D, glTexEnv, glTexGen

Bestehende Texture Loader

(Loader für Delphi)

Name (Link) Features, Beschreibung
glBitmap.pas   Pro
  • Ist objektorientiert und verfügt über ein leicht erweiterbares Klassenmodel
  • Benutzt von Hause aus die DGLOpenGL.pas
  • Lädt seine Daten ausschließlich aus Streams. Er bietet aber für so ziemlich alle Fälle bereits eine Kappselung. So zum Beispiel für Dateien, Resourcen (Name oder ID) oder aber auch für TBitmaps.
  • Unterscheidet anhand des Inhaltes welches Format ihm vor liegt.
  • Bietet verschiedene Möglichkeiten die Texturen vor dem Generieren zu Manipulieren. Es besteht die Möglichkeit eine Methode zu übergeben die für jedes Pixel aufgerufen wird.
  • Alphakanal kann mit hilfe einer übergebbaren Methode erzeugt werden.
  • Texturen können dynamisch erzeugt werden (Mit hilfe der selben Methoden wie beim Manipulieren)
  • Texturen werden ausschließlich so generiert wie sie dem Loader vorliegen. Es wir kein Alphakanal erstellt wenn keiner in der Textur vorhanden ist.

Contra

  • Projekte werden durch die verwendenten Biblioheken größer als dem ein oder anderen lieb ist
  • Klassenschnittstelle kann auf unerfahrene Entwickler, aufgrund ihrer Größe, verwirrend wirken. Wer allerdings grundlegende Kenntnisse in OOP hat wird problemlos eine Textur erstellen/laden und binden können.
Textures.pas Von der Textures.pas existieren die verschiedensten Modifikationen. Unter anderem auch eine die Texturen aus Streams laden kann. Diese Versionen sind aber alle nicht offiziel und werden auch nicht publiziert.

Pro

  • Sehr einfache Schnittstelle. Besteht aus einer einzigen Methode die einen Datei oder Resourcenamen entgegen nimmt und eine TexturID zurück liefert
  • Anwendung wird nicht so groß, da auf einen Großteil der Bibliotheken von Delphi verzichtet wurde
  • Importiert die benötigten OpenGL Methoden zum generieren statisch. Somit ist der Loader unabhängig von dem benutzten OpenGL Header.

Contra

  • Ist nicht in der Lage aus Streams zu laden
  • Erkennt den Dateitypen ausschließlich anhand des Datei oder Resourcenamen. Bei Resourcen muss eine Endung angegeben werden die von dem Loader wieder abgeschnitten wird.
  • Die Texturen werden immer mit einem einheitlichen Format generiert. Je nach Anpassumg im Quelltext wird entweder immer ein Alphakanal erzeugt oder eben nicht.
glBMP.pas Die ursprüngliche Seite des Autors ist leider nicht mehr verfügbar, der Loader kann aber aus dem DGL-SDK bezogen werden.

Bei der glBMP.pas handelt es sich lediglich um die Textures.pas bei der die grundlegenden Funktionalität übernommen und in eine (relativ bescheidene) Klassenstruktur gepackt und erweitert wurde.

Pro

  • Ist objektorientiert
  • Bietet verschiedene Möglichkeiten die Texturen vor dem Generieren zu Manipulieren.
  • Alphakanal kann mit hilfe einer übergebbaren Methode erzeugt werden.

Contra

  • Klassenmodel lässt sich nicht erweitern ohne in die bestehenden Quellen einzugreifen
  • Bitmapdaten der Textur befinden sich auch nach dem Generieren der Textur im Clientspeicher
  • Ist nicht in der Lage aus Streams zu laden
  • Erkennt den Dateitypen ausschließlich anhand des Dateinamen.
  • Kann ausschließlich nur Dateien laden.
  • Die Texturen werden immer mit einem einheitlichen Format generiert. Texturen werden immer mit Alphakanal erzeugt.