3D (modellieren/texturieren, einbinden, UV-Maps, Räume, Menus)

  • GM 7

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

  • 3D (modellieren/texturieren, einbinden, UV-Maps, Räume, Menus)

    Hi

    Ich habe in letzter Zeit viel angefangen und eig. nichts vollendet. Wieder und wieder stosse ich auf gewisse Probleme; nun habe ich mir gedacht, um mein Wissen zu festigen, frage ich mal ein paar Dinge nach.
    Da hätten wir zum einen das erstellen und einbinden von Objekten:

    1. Als erstes erstelle ich mit Anim8tor ein *.obj* file. Dannach lade ich die Daten in Lith Unwrap (UV-Mapper) und speichere die UV-Map in einer *.bmp* ab. Anschliessend überschreibe ich das alte objekt.
    Hierbei kann ich auswählen ob die UV-Map übernommen werden soll (ich wähle ja).

    Dann lade ich das model im Game Maker:

    GML-Quellcode

    1. Create:
    2. test = createFromObj('models\test.obj');
    3. background_replace(tex_test,'textures\tex_test.bmp',0,0,0);
    4. Draw:
    5. background_get_texture(tex_empty);


    Was geschiet nun? Das Model ist zwar mit der Textur überzogen, jedoch nicht vertex für vertex (so wie es in der UV-Map sein sollte), sondern x-beliebig.
    Hier mal zur Veranschaulichung:


    Das ist meine Textur.

    Und so sieht das im Spiel aus:


    Abgesehen davon das die Achsen nicht stimmen - ich glaube der GM verwendet da die Achsen anders als im Anim8tor.

    Kann mir jemand helfen? Ich hab das spiel schon etliche male versucht - es will einfach net so, wie ich will -.-

    2. Dann ist noch das mit dem Boden und dem Himmel ne Sache... Ich verwende eine Heightmap als Boden - die is für sich gross genug. Der Himmel wird wie folgt gedrawt:

    GML-Quellcode

    1. // draw sky
    2. d3d_transform_set_identity();
    3. d3d_transform_add_rotation_x(90);
    4. d3d_transform_add_translation(obj_player.x,obj_player.y,0);
    5. d3d_draw_ellipsoid(-9216,-9216,-9216,9216,9216,9216,background_get_texture(tex_sky),2,1,48)
    6. d3d_transform_set_identity();


    So sieht es im GM aus:
    Bild 1:
    Bild 2:

    Wie würdet Ihr vorgehen? Ich will ja nicht, dass man dieses Gewurstel (siehe Bild 2) sieht. Soll ich unsichtbare Sperren einbauen, sprich man prüft ob x/y grösser oder kleiner als ein Betrag und dann speed = 0?
    Oder den Himmel besser drawn? Oder wie mach ich das am besten?

    3. So, nun zur letzen Frage: Wie gestaltet Ihr Menus? Die Optionen nehme ich an in eine ini oder ein plain-text-file (*.txt).
    Aber das Menu für sich... wie macht ihr alle diese Buttons und die Fenster? Alles drawen (so hab ich das einmal versucht) oder mit show_message arbeiten? Oder erstellt ihr jeweils pro Fenster die Knöpfe und Schiebregler sowie Checkboxen usw. per instance_create?
    Bei vielen sieht das so einfach aus... aber wie prüft Ihr z.B. beim Klick auf den Button welche Aktion folgen soll, wenn man mehrere Buttons hat? Parameter und dann mit switch(param) case 1... tue dies case 2... tue das?

    Wie ihr seht habe ich doch noch einige Fragen diesbezüglich. Ich wäre sehr dankbar für eure Hilfe.

    Gruss,

    Xtreme
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • Moin,

    zu 1 und 2 kann ich dir nicht wirklich viel sagen, nur soviel, wenn es ein 3D Shooter (FPS) werden soll, würde auf ein anderes Programm setzen.
    Ich erstelle Shooter mit dem FPS Creator X9 bzw. X10. Der Game Maker ist für FPS einfach zu umständlich (meine Meinung!).

    Zu 3, im Tutorialbereich habe ich 3 verschiedene Versionen von Menüs gefunden, sowohl mit, als auch ohne INI.
    Am besten testest du die mal aus und das was dir am einfahsten oder am besten geeignet erscheint passt du dann an dein Projekt an.
    So mache ich es zumindest ;)

    cu
    Cheffe
    :thumbup:
  • Danke für deine Antwort.

    Zu 3: Stimmt; Ich Depp - hab vergessen das im Tutorialbereich zu suchen bzw. ein oder zwei davon habe ich bereits gekannt (mit objekten z.B.) .

    Zu 1: Ich hab mir mal noch einen anderen UV-Mapper geladen. Der macht "bessere" Maps im Sinne vom Aussehen - es geht nun auch diese auf die Objekte zu drawen. Nur bei gewissen Objekten wie z.B. einen Quadratischen Raum mit einer Tür der innen hohl ist hat er z.B. mühe.

    Apropos hohle Objekte ... wie mache ich das wo die Wände sind Kollisionen stattfinden und wo es leer ist dass ich dort durchgehen kann?

    Zu 2: Das bleibt noch offen.


    Gruss,
    Xtreme
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • Das "gewurstel" das du auf bild 2 Siehst ist die "spitze" oder entsprechend andere Seite der Kugel. Der GM macht es sich ziemlich einfach was die Texturierung von "Kugeln" (in Wirklichkeit sind das ja keine Kugeln) angeht. Zum Verständniss schnapp dir mal einen Tennisball und versuchst ein Taschentuch komplett darum zu wickeln. Mathematisch ist es nicht einfach, sauber eine quadratische Fläche auf eine Kugel zu mappen. Verwende deinen Code einfach mal ohne die Drehung nach rechts:

    GML-Quellcode

    1. d3d_draw_ellipsoid(-9216,-9216,-9216,9216,9216,9216,background_get_texture(tex_sky),2,1,48)

    .. dann schaut man auf den "Aussenrand" der Kugel. Um Die Textur effektiver zu nutzen kannst du auch die Vertikale wiederholung auf 2 stellen, dann kannst du z.b. Einen Hoizont einbauen. Die hälfte der Textur kann man ja eh nicht sehen, weil der Boden mitten in der Kugel steckt.
    Wenn du nicht verstehst was ich meine kann ich Dir noch ein Beispielbild machen, ich bin aber grad in der Agentur und hab keinen GM.

    zu 1.) Deine UV map sieht sehr unvorteilhaft genutzt aus. In den meisten Programmen kann man die Position der UV(W) koordinaten bestimmen und nachträglich verändern. So kannst du die Polygone effektiver anordnen. So kann z.B. das Blattwerk deines Baumes (nehme ich mal an) ja oben und Unten das selbe sein. In diesem Fall können sogar die UV-Flächen übereinander angeordnet werden. Und auch der Stamm kann die Textur optimaler nutzen.
    Als beispiel sieh dir mal diese Textur an: KlickerDieKlack Die Fläche des Bildes ist
    optimaler genutzt, so das nicht so viel freiraum entsteht der Ungenutzt im Grafikspeicher liegt. Weiterhin sieht man nur einen Arm und ein Bein, weil diese einfach zwei mal genutzt werden.

    Viele Programme bieten verschiende Möglichkeiten des "Auffaltens" einer Textur, vielleicht probierst du noch ein bischen herum ob sich nicht eine adere Funktion besser eigent.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Danke WIN für deine Antwort.

    Ehm also das mit dem Himmel will net so recht, ich denke aber ich habe verstanden wie du es gemeint hast - du meinst man sieht nur den einen Teil der Hemispähre. Ich hab mal bisschen rumgespielt mit den Parametern - leider bringt es nix, wenn ich das Rotieren rausnehme.
    Dann habe ich einfach am Zenit und unten die "Spitze" - das is auch nicht besser.

    Zum Mappen: Ich hab den UV-Mapper (Holzfigur als Logo) und den LithUnwrap. Kannst du mir ein bisschen mehr noch zu den UV-Maps verraten? Wie machst du z.B. das du Farbige Textur also wie bei dem Beispiel (z.B. Hosen) nehmen kannst?

    Ich nehme eig. immer den UV-Mapper nachdem ich das obj fertig habe. Dann mache ich "load model" dannach "new uv-map" dann z.B. box oder planar...
    Dann krieg ich so eine weisse Textur mit schwarzem Rahmen. Die speicher ich dann als bitmap - dannach "model save". Aber wie kann man das noch so auffalten, verschieben, texturen in dieses bmp einfügen? Kann man eig. auch ein material auf einer uv-map-abbildung rendern?

    Und was meinst du mit UV-Koordinaten?

    Gruss,
    Xtreme
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • Also. Ein Model besteht aus Polygonen (vielecken), deren eckpunkte bestimmt Koordinaten im Raum sind (x,y,z). Aus diesen Setzt sich das Model nach und anch zusammen. UV koordinaten (manchmal auch UVW) sind wiederum Polygone die die Position der Textur (einem einfachen Bild) auf dem Model bestimmen. Diese beiden Koordinaten sind voneinander völlig unabhängig.
    In den meisten 3d Porgrammen kann man die Position jeder einzelnen UV Koordiate selbst bestimmen. Das macht man mit den Unwrap-Funktionen des Programms.
    Wenn du "planar" zum auffalten des Models wählst, werden die Polygone der Reihe nach von den Achsen aus auf die Textur "gemappt". Die Aufteilung ist aber nicht optimal. Danach zieht und zupft man die UV koordinaten zurecht, bis man die Textur optimal ausgenutzt hat. Das automatische "auffalten" ist also nur der Anfang.
    Zur verdeutlichung sieh dir mal dieses Bild an: klicklerdiklack
    Es zeigt ein Polygon aus drei punkten im Raum (rechts) und den UV mapper mit den UV koordinaten (links).
    Übrigens UVW heisst es weil XYZ schon weg ist. U steht also für X, V für Y und W wäre die höhe des Punktes über der Textur. Das kann man für bestimmte Effekte und Funktionen nutzen, die der GM aber ausnahmslos nicht unterstützt (Highmapping, Bumpmapping, Animierte Einzeltexturen, etc.).

    Zur Texturierung: Das BMP das dir das 3d Programm zum schluss gibt ist ein einfaches Bild. Das kannst du mit einem Bildbearbeitungs-Programm aufmachen und einfach darauf malen. Dann fügst du model und die neue Textur wieder zusammen (z.b. im GM) und fertig ist dein texturiertes Model. In machen 3d Programmen kannst du auch direkt auf das Model malen und dies als Textur ausgeben (Achtung: es gibt noch eine Funktion mit der man auch direkt auf das Model mahlen kann - nennt sich Vertex-Paint - aber diese Farbinformationen werden im Model und nicht als Textur gespeichert. Diese Funktion unterstützt der GM leider nicht).

    Zur SkyBox: Der Himmel nennt sich In 3d Games meistens SkyBox (selbst wenn er rund ist). Hier der Code für eine SkyBox aus einem meiner Spiele (in diesem Fall auch gedreht, weil ich die Textur nicht drehen wollte):

    GML-Quellcode

    1. d3d_set_lighting(false);
    2. d3d_set_culling(false)
    3. draw_set_alpha(1);
    4. draw_set_color(c_white);
    5. d3d_transform_set_identity();
    6. d3d_transform_add_translation(-obj_Camera.x,-obj_Camera.y,0);
    7. d3d_transform_add_rotation_z(90);
    8. d3d_transform_add_translation(obj_Camera.x,obj_Camera.y,0);
    9. draw_set_color(global.daylight);
    10. d3d_set_fog(false,global.fog_col,global.fog_min,global.fog_max)
    11. d3d_draw_ellipsoid(obj_Camera.x-2000,obj_Camera.y-2000,-600, obj_Camera.x+2000,obj_Camera.y+2000,550, background_get_texture(back_TextureClouds1),4,2,32);
    12. d3d_set_fog(true,global.fog_col,global.fog_min,global.fog_max)
    13. d3d_transform_set_identity();
    14. d3d_set_lighting(true);
    15. d3d_set_culling(true)
    Alles anzeigen

    Darin sind natürlich ein paar variablen die in deinem Spiel nicht vorkaommen und die Skybox richtet sich automatisch an der Camera aus. Das musst du ggf noch anpassen. Die Textur sowie einen Ingame Screenshot habe ich angehängt. Wenn du dir den Code ansiehst, wird du fesstellen das die Box tatsächlich eine ovale Form hat und leicht versetzt ist.
    Auch in dieser Skybox wirst du an der "Spitze" der Kugel sehen das die Textur zusammengeführt wird. Das ist ist mit dem elipsoid vom GM unumgänglich. Wenn das nicht für dein Spiel ausreicht musst du selber eine Skybox modeln, texturieren und statt dem Elipsoid (und der rotation, denn dann kannst du die box ja gleich passend machen) verwenden.

    Ich hoffe ich konnte dir helfen. Wenn nicht, einfach wieder melden.

    EDIT: Das hier ist ein sehr gutet Tut zu dem Thema...
    Bilder
    • SkyBox.jpg

      4,84 kB, 128×256, 197 mal angesehen
    • screenshot100.jpg

      93,32 kB, 800×600, 238 mal angesehen
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • So, sry das ich so spät bin mit der Antwort (Arbeitsstress)

    Erstmal vielen Dank für deine Hilfe!

    Zum Tut: Ich würde mich schämen hätte ich diese nicht schon angeschaut :)
    Das mit der skybox hat leider noch net gefunzt... aber ich werd einfach mal ein bisschen damit herumexperimentieren.

    Zum Texturieren - dazu gibts nicht zufällig ein Tut? (ich hab keines gefunden hier)
    Ich hab mal versucht mir den gleichen Editor wie du hast zu installieren - geht leider net zum starten mit Win7 (Computer Usage 100%) ^^ das is alles was geschiet.

    Hab mal ne einfaches Polygon erstellt und versucht das zu texturieren - es geht mit "planar" schon die uv-map zu verschieben usw. - aber das Problem ist halt nachher das texturieren der uv-map als bmp.
    So wie ich das vestanden habe sind diese UVW einfach ausschnitte aus dieser bmp. Nur wär es jetzt sehr mühsam für alle diese einzelnen Faces die oberfläche mit Textur zu überziehen... kann man das denn nicht direkt über einen Editor erledigen (sowas wie du hast)
    Weil dann sieht man auch gleich wo man die UVW-Koordinaten setzt. Dann kann man die Textur auch grosszügiger nutzen sprich: Wie bei Molt's Tut mit dem Baum und der Textur - dort is das ja net nach so einer uv-map abbildung (siehe meine Textur weiter oben) texturiert worden.

    Kann man eigentlich auch materials zeichnen auf so eine Textur?


    Gruss,
    Xtreme
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • xx-XtremeX-xx schrieb:

    Ich hab mal versucht mir den gleichen Editor wie du hast zu installieren - geht leider net zum starten mit Win7 (Computer Usage 100%) ^^ das is alles was geschiet.


    Smart Poly läuft leider nur auf XP. Zudem produziert es auf manchen Rechnern einen BlueScreen, wobei ich die Vermutung habe, das es sich um einen Fehler vom GM 6.0 handelt, da es ein sehr untypischer Bug ist, der auf Maschienen-Ebene hervorgerufen wird.
    Hier im Forum gibt es genügend Hinweise für andere (bessere) und Bedienerfreundliche 3dTools. Ich persönlich würde für3d Projekte 3d MAX empfehlen. Das ist zwar unsagbar teuer, aber das gab es auch mal als game development version für umsonst. "Game Max" oder so schimpfte sich das.
    Ich werde mich vielleicht an einem Tut. versuchen, aber das könnte noch ein bischen dauern.

    Sorry, wenn der Beitrag etwas komisch ist, die Ak(k)us von meinem KeyBoard sind allle :(
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x