Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Game Maker Domäne. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

Moolt

fire sister

  • »Moolt« ist der Autor dieses Themas

Beiträge: 563

Game Maker Version: 8.1 Standard

Selbsteinschätzung: GML Fortgeschrittener

Danksagungen: 25

  • Private Nachricht senden

1

Mittwoch, 20. Februar 2008, 22:30

3d für Anfänger



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

1
2
3
4
5
6
7
8
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

1
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:

GML

1
d3d_set_projection(obj_player.x-20,obj_player.y-1,z,obj_player.x,obj_player.y,1,0,0,1);//Die Position der Kamera wird 20 nach hinten gesetzt.


Man kann jetzt noch in das "Mouse wheel up" Event folgenden Code schreiben.

GML

1
z-=8 // Das bedeutet immer wenn man nach oben scrollt, verringert sich die Variable "z" um 8 und die Kamera zoomt näher an das Objekt "obj_player".

Das Ganze kann man noch andersrum ins "Mouse wheel down" Event packen.

GML

1
z+=8


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

1
2
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.

GML

1
d3d_draw_floor(x+200,y+200,0,x-200,y-200,0,tex,6.25,6.25); //So ein Code ist erst sehr verwirrend, aber wer sich in 2D auskennt denkt einfach wieder an unseren Graphen. Wie lassen einen Floor (Dt.: Boden, Im GM eine Fläche) zeichnen. Besser zum verstehen in Bild 4.


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.


[4]

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)

GML

1
2
3
4
5
d3d_transform_set_identity(); 
d3d_transform_add_rotation_z(direction); 
d3d_transform_add_translation(x,y,0);
d3d_draw_block(-5,-4,0,+5,+4,5,tex,1,1);//Zeichnet einen Block 
d3d_transform_set_identity();


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

1
2
3
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
»Moolt« hat folgende Datei angehängt:

Dieser Beitrag wurde bereits 32 mal editiert, zuletzt von »Moolt« (28. Juli 2008, 21:17)


Es haben sich bereits 9 registrierte Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

-$Marvin$-, domis4, HerzBlatt, J@kob, Punish0r, Robinx, Tobi97, waschecht, xYaYx

Tobi

Arthur Schopenhauer

Beiträge: 438

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Fortgeschrittener

Aktuelles Projekt: Mööp

  • Private Nachricht senden

2

Freitag, 22. Februar 2008, 22:02

Also ich finde das Tutorial schon mal ganz gut, aber ich habe trotzdem einen Fehler entdeckt:

GML

1
2
3
4
d3d_transform_set_identity(); //Wenn es mehrere Rotationen im Spiel gibt werden diese vor dem Zeichnen für diese Objekt deaktiviert.  d3d_transform_add_translation(-x,-y,0);  //Legt die Rotationsachse fest 
d3d_transform_add_rotation_z(direction);  //Legt die Rotation Fest. (min 0° max °360). Hier nehmen wir erstmal die direction. d3d_transform_add_translation(x,y,0);   
d3d_draw_block(x-5,y-4,0,x+5,y+4,5,tex,1,1)//Zeichnet einen Block 
d3d_transform_set_identity();
Du hast d3d_transform_add_translation(-x,-y,0); als Kommentar ausversehen hintendran gehängt, anstatt das in die nächste Zeile zu ziehen.
Also muss das so sein:

GML

1
2
3
4
5
d3d_transform_set_identity(); //Wenn es mehrere Rotationen im Spiel gibt werden diese vor dem Zeichnen für diese Objekt deaktiviert. 
d3d_transform_add_translation(-x,-y,0); //Legt die Rotationsachse fest 
d3d_transform_add_rotation_z(direction); //Legt die Rotation Fest. (min 0° max °360). Hier nehmen wir erstmal die direction. d3d_transform_add_translation(x,y,0); 
d3d_draw_block(x-5,y-4,0,x+5,y+4,5,tex,1,1)//Zeichnet einen Block 
d3d_transform_set_identity();

copyboy

Krankhafter Individualist

Beiträge: 2 046

Selbsteinschätzung: GML Experte

  • Private Nachricht senden

3

Samstag, 23. Februar 2008, 11:30

Dann musst du "d3d_transform_add_translation(x,y,0);" auch eine Zeile runter schieben...

F4LL0UT

***Gold***

Beiträge: 2 327

Game Maker Version: 8.1 Standard

Selbsteinschätzung: GML Fortgeschrittener

  • Private Nachricht senden

4

Samstag, 23. Februar 2008, 13:13

Liegt das jetzt nur an mir oder ist die example-exe ein einziger Bug? Bei mir kommen endlos viele Meldungen, die mich zum Abort zwingen.

Moolt

fire sister

  • »Moolt« ist der Autor dieses Themas

Beiträge: 563

Game Maker Version: 8.1 Standard

Selbsteinschätzung: GML Fortgeschrittener

Danksagungen: 25

  • Private Nachricht senden

5

Samstag, 23. Februar 2008, 13:23

Ah tut mit Leid, um genau zu sein ist es nur eine Fehlermeldung die man nicht wegklicken konnte, da ein Script sich auf eine nicht vorhandene Textur "tex2" bezogen hat.
Ich habe es editiert, getestet und erneut hochgeladen, Link wie gehabt im ersten Post zu finden.

F4LL0UT

***Gold***

Beiträge: 2 327

Game Maker Version: 8.1 Standard

Selbsteinschätzung: GML Fortgeschrittener

  • Private Nachricht senden

6

Sonntag, 24. Februar 2008, 01:09

Ansichtssache: Ich sehe eine Fehlermeldung, die sich endlos viel wiederholt schon als "endlos viele Fehlermeldungen an" ;) . Danke jedenfalls, dass Du das Teil korrigiert hast. Ja, als Grundlage sehr ansehnlich. Mal gucken, vielleicht wage ich sogar einige Versuche mit deinem Tut... ich find's zwar seltsam, dass Du keine GMK gepostet hast, aber schließlich soll das Tutorial ja dabei helfen sowas von der Grundlage her seblstständig zu erlernen.

ToWe

Dollar-Note

Beiträge: 310

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Anfänger

Aktuelles Projekt: Blacksmith - Escape to Efral

  • Private Nachricht senden

7

Dienstag, 26. Februar 2008, 16:36

Ah, endlich nen einfaches Tut für 3d.
Werde ich gleich benutzen ;D
( du wirst natürlich erwähnt )
Aber sga mal, wie kann man denn andere Objekte als diese Geometrischen Teile in 3D machen?



mauge

Neujahrs-Contest-Sieger 2009

Beiträge: 2 806

  • Private Nachricht senden

8

Dienstag, 26. Februar 2008, 16:49

Aber sga mal, wie kann man denn andere Objekte als diese Geometrischen Teile in 3D machen?
Am einfachsten ist es, Models mit einem Programm (kostenlos: "Anim8or") zu entwickeln und diese z.B. via "Marzipan" in GML-Code umzuwandeln. Wenn ich richtig informiert bin, gibt es für den "Anim8or" sogar ein Plugin, das es ermöglicht, nach GML zu exportieren.
█████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
█████ ███████ ███ your █████ ████ government.

ToWe

Dollar-Note

Beiträge: 310

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Anfänger

Aktuelles Projekt: Blacksmith - Escape to Efral

  • Private Nachricht senden

9

Dienstag, 26. Februar 2008, 18:42

Danke für die antwort! Hab mir das Programm mal gedownloadet


Soll " Marzipan" ein Programm sein?



Moolt

fire sister

  • »Moolt« ist der Autor dieses Themas

Beiträge: 563

Game Maker Version: 8.1 Standard

Selbsteinschätzung: GML Fortgeschrittener

Danksagungen: 25

  • Private Nachricht senden

10

Dienstag, 26. Februar 2008, 18:52

Jap, ist ein Programm.
Hier kannst du es downloaden.

Tut mir Leid ich hatte den Link vorher nicht überprüft.
*In Moolt's magischer GM Kiste wühl* Ah, das isses' ja. >Link<

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Moolt« (27. Februar 2008, 13:53)


ToWe

Dollar-Note

Beiträge: 310

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Anfänger

Aktuelles Projekt: Blacksmith - Escape to Efral

  • Private Nachricht senden

11

Dienstag, 26. Februar 2008, 18:53

Downloadlink ( nicht deiner ) geht nicht!



Melancor

Immanuel Kant

Beiträge: 419

  • Private Nachricht senden

12

Dienstag, 26. Februar 2008, 19:35

Tolles Tutorial, was ich etwas vermisse sind Links zu weiteren oder weiter führenden Sachen.
Ich kann nur bestätigen, daß die 3D-Funktionen vom Game Maker nicht sehr weit reichen. Also nicht viel weiter, als hier beschrieben.

Man kann aber sehr wohl mit dem Game Maker recht viel in 3D machen, wenn man externe libs zum Beispiel Ultimate3D verwendet.
Die Mühe lohnt sich, wenn man ernsthaft vorhat, z.B. ein 3D-Spiel zu fabrizieren, aber das ist dann halt auch nicht mehr für Anfänger!
Ich zum Beispiel hatte lange Probleme mit Rotationen, weil der Game Maker keine Matritzen unterstützt. Am Ende hatte ich endlich ein Example gefunden, das mithilfe von Quaternion-Mathematik einen simplen Basiswechsel so unglaublich langsam berechnet hat, daß bei 2-3 Instanzen schon nichts mehr ging.
Falls Ihr Euch fragt, was der da labert: Gemeint ist der Wechsel in ein anderes Koordinatensystem. Das ist z.B. wichtig für Fahr- und Flugzeuge.
Diese sachen in GML berechnen zu lassen, ist einfach pervers langsam.

Ich habe übrigens auch Animator - Marzipan - GMLcode probiert. Auch damit war ich nicht sehr glücklich.
Wenn Du schon 3D-Models hast (und mit Animator geht das schnell), dann nimm Ultimate3D. Schau Dir in Ruhe die Examples an. Alternativ kursieren auch Irrlicht für GM und Extreme3D, damit kenne ich mich nicht so aus. Aber U3D funktioniert sehr gut.

[Toby]

Pfund-Münze

Beiträge: 335

Game Maker Version: 6 registriert

Selbsteinschätzung: GML Anfänger

Aktuelles Projekt: Nix xD

  • Private Nachricht senden

13

Mittwoch, 27. Februar 2008, 17:31

Respect Moolt!

Tolles tut^^

werds in mein neues Project einbauen ^^^

Achja mit dem Marzipan kann ich endlich sketch up objecte in Game Maker einfügen :)

ToWe

Dollar-Note

Beiträge: 310

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Anfänger

Aktuelles Projekt: Blacksmith - Escape to Efral

  • Private Nachricht senden

14

Mittwoch, 27. Februar 2008, 19:32

Das geht? Als was muss ichs denn dann speichern? Das .skp geht mit Marzipan nicht!



[Toby]

Pfund-Münze

Beiträge: 335

Game Maker Version: 6 registriert

Selbsteinschätzung: GML Anfänger

Aktuelles Projekt: Nix xD

  • Private Nachricht senden

15

Donnerstag, 28. Februar 2008, 20:41

brauchst pro.

Sonnst geht das nicht.

Dann in SUp als .obj oder anderen sachen Spechern.

In marzipan rein und fürn gm speichern.

Beiträge: 32

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Anfänger

Aktuelles Projekt: BioWar

  • Private Nachricht senden

16

Samstag, 1. März 2008, 22:41

wie kann ich denn obj dateien in gm7 daten umwandeln ich hab nur nen programm der das in gm6 sachen macht

ps. dieses marzipan da kann ich nicht downloaden immer error bei der page
########################################################
########################################################
########################################################
Spiele zu Spielen macht spaß doch sie zu erstellen bring den spaß :D
########################################################
########################################################
########################################################

Niffel

Δp·Δq~h

Beiträge: 1 291

Selbsteinschätzung: GML Fortgeschrittener

Aktuelles Projekt: Studium 2.0

  • Private Nachricht senden

17

Samstag, 1. März 2008, 22:48

Thread auf Wunsch des Autors geschlossen.

//EDIT von Bottleneck: Auf erneuten Wunsch des Autors wieder offen
Hier werden sie geholfen:
[Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
[Wenn das alles nicht mehr hilft] [Dunning-Kruger]


"Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
"Selber denken regt das Gehirn an."
- Niffel f.k.a. Kilik

Moolt

fire sister

  • »Moolt« ist der Autor dieses Themas

Beiträge: 563

Game Maker Version: 8.1 Standard

Selbsteinschätzung: GML Fortgeschrittener

Danksagungen: 25

  • Private Nachricht senden

18

Freitag, 20. Juni 2008, 17:34

Das Tutorial ist wieder geöffnet, hauptsächlich aus dem Grund dass ich noch einige Sachen verbessern und ergänzen wollte.
Fragen die sich auf das Tutorial beziehen können hier gerne gefragt werden, für Off-Topic Angelegenheiten bitte den "Smalltalk" oder "Technische Fragen" zu benutzen.

Moolt

fabse64

***Gold***

Beiträge: 1 102

Game Maker Version: 7 Pro

Selbsteinschätzung: GML Fortgeschrittener

  • Private Nachricht senden

19

Freitag, 20. Juni 2008, 17:38

Schönes Tut! Sicher sehr gut für Anfänger!

Aaaaaber ich hab' einen kleinen Fehler im Code entdeckt:

GML

1
2
3
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
keyboard_check(vk_right)){direction-=4}


Würd ICH so machen: :D

GML

1
2
3
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}


:)
fabse64 -> haiyyu

Wilber

Alibi Poster

Beiträge: 3

Game Maker Version: 7 Lite

Selbsteinschätzung: Drag & Drop Einsteiger

  • Private Nachricht senden

20

Dienstag, 5. August 2008, 09:20

Dumme Frage:

Wo soll ich den Code hin schreiben? Ich weiß dass man das eigentlich kapieren solte was Create Event ist, aber ich habe mich noch nicht sehr lange mit Game Maker befasst.

Wo gibt es denn da ein Fenster wo man das rein schreiben kann?
Am Anfang standen wir vor einem Abgrund...

jetzt sind wir schon einen großen Schritt weiter

Ähnliche Themen