Texture Loader: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Wichtige OpenGL Befehle)
(Bestehende Texture Loader)
Zeile 31: Zeile 31:
 
==Bestehende Texture Loader==
 
==Bestehende Texture Loader==
 
(Loader für Delphi)
 
(Loader für Delphi)
{| boarder="1" rules="all"
+
{| border="1" rules="all"
 
! Name (Link) || Features, Beschreibung
 
! Name (Link) || Features, Beschreibung
|-
+
|- valign="top"
|glBitmap.pas || Objektorientierter Loader. Benutzt die [[DGLOpenGL.pas]]. Bietet Funktionen um aus Datein oder Streams zu Laden. Ist der Offizielle Loader der DGL und wird von den Meisten Projekten auf DelphiGL.com genutzt.
+
|[http://www.dev-center.de/index.php?cat=header&file=glbitmap glBitmap.pas]  
|-
+
|'''Pro'''
|glBMP.pas ||
+
*Ist objektorientiert und verfügt über ein leicht erweiterbares Klassenmodel
|-
+
*Benutzt von Hause aus die [[DGLOpenGL.pas]]
|Textures.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
 +
|- valign="top"
 +
|[http://www.sulaco.co.za/opengl5.htm##bmp Textures.pas]
 +
|Von der Textures.pas existieren die verschiedensten Modifikationen. Unter anderem auch eine die Texturen aus Streams ldane 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.
 +
|- valign="top"
 +
|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 wurde und in eine (wie ich finde bescheidene) Klassenstruktur gepackt und erweitert.
 +
 
 +
'''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.
 
|}
 
|}

Version vom 8. April 2005, 21:08 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 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
Textures.pas Von der Textures.pas existieren die verschiedensten Modifikationen. Unter anderem auch eine die Texturen aus Streams ldane 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 wurde und in eine (wie ich finde bescheidene) Klassenstruktur gepackt und erweitert.

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.