|
The Genesis Toolkit
11. Oktober, 1998 26. Juli, 1998 20. June, 1998 The Genesis Tools:
The Vegetation Package:
ROUGHDie Aufgabe von ROUGH ist es eine physikalische Strukturkarte zu einem Heightfield zu erstellen. Es gibt verschiedene Typen von Vegetation in einer Landschaft.
In felsigen Bereichen wird man zum Beispiel weniger bzw. andere Vegetation finden als in ebenen Bereichen.
Die Vegetation verändert sich auch in verschiedenen Höhen des Gelädes.
ROUGH erstellt eine Karte der Landschaft. Das Ergebnis ist eine GIF-Datei die als image_map für PovRay oder als plantmap für GEN benutzt werden kann. Jede Vegetationstyp hat seine eigene Farbe in der Karte.
Die -r Option kann dazu verwendet werden, um die felsigen Bereiche zu erkennen. Je höher der Wert, desto mehr Vegetation und weniger Felsbereiche.
GENDie Aufgabe von GEN ist es, Objektpositionen auf dem Gelände zu berechnen wo die Objekte plaziert werden sollen. Das Ergebnis ist eine Include-Datei die alle Objekte beinhaltet.GEN benötigt einige Informationen über das Heightfield: Das größtmögliche Format des Inputfiles ist 2000x2000 Pixel. Optionen für GEN:
BEISPIEL:
Die Heightfield Dimensionen
Die PlantmapDie Plantmap sagt GEN an wo die Objekte plaziert werden sollen. In diesem Beispiel nehme ich das Output-File von ROUGH. Die Objekte werden jeweils da erscheinen, wo in der Plantmap der Palettenindex 4 ist, hier in Rot.BEISPIEL: -mmap.gif -p4 Die Datei map.gif wird als Plantmap verwendet, die Objekte werden bei Palettenindex 4 plaziert.
Abstand zwischen den ObjektenDie Option -s bestimmt den durchschnittlichen Abstand der Objekte zueinander.Je kleiner der Wert, desto dichter and mehr Objekte.
Random Placement (Zufallsabweichung)Die Option -rp schaltet die Zufallsabweichung an oder aus. Dies hat keinen Einfluß auf die Anzahl der erstellten Objekte.
Random Rotation (Zufallsrotation)Die Option -rr schaltet die Zufallsrotation ein oder aus.Jedes Objekt wird um die Y-Achse rotiert (Zufallswert 0...360 Grad) bevor es plaziert wird. Das OutputfileDas Ergebnis von GEN ist ein Includefile für PovRay. Es beinhaltet alle erzeugten Objekte, die auf der Landschaftsoberfläche plaziert werden. Das File sieht dann zum Beispiel so aus:
object{o01 translate<26.262139,7.031357,306.000076>}
object{o01 translate<30.433226,3.125048,245.732643>}
object{o01 translate<36.720893,3.515679,239.608036>}
object{o01 translate<35.880596,5.468833,247.161550>}
object{o01 translate<37.751442,3.906310,354.641423>}
object{o01 translate<43.295404,3.906310,239.690802>}
: : : : : :
: : : : : :
: : : : : :
object{o01 translate<468.526063,5.078202,433.829356>}
CUTTERDie Idee von CUTTER ist es alle Objekte zu entfernen, die von der PovRay-Kamery in der Szene sowieso nicht gesehen werden können. Das verringert die Anzahl an Objekten und somit die Zeit zum Parsen, zum Rendern und auch den Speicherverbrauch.
Um nicht nichtbare Objekte zu erkenne braucht CUTTER einige Informationen: Ich habe einen simplen Parser eingebaut, der Kamera-deklarationen in Pov-Files einlesen kann und die richtigen Werte ermittelt. Dazu muß einfach der Dateiname des Pov-Files eingegeben werden und CUTTER wird versuchen die Werte zu lesen. Optionen für CUTTER sind: -i Name des INC-Files, das alle Objekte beinhaltet -o Name des Output-INC-Files, die später sichtbaren Objekte -p Name des POV-Files welches die Kamera Deklaration beinhaltet. -e max Abstand Limit (0 kein Limit, 1...~ Wert für Limit) -s min Abstand Limit (0 kein Limit, 1...~ Wert für Limit) Der Kamera Parser ist ziemlich einfach gehalten. Jeder Ausdruck sollte in einer eigenen Zeile stehen, und arithmetische Ausdrücke werden nicht unterstützt. Kommentare durch // werden erkannt, solche mit /*...*/ nicht. Dies zum Beispiel ist ein erkennbare Kameradeklaration:
camera {
// location<100,20,120> // this comment is OK
location<360,3.80,75>
direction <0,0,1>
up <0,1,0>
right <1.3333333,0,0>
look_at <118,20,230>
}
Diese hier nicht:
camera {
location<360-17,3.80+clock*100,75-(clock*100)>
direction <0,0,1+1> /* this comment is not OK */
up <0,1,0>
right <1.3333333,0,0> look_at <118,20,230>
}
GIF2TGA / TGA2GIFGIF2TGA konvertiert GIF Heightfields in TGA Heightfields. Die Verwendung ist:GIF2TGA.EXE infile.gif outfile.tga TGA2GIF konvertiert TGA Hightfields in GIF Heightfields. Die Verwednung ist:
TGA2GIF.EXE -iinfile.tga -ooutfile.gif
-i specifies the input TGA file
-o specifies the output GIF file
HFMERGEMit HFMERGE kann man zwei Heightfields miteinander verschmelzen und oder einige Veränderungen vornehmen. Man kann Heightfields addieren, subtrahieren, in der Höhe verschieben, skalieren, ab einer bestimmten Höhe abschneiden usw.Optionen für HFMERGE:
bei Verwendung der Methode 1..5 muß man sicherstellen, das beide Heightfields die gleichen Dimensionen haben!
Sample ObjectsDiese Objekte wurden extra so entworfen, das sie wenig Speicher verbrauchen. So können sie in großer zahl verwendet werden.
|
- Duisburg Germany |