3d für Anfänger

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Du machst ein neues Create-Event (), gehst bei den Drag&Drop-Icons zur Registerkarte "control", nimmst dir da dieses Symbol: , und legst es in dem weißen kasten links daneben ab, und dann kannst du Moolt's Code dort einfügen.
      @Prustel: Ich bin auch C :sauf:
      Oha, die Danksagungen häufen sich... <(o.O)> <(^.^)>
      PM me.
    • Ja, mit der unregistrierten Version des Gamemaker's kann man die 3d-Funktionen, so wie viele andere Funktionen nicht nutzen.
      Am besten du testest die unregistrierte Version noch ein wenig, und überlegst dir dann, die Vollversion zu kaufen.
      Dies jedoch nur wegen der 3d-Funktionen zu machen ist nicht empfehlenswert, es sei denn man investiert viel Zeit darin.
    • Natürlich, 3D Funktionen sind nur mit Pro möglich (Was du allerdings auch leicht selber hättest
      herausfinden können, indem du ein par Posts weiter oben geschaut hättest).
      ___________________________________________________________
      Beware of wild pointers
      ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
    • Ist zwar schon was älter hier, aber ich hab mir jetzt erst 3D angeguckt.
      Aber irgendwie gibt es direkt wieder Probleme.
      Ich hab eigt alle Codes "genau" übernommen, auch die aus deinem Example ausprobiert, aber immer gibts Probleme.
      Bei deinem Example klappt's perfekt, man sieht den "Block" auch in richtiger Größe, bei mir ist der Block winzig und manchmal garnicht zu sehen.
      Was hab ich da den jetzt falsch gemacht?

      Edit: Kann den keiner helfen?:s
      Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Prustel ()

    • Prustel schrieb:

      Sorry für den Doppelpost, aber findet keiner das Problem in meiner Datei?:s

      Doch, ich... Moolt, was codest du denn für Stuss zusammen? :D
      Ich hab die gmk von Prustel mal mit deinem Tutorial verglichen und konnte keinen Unterschied feststellen. Dafür ist mir jede Menge aufgefallen, was meines Wissens gar keinen Sinn macht. Speziell das Draw Event des Blocks hat mich total verwirrt. Ich hab das in die Form gebracht, wie ich persönlich es machen würde.

      Hier das Draw Event des Blocks:

      GML-Quellcode

      1. d3d_transform_set_identity();
      2. d3d_transform_add_rotation_z(direction);
      3. d3d_transform_add_translation(x,y,0);
      4. d3d_draw_block(-5,-5,0,+5,+5,5,background_get_texture(tex1),1,1);
      5. d3d_transform_set_identity();

      Hier das Draw Event der Kamera (nur minimal modifizert - wär vermutlich sogar unnötig):

      GML-Quellcode

      1. d3d_set_projection(block.x,block.y+20,z,block.x,block.y,1,0,0,1);
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.
    • Auf dich ist verlass mauge :thumbsup:
      Ich hätte da noch eine Frage, weil irgendwie klappt das bei mir nicht mit der Perspektive umstellen, also die Sicht.
      Vielleicht habe ich das auch Falsch verstanden.
      Wie macht man die Camera Sicht, dass es so aussieht, wie auf dem Bild:
    • Dazu könntest du die Zeile im Draw Event der Kamera ändern:

      GML-Quellcode

      1. d3d_set_projection(block.x, block.y+z ,z,block.x,block.y,1,0,0,1);

      Die frei gestellte Stelle "block.y+z" bewirkt ganz einfach, dass die Höhe gleichzeitig der Entfernung entlang der y-Achse entspricht. Ich hoffe, das war es, was du meintest. Ansonsten einfach mal rumprobieren. ;)
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.
    • @Moolt: Kannst ja mal bei Gelegenheit dieses Tutorial hier ausbessern. Sehr gut präsentiert ist es allemal. :thumbup:
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.
    • Ich wäre dir echt dankbar für ein Collision Tutorial :s
      Wie wäre den eine Collision wie bei diesem Video?
      youtube.com/watch?v=f5THST-keQo
      Das ist ein Video von einem Spiel von jemanden aus der Gmc.
      Aber wenn ich versuche eine Collision zu erstellen(egal wie) bleibt der Spieler immer hängen.
    • Ein Tutorial über Kollision und Kamera-Einstellungen hatte ich berreits im Hinterkopf. Jedoch lassen diese sicher ein paar Monate auf sich warten. Dies hat mehrere Gründe: Ich habe momentan wenig Zeit, diese Themen sind recht umfangreich und ich werde wahrscheinlich demnächst eine andere Reihe von Tutorials (über ein anderes Thema) hier veröffentlichen.
    • Die Kollision in dem "Trailer" ist nicht sonderlich komplex, da er keine mehreren Ebenen benutzt.
      Wenn beim Springen jetzt noch Plattformen oben drüber wären, wär es etwas komplizierter.

      So wie er es jetzt macht, schaut er nur, ob ein Objekt unter ihm ist, und wenn ja, schaut er, welche Höhe das Objekt hat und setzt die Höhe vom Spieler gleich der Höhe des Objekts, sobald der Spieler unten drunter ist. (ähnlich wie bei normalen Plattformspielen auch.)

      Eigentlich musst du bei Kollisionen nur ne Maske benutzen und diese in die Höhe ziehen. Der Nachteil dabei ist es, dass du keine gedrehten Hitboxes machen kannst. Dafür müsstest du rechnen.

      Ne Möglichkeit für ne Kollision z.B. wäre das normale Kollisionevent und dann ne if-Abfrage.

      Collision-Event:

      GML-Quellcode

      1. if(z+height>other.z)&&(z<other.z+other.height)
      2. {kollison;}


      Für die vertikale Kollision (im falle des 3D dann die Z-Achse) macht man es dann z.B. so:

      Collision-Event:

      GML-Quellcode

      1. if(z<=other.z+other.height)
      2. {z-speed=0; z-grav=0;}


      Wichtig wäre es, wenn du Plattformen benutzen willst, ein Script zu schreiben, welches den höchsten Boden unter dir findet.

      Ich hab das in meiner Beispielengine so geregelt:

      GML-Quellcode

      1. //This script gets the closest floor level, on which it's possible to stand.
      2. //The value this script returns, is the highest possible ground level below the object.
      3. var mxground;
      4. mxground=boden[0];
      5. for(i=1;i<=7;i+=1)
      6. {
      7. if(boden[i])
      8. {
      9. with(boden[i])
      10. {
      11. if(place_meeting(x,y,obj_player))
      12. {
      13. if(z+height<=obj_player.z)&&(z+height>mxground)
      14. {
      15. mxground=z+height;
      16. }
      17. }
      18. }
      19. }
      20. }
      21. return(mxground);
      Alles anzeigen


      Vorrausgesetzt ist, dass im Array "boden" alle Objekte aufgelistet sind (auch als Parent möglich), auf denen das ausführende Objekt stehen kann.
      boden[0] ist der Wert im Objekt, welcher den 0 Punkt festlegt. also der unterste Boden...


      Sicherlich nicht die optimalste Lösung, aber ich bin damit klar gekommen und es ist bei nicht ÜBERDIMENSIONALEN Levels auch von der Leistung nicht der hit.
      Man könnte z.B. auch noch ne Begrenzung benutzen, wie weit die Objekte weg sein sollen, keine Ahnung obs dann besser läuft.


      PS: Ich hoffe ich konnt dir einen ungefähren eindruck verschaffen, wie Kollisionen im grunde funktionieren. Alles was weiterführend ist, is etwas komplizierter, dafür musst du die x,y,z-Koordinaten berechnen, bei welchen eine Kollision stattfindet.

      PPS: Ich entschuldige mich fürs Einrücken... das Forum wills nich so wie ich...
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Schattenphoenix ()

    • Da ich nun endlich Ferien habe, habe ich mir die Zeit genommen um das Tutorial aufzuräumen und auszubessern.
      Was sich getan hat:
      • Probleme werden vorteilhafter gelöst, besonders in Hinsicht der Texturen
      • Übersichtlichkeit erhöht, durch sinvolle Benennung der Ressourcen
      • Rotation wird nun einfacher und effizienter eingesetzt
      • Texturen wurden teilweise ersetzt
      • Einige Rechtschreibfehler wurden entfernt
      • Example wurde erneuert
      und sicher noch einiges mehr, was mir gerade nicht einfällt.

      -Moolt