TerKomp
Mittwoch, 22. November 2006 | Autor: Nico
TerKomp ist ein Programm, dass ich momentan plane - ein Kompressionsprogramm, dass Terrains vom TerraGen-Format komprimiert. Terraindaten werden bisher stur Feld für Feld abgespeichert, was 2Byte pro Feld benötigt und bei 2048² kommt da einiges zusammen.
Daher will ich die Höhendaten komprimieren - das ganze soll verlustfrei geschehen um kein Detail zu verlieren. Außerdem wird ein so komprimiertes Terrain seinerseits nochmal durch gängige Packer wie WinZIP, WinRar, etc. gepackt werden können. Normalerweise gibt es da das Phänomen, dass Dateien, die einmal komprimiert wurden beim erneuten komprimieren nicht kleiner werden. Da mein Programm jedoch eine andere Herangehensweise hat wird dieser Effekt nicht auftreten 🙂
Die Frage ist, ob Java die geeignete Plattform ist - Es kann teils scheinbar keine großen Terrains einlesen ohne dass der Java-VM der Speicher ausgeht. c++ kann ich leider (noch) nicht.
Nach ersten Analysen sind Raten zwischen 60 und 70% erreichbar. Ein Releasetermin für eine Version 0.1 steht noch nicht fest und wegen des Studiums kann der noch eine Weile auf sich warten lassen.
Hm. Die Idee hatte ich auch schonmal, ist ja bei solchen Riesendateien auch naheliegend. Wie willst du denn vorgehen? Das Terrain in Quadrate/Rechtecke mit möglichst geringer Höhendifferenz zerhacken? So hatte ich mir das zumindest damals grob gedacht.
Aber ist natürlich blöd, wenn die JVM keine 4096² handeln kann… so viel wieder zum Thema Java. Wie war das mit TerraFormer auf Java? *g* Gaaanz toll.
Grüße, Tobias 😉
Hehe..
Im Grunde würd ich nur die Differenz zum nächsten Feld speichern und hoffen, dass die nich so groß ist und man mit weniger bits auskommt. Ist natürlich blöd, müsste ich mir einen eignen Datentyp zurechtbasteln, der meinetwegen nur 10 Bits hat.
Vorteil: Das klappt immer besser je größer das Terrain ist - Nachteil: Java..
na vielleicht bekomm ich es ja doch noch irgendwie hin. 🙂
Eina andere Idee wäre, die grobe Form in einem niedrig aufgelösten Terrain zu speichern und die Details in einem großen Terrain, dass dann mit weniger großen Zahlen auskommt.
Oja, mit Bits arbeiten ist bestimmt sehr spaßig. Vermutlich kannst du dafür in Java auch keinen Datentyp bauen, denn Java bläht die 10 Bit dann wahrscheinlich zu minimnal 40 Bit auf und schon schiebst du wieder Unmengen Speichersalat durch die Gegend *g*