Texturdateien Ordnung
-
Hi,
ich habe jetzt so 250 Texturen in pngs und in einem Ordner, nun das sieht natürlich WIE ein Saustall aus, am liebsten hätte ich sie alle in einer Datei. Aus Quake kennt man ja diese *.wad , sowas in der Art wäre kewl, weiß einer wie man solche Formate macht? Ausliest und so?
-
In ein ZIP-Archiv packen?
-
Am einfachsten wäre doch ein Format nach folgendem Aufbau:
- Anzahl der Dateien im Archiv
- Für jede Datei: Name und Startposition im Archiv
- Dann der Inhalt jeder DateiEventuell kannst Du noch eine Passwortverschlüsselung und einen Integritätscheck (Prüfsumme) einbauen...
-
Hm nur ich hab sowas noch nie gemacht
gibt es dazu irgendwo infos?
@TomasRiker
so wie du das sagst erinnert mich das an Folgendes:
Alle Grafiken in einen Vector laden, den Vector abspeichern.Sind dann auch die ganzen Grafiken drine?
-
Bei der neulich von <OGRE> erwähnten Graphik-Engine ( http://ogre.sourceforge.net/ ) ist ein Dateisystem mit ZIP integriert.
-
Original erstellt von Norondion:
Bei der neulich von <OGRE> erwähnten Graphik-Engine ( http://ogre.sourceforge.net/ ) ist ein Dateisystem mit ZIP integriert.Ja, das habe ich bei meiner Engine auch gemacht. Allerdings kann sie nur ZIP-Dateien entschlüsseln, nicht entpacken (man muss also die Option "Keine Komprimierung" wählen). Man kann dann als Dateiname z.B. der Ladefunktion für Texturen einfach "Textur2412.png@Texturen.zip" übergeben
@Rakshasa:
Im Prinzip ist es ein Vektor, ja.
Pseudo-Code zur Erstellung eines Archivs:struct ArchivHeaderEintrag { String Name; // Name der Datei int Größe; // Größe der Datei int Offset; // Wo fängt die Datei im Archiv an? }; // Archiv-Header erzeugen int Cursor = 0; Für jede hinzuzufügende Datei { ArchivHeaderEintrag[Datei].Name = Dateiname; ArchivHeaderEintrag[Datei].Größe = Dateigröße; ArchivHeaderEintrag[Datei].Offset = Cursor; Cursor += Dateigröße; } // Offset-Werte korrigieren Für jede hinzuzufügende Datei { ArchivHeaderEintrag[Datei].Offset += HeaderGröße; } // Archiv-Header schreiben Schreibe ArchivHeaderEinträge ins Archiv; // Dateien anhängen Für jede hinzuzufügende Datei { Schreibe Inhalt der Datei ins Archiv; }
Wenn Du jetzt später eine Datei aus dem Archiv laden willst, liest Du den Header Schritt für Schritt. So lange, bis Du die richtige Datei gefunden hast. Das Offset-Element sagt Dir dann, wohin Du den Lesezeiger der Datei setzen musst.
[ Dieser Beitrag wurde am 06.04.2003 um 14:08 Uhr von TomasRiker editiert. ]
-
ich hab so was noch nie gemacht, aber ich würde mir eine Datei zusammen basteln und die dann mit bzip2 komprimieren Programm intern kann ich dann die libbzip2 zum entpacken nutzen
Dateiname: <name> Checksumme: <checksumme> Texturname: <name> Texturesize: <bytes> <Textur> ...
das zu parsen ist super einfach, vorallem kann man das sehr schnell machen.
-
Original erstellt von TomasRiker:
... Ja, das habe ich bei meiner Engine auch gemacht. Allerdings kann sie nur ZIP-Dateien entschlüsseln, nicht entpacken (man muss also die Option "Keine Komprimierung" wählen). ...Geht ja auch schneller und ZIP bringt bei JPG auch nicht gerade viel.
-
Original erstellt von Norondion:
Geht ja auch schneller und ZIP bringt bei JPG auch nicht gerade viel.Wenn überhaupt...
Bläht sie eher wieder auf...
-
Früher hat Quake und Halflife dazu das PAK format benutzt.
Ist kompatibel mit dem ZIP Format, schliesst jegliche Komprimierung aus ... und halt verdammt einfach zu handeln ...
Da stehen wirklich nur die Dateinamen+Länge und die Offsets zu den Dateien drin ...
Fertig ...Generell alles über Fileformate findest du unter www.wotsit.org