
Da in diesem Forum wenig über 3d zu finden ist, möchte ich besonders den Anfängern erstmal erklären was 3d ist, wie es funktioniert und wie man es benutzt. Außerdem werde ich zeigen, wie man ein einfaches Top-Down "Spiel" macht, es kann am Schluss dann (z.B) so aussehen.
1. Z- Achse
Wer sich etwas mit dem Gamemaker beschäftigt, (oder es aus dem Mathe Unterricht kennt) kennt sicher einen normalen Graphen.
Er setzt sich zusammen aus X und Y Achse (1). Wenn wir jedoch den 3d-Modus aktivieren, kommt eine neue Achse dazu, die Z Achse. (2, Hellblau)
[1]
[2]

Die Z-Achse verleiht Objekten eine Höhe, sonst wären sie flach. Der Punkt wo sich alle Achsen treffen nennt man Origin. (Dt. Ursprung)
2. Den 3d Modus Aktivieren
Lasst uns doch ein kleines Beispiel für die Benutzung von 3D machen.
Dafür müssen wir den 3d Modus erstmal aktivieren, wir erstellen also ein Objekt "obj_camera" und schreiben folgendes ins Create Event:
GML-Quellcode
- d3d_start(); //Aktiviert den 3d Modus
- d3d_set_perspective(true); //Lässt uns die Kamera-Perspektive verstellen, dazu später.
- d3d_set_lighting(false);//Deaktiviert die Benutzung von Lichtern, vorerst brauchen wir keine.
- d3d_set_fog(true,c_black,1,1024);//Aktiviert die Benutzung von Nebel, der Nebel startet bei 1, und endet bei 1024.
- d3d_set_shading(false); //Aktiviert die Benutzung von Schatteneffekten, zum besseren Verständnis Bild 3 angucken.
- d3d_set_culling(false); //Diese Funktion ist erstmal nicht wichtig, Anfänger sollten diese jedoch auf false haben um Probleme zu vermeiden.
- z=200; //Wir erstellen noch eine Variable "Z", diese wird nacher wichtig.
- draw_set_color(c_white);

[3]
Damit wäre der 3d Modus schonmal aktiviert.
Dann wagen wir uns mal an die Kamera-Perspektive (Draw Event).
Wir machen vorerst eine Topdown-Sicht die einem Objekt folgt. (Das Objekt nennen wir "obj_player", der Code kommt aber noch in das "obj_camera" Objekt)
GML-Quellcode
- d3d_set_projection(obj_player.x-1,obj_player.y-1,z,obj_player.x,obj_player.y,1,0,0,1); //Die Kamera guckt von der Position des Objekts "obj_player" auf die Position des Objekts "obj_block" also auf zweimal die gleiche Position, deswegen Topdown. Die Variable "z" gibt die Höhe an, von der gesehen wird.
Wenn man eine 3rd-Person Sicht haben möchte könnte es so aussehen:
Man kann jetzt noch in das "Mouse wheel up" Event folgenden Code schreiben.
Das Ganze kann man noch andersrum ins "Mouse wheel down" Event packen.
3. Das Zeichnen
Das was wir bis jetzt gemacht haben waren nur Einstellungen um dem Gamemaker zu sagen wie wir was aus welches Perspektive (usw.) sehen wollen.
Jetzt zeichnen wir ein Paar 3-dimensionale Objekte, wir erstellen dafür ein Objekt "obj_floor" und gehen vorerst ins Create Event.
GML-Quellcode
- repeat 20 instance_create(random(250),random(250),obj_block); //Erstellt 20 mal in einem Zufalls Bereich von 250 Pixeln das "obj_block"
- tex = background_get_texture(tex_floor); //Wollen wir einen background als textur verwenden, müssen wir diesen Befehl benutzen. In diesem Fall speicher ich die Textur in einer Variable, damit sie nicht jeden Step neugeladen werden muss.
Weiter geht's im Draw Event.
Wir sehen hier ein (gekrikeltes) Koordinatenkreuz wie es jeder von uns kennt. Gucken wir uns den Code und den Graph parallel an, dann sehen wir, dass
Punkt 1 meiner Krikelei den Koordinaten x-200,y-200 entspricht und Punkt 2 den Koordinaten x+200,y+200.
das x/y vor den Zahlen legt praktisch den 0-Punkt fest, von dem gezeichnet werden soll, normalerweise ist dieser 0, jetzt ist er die Position unseres "obj_camera" Objektes. Zu den Letzten 3 Variablen des Codes: "tex" ist die Textur, mit der die Fläche überspannt werden soll, wir benutzen die im Create Event deklarierte Variable.



Damit wären wir mit unserer Kamera fertig.
Wir nehmen jetzt das vorher erstellte Objekt "obj_player" zur Hand.
Dieses wird unser Spieler Objekt. Lassen wir es zuerst mal zeichnen. (Draw-Event)
Da Rotationen nicht ganz einfach zu verstehen sind, gibts es hierzu ein extra Tutorial .
Damit haben wir einen Block der sich in die Richtung der direction des Objekts dreht, noch ist er aber unbeweglich.
Ändern wir dies im Step-Event.
GML-Quellcode
- if (keyboard_check(vk_up)){speed=2}else{speed=0}; //Wenn die Pfeiltaste nach oben gedrückt wird, ist die Geschwindigkeit=2 sonst ist sie =0.
- if (keyboard_check(vk_left)){direction+=4}; //Die direction ist die Richtung in die unser Objekt guckt, es beweget sich ebenfalls in die Richtung der Variable direction
- if (keyboard_check(vk_right)){direction-=4};
Wenn wir jetzt die Objekte in den Room Editor einfügen und das "Spiel" starten, sollten wir einen beweglichen Block in einer 3d-Welt haben.
3. Abschließende Worte:
Ich hoffe ich konnte euch etwas über die leichten Funktionen von 3D im GM beibringen, bei Fehlern oder Ungeschicktheiten meldet euch bitte direkt, denn ich mach auch viele Fehler.
Wenn ihr das ganze noch etwas ausschmückt, und z.B ein Block Objekt mit zufälliger Höhe erstellt so wie ich hier, könnte es z.B so aussehen:

Andere Tutorials von mir:
3d - Effekte
3d - Outlines
3d - Modelle
3d - Beleuchtung
3d - Transformationen
3d - Kollisionen
3d - Partikel
Farben:
- Fachbegriffe oder Wichtiges
- Variablen
- Events
- Objekte
Im Anhang findet ihr die *.gm6 zum Ausprobieren.
Mfg Moolt.

Zuletzt aktualisiert am: 24.06.09
Dieser Beitrag wurde bereits 32 mal editiert, zuletzt von Moolt ()