Texture Loader: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Der Kateogrie Technik oder Algorithmus zugeordnet)
(Bestehende Texture Loader)
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 9: Zeile 9:
 
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.
 
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.)
+
Man kann sich leicht vorstellen, dass der '''Texture Loader''' für jedes Bildformat seine Ladeprocedur anpassen muss. (Ein nicht zu unterschätzender Aspekt, wenn man selber einmal einen '''Texture Loader''' schreiben will.)
  
 
==Wie schreibe ich einen Texture Loader?==
 
==Wie schreibe ich einen Texture Loader?==
Zeile 60: Zeile 60:
 
|- valign="top"
 
|- valign="top"
 
|glBMP.pas  
 
|glBMP.pas  
|Die ursprüngliche Seite des Autors ist leider nicht mehr verfügbar, der Loader kann aber aus dem [[DGL-SDK]] bezogen werden.
+
|Die ursprüngliche Seite des Autors ist leider nicht mehr verfügbar, der Loader kann aber aus dem [[DGLSDK]] 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.
 
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.
Zeile 75: Zeile 75:
 
*Kann ausschließlich nur Dateien laden.
 
*Kann ausschließlich nur Dateien laden.
 
*Die Texturen werden immer mit einem einheitlichen Format generiert. Texturen werden immer mit Alphakanal erzeugt.
 
*Die Texturen werden immer mit einem einheitlichen Format generiert. Texturen werden immer mit Alphakanal erzeugt.
 +
|- valign="top"
 +
|[http://andorra.sourceforge.net/ Andorra 2D]
 +
|Bei Andorra 2D handelt es sich eigentlich um eine für Pascal geschriebene 2D Grafikbibliothek. Jedoch beinhaltet diese auch einen sehr leicht erweiterbaren, objektorientierten Texturlader. Es existieren native Implementierungen zum Laden von TGA, PNG und BMP Bildern sowie Bindungen für FreeImage und OpenIL. Der Andorra Loader integriert sich zudem automatisch nahtlos in die VCL, sofern dies gewünscht ist. Units des Andorra 2D Paketes, die benötigt werden sind: AdBitmap.pas (TAdBitmap) sowie die optionalen Loaderbibliotheken AdFormats, AdPNG, AdTGA, AdBMP etc.
 +
 +
'''Pro'''
 +
*Objektorientiert
 +
*Modular (erweiterbar durch einfaches einbinden entsprechender Lader-Units)
 +
*Integration in die VCL (es können alle VCL Formate geladen werden und die VCL kann alle Andorra Formate laden)...
 +
*... ist aber komplett von der VCL unabhängig (wenn AdFormats.pas nicht eingebunden)
 +
*Viele native Lader und Anbindungen an andere Bibliotheken
 +
*Grafiksystem unabhängig
 +
'''Contra'''
 +
*Erkennt den Dateitypen ausschließlich anhand des Dateinamen.
 +
*Kann ausschließlich nur Dateien laden.
 +
*Die Texturen werden immer mit einem einheitlichen Format (32 Bit) generiert. Texturen werden immer mit Alphakanal erzeugt.
 +
*Die Texturen müssen per Hand auf 2^n Format gebracht und in OpenGL geladen werden.
 
|}
 
|}
 
[[Kategorie:Technik_oder_Algorithmus]]
 
[[Kategorie:Technik_oder_Algorithmus]]

Aktuelle Version vom 20. März 2009, 22:19 Uhr

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 Aspekt, 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 DGLSDK 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.
Andorra 2D Bei Andorra 2D handelt es sich eigentlich um eine für Pascal geschriebene 2D Grafikbibliothek. Jedoch beinhaltet diese auch einen sehr leicht erweiterbaren, objektorientierten Texturlader. Es existieren native Implementierungen zum Laden von TGA, PNG und BMP Bildern sowie Bindungen für FreeImage und OpenIL. Der Andorra Loader integriert sich zudem automatisch nahtlos in die VCL, sofern dies gewünscht ist. Units des Andorra 2D Paketes, die benötigt werden sind: AdBitmap.pas (TAdBitmap) sowie die optionalen Loaderbibliotheken AdFormats, AdPNG, AdTGA, AdBMP etc.

Pro

  • Objektorientiert
  • Modular (erweiterbar durch einfaches einbinden entsprechender Lader-Units)
  • Integration in die VCL (es können alle VCL Formate geladen werden und die VCL kann alle Andorra Formate laden)...
  • ... ist aber komplett von der VCL unabhängig (wenn AdFormats.pas nicht eingebunden)
  • Viele native Lader und Anbindungen an andere Bibliotheken
  • Grafiksystem unabhängig

Contra

  • Erkennt den Dateitypen ausschließlich anhand des Dateinamen.
  • Kann ausschließlich nur Dateien laden.
  • Die Texturen werden immer mit einem einheitlichen Format (32 Bit) generiert. Texturen werden immer mit Alphakanal erzeugt.
  • Die Texturen müssen per Hand auf 2^n Format gebracht und in OpenGL geladen werden.