Anfang

1

 

 

Wasserfälle

Zuerst habe ich ein Sprite über das Terrain gelegt. Das sah nicht gut aus. Fällt das Wasser senkrecht in die Tiefe ist diese Methode in Ordnung, aber bei einem Berg des Terrains? Danach habe ich versucht eine Art Wasserrad zu bauen. Die Seiten waren schwarz, damit sie unsichtbar werden können. Außen auf dem Rad war eine animierte Wassertextur aufgespannt. Das klappte überhaupt nicht. Der beste Weg den ich zur Zeit sehe ist, ein anderes Terrain als Wasserfall zu nehmen. Soll der Wasserfall fast senkrecht sein ist ein animiertes Sprite vielleicht die bessere Wahl. Sobald aber ein Wasserzufluß dargestellt werden soll oder das Wasser nicht gerade fließt, kommt man mit einem Sprite nicht weiter. Genausogut wie ein Terrain ist dann ein *.mdl Modell des Wasserfalles. Ein Nachteil vom Terrain ist, das die Texture nur von einer Seite sichtbar ist. In diesem Fall hier macht das nichts. Soll der Player den Wasserfall aber von beiden Seiten sehen können, muß noch eine Kopie des Wasserfalles erstellt werden. Diese bekommt in WED die gleichen Skins, aber die Oberflächennormale des Netzes wird gedreht. Damit erscheint die Textur auf der anderen Seite. Die Kopie wird dann etwas hinter den anderen Wasserfall ins Level gesetzt. Bei einem *.mdl Wasserfallmodell nehme ich einen langen Zylinder den ich erst breit quetsche, oben schmal und zunehmend nach unten breiter werdend. Dann den Zylinder biegen. Auf der Downloadseite habe ich ein Modell liegen. Hier ein Screen dieses Modells.

 

 

Und hier die Erstellung eines schrägen Wassers das ein Terrain hinunterläuft.

 

Zu Beginn wird das Graustufenbild mit dem das Terrain erstellt wurde im Malprogramm geladen und der Standpunkt des Wasserfalles festgelegt. Dann diesen Bildteil vergrößern und ein Stück des Terrains, so groß wie der Wasserfall, ausschneiden. Dieses in eine neue Bilddatei kopieren.

 

 

Ganz links das ausgeschnittene Teil. Jetzt überlegen wie groß die Texture für jede Skin des Wasserfallterrains sein soll. Ich habe das Bildchen so vergrößert das die Höhe 128 Pixel beträgt. Die Bildproportionen werden beibehalten. Das kleine Bild hat eine Größe von 26x36. Das größere 92x128. Speichern als BMP oder PCX Bild.

 

Zur Entstehung der Texturen möchte ich nichts schreiben, das wird dann zuviel. Aber ich habe sie selber erstellt. Weiter geht es mit dem einladen des größeren Bildes in den MED- Editor als Height Map Image.

 

Die Netzauflösung muß nicht so hoch sein. Ich habe hier horizontal 16 Vertices eingegeben. Die verticale Anzahl habe ich dann so eingestellt das der Trianglesize ungefähr gleich groß in beiden Richtungen ist. Das ergibt eine quadratische Struktur, die am besten formbar ist.

 

Leider ist das Terrain ganz flach. Es muß skaliert werden. Aber um wieviel ? Ich habe noch den WED-Editor und mein Terrainlevel geladen und dann durch hin- und herschalten die Profile miteinander verglichen.

 

 

Um im WED- Editor aber überhaupt das Profil des betreffenden Berges sehen zu können muß die Ansichtstiefe geändert werden. Die + (plus) Taste vergrößert und die - (minus) Taste verkleinert den View im Fenster.

 

 

Fehlt noch die Wassertextur. Ich habe 8 Skins mit der gleichen Größe wie das Graustufenbild angefertigt. Dann mit FILE --> IMPORT --> SKIN IMAGE die erste Skin einladen. Um nun die restlichen sieben Skins zu importieren auf EDIT --> ADD NEW SKIN klicken. Im erscheinenden Auswahlfenster die Auswahl auf AFTER LAST SKIN belassen und mit O.K. bestätigen. Jetzt erscheint ein abwärtszeigender Pfeil im Skineditor. Diesen anklicken! Danach kann das nächste Bild geladen werden. Vergißt man diesen Pfeil jedesmal anzuklicken wird die nächste Skin nicht nach, sondern vor die vorhergehende Skin abgelegt !

 

 

Um den Wasserfall animieren zu können bedarf es noch einer Action die die Skins wechselt. Außerdem habe ich noch drei Partikelemitter an den Fuß des Wasserfalles gesetzt um Wasserdampf zu simulieren. Den Code habe ich aus dem Techdemo der Conitecseite genommen.

 

BMAP wdampf     = <burns.pcx>;  //die dampftexture vom techdemo

 

//Wasserfall animieren. Diese action wird dem wasserfallterrain im WED zugeordnet

 

action watfall1 {

       my.transparent = on;  

       my.alpha = 35;

       my.passable = on;

       my.lightrange = 50;

       my.lightred = 0;

       my.lightgreen = 0;

       my.lightblue = 250;

       while (1) {

           my.skin += 0.5*time;

           if(my.skin > 8) {                 //wenn alle 8 skins durchgelaufen sind

               my.skin = 1; }                //wechsel zurück zur ersten skin

      wait (1);

                     }

}

 

//wasserdampf löst sich auf

 

function wasserdampf_update() {

      my.alpha -= 0.1 * time;

      if ( my.alpha <= 1 ) {

           my.lifespan = 0; }

      my.size += 10 * time;

}

 

//Wasserdampf Eigenschaften festlegen

 

function wasserdampf_create() {

      my.bmap  = wdampf;

      my.vel_x = random(4)- 3;

      my.vel_y = random(4)+ 3;

      my.vel_z = random(4)+ 3;

      my.size  = random(5)+ 5;      // größe der partikel in quants

      my.transparent = on;

      my.alpha = 10;

      my.flare = on;

      my.bright  = on;

      my.albedo = 0;

      my.lifespan = 40;

      my.x += random(100);

      my.move  = on;   // move this particle

      my.function  = wasserdampf_update; // particle function

}

 

/* Wasserdampf Position, diese Action wird einem kleinen Bild (8x8 pixel) zugeordnet. das Bild über Eigenschaften invisible (unsichtbar) machen. der Inhalt des Bildes ist egal. Es geht nur darum eine Position für den Wasserdampfemitter zu haben */

 

action wasserdampf() {

     while(1) {

          particle_pos.x = my.x;

          particle_pos.y = my.y;

          particle_pos.z = my.z + 1;

          my_map = wdampf;

          effect(wasserdampf_create,1,particle_pos,nullskill);

          waitt(3);

                    }

}

 

Hier ein Screen des schrägen Wasserlaufs aus einem älteren Level.