Main Menu

Texturen und .3ds Objekte

Started by Marlon, October 29, 2011, 12:50:23 PM

Previous topic - Next topic

Marlon

Hallo!
Ich beschäftige mich seit heute wieder mit JPCT und möchte mein 2D Spiel nun auch für eine 3D Umgebung realisieren.
Um den Einstieg etwas zu erleichtern benutze ich als Vorlage das AdvancedExample.java und es klappt soweit alles ganz gut.
Ein Boden, ein Charakter, ein paar Lichter und eine Kamera, die mit dem Charakter bewegt wird sind schon integriert.
Das erste Problem auf das ich stosse ist das Unverständnis, wie ich dem .3ds Objekt nun eine Textur zuweise.
Dem im AdvancedExample vorhandenen .md2 Objekt (snork) wird ja mit setTexture() ganz simpel eine Textur zugewiesen, allerdings lässt sich das auf
das .3ds Objekt nicht so einfach anwenden. Nun habe ich im Forum gelesen, dass die Texturen automatisch geladen werden (anhand des Texturenamens im .3ds File). Was ist aber, wenn ich im Programm ein und das selbe Model mehrmals verwenden möchte, jedoch unterschiedliche Texturen zuweisen will?
Gibt es einen (einfachen) Weg, dies zu ermöglichen?
Danke für jegliche Hilfe im Vorraus!!!
Marlon
www.forgottenelements.com
Free Action JAVA MMORPG

EgonOlsen

Die Texturen werden nicht automatisch geladen, sie werden nur automatisch zugewiesen. D.h. wenn im 3DS eine Textur den Namen "Wand" hat, dann wird im TextureManager geguckt, ob dort auch mit diesem Namen existiert und die genommen. Wenn es keine gibt, wird ein Dummy dafür angelegt. Wenn die dasselbe Model mit verschiedenen Texturen haben willst, musst du entweder mit einer großen Textur arbeiten, die alles enthält oder das Objekt so in Einzelobjekte teilen, dass der Loader die mit zu wechselnder Texture einzeln lädt oder den PolygonManager benutzen. Der hat Methoden zum Holen und Setzen von Texturen auf einzelnen Polygonen.

Marlon

Oh ok, danke für deine Antwort! :)
Das klingt natürlich alles etwas komplizierter und der Fakt, dass ich ein Model in den selteneren Fällen öfter als einmal verwende lässt mich mit dem Gedanken spielen, dieses Model dann einfach mehrmals zur Verfügung zu stellen - und dann mit unterschiedlichen Texturen.
Für mein 2D Spiel habe ich alle Nicht-Menu-Grafiken in Blender erstellt, würde also Low-Poly-Models daraus machen und diese für die neue 3D-Version zur Verfügung stellen. Zu welchem Format würdest du mir denn persönlich raten (3ds, obj, md2 oder doch was anderes)?
www.forgottenelements.com
Free Action JAVA MMORPG

EgonOlsen

Kommt darauf an...für statische Modelle bevorzuge ich OBJ und für Keyframe-Animationen würde ich, wenn möglich, MD2 nehmen. 3DS finde ich immer etwas hakelig, weil jeder Exporter daraus was eigenes, komisches macht...

Marlon

Alles klar, ich wollte mich auch fürs erste so gut es geht am AdvancedExample orientieren, und demenstprechend für Animationen MD2 Objekte verwenden. Leider unterstützt Blender keinen MD2 Export, allerdings lässt sich das bestimmt durch die Integration eines Scripts lösen.
Ich habe jetzt auch hinbekommen, dass ich dem 3ds Model eine Textur zuweise, es hat auch vorher mit deiner Beispieldatei "disco" geklappt, bloss war bei meinem Model nur Schwarz zu sehen, so dass ich dachte, es würde nicht funktionieren.
Mit setTexture() kann man also doch ganz einfach eine Textur dem 3ds Model zuweisen, ist ja gar nicht kompliziert;)
www.forgottenelements.com
Free Action JAVA MMORPG

Marlon

So... ich habe mich nun mal an das mp2 Format rangewagt.
Für den Md2 Export bei Blender soll ja eine md2.txt Datei angegeben werden, die beschreibt, wie viele Frames exportiert werden sollen.
Ist es nun üblich alle an das Objekt gebundenen Animationen in diese Datei aufzunehmen?
Ich habe für eine Laufanimation also "walk" 100 angegeben, da in meiner Blender3D Datei die Laufanimation genau 100 Frames (die ersten 100 Frames) umfasst.
Die Output Datei ist dann für diese eine Animation 500 KB gross.
Mache ich das ganze über das 3ds Format, so spare ich viel mehr Platz.
Hat jemand eine Idee wie so eine md2.txt im Idealfall auszusehen hat, bzw. kann mir jemand Tipps geben, die mir weiterhelfen könnten?
Wie geht ihr in einem solchen Falle vor?
Danke im Vorraus!
www.forgottenelements.com
Free Action JAVA MMORPG

EgonOlsen

Von Blender und dieser Datei habe ich jetzt explizit keine Ahnung...aber Dateien, die Keyframe-Animation enthalten können schon größer werden. 500KB ist da nicht ungewöhnlich viel. Generell sollte die Animation halt soviele Stufen aufweisen, dass sie vernünftig aussieht. jPCT interpoliert ja zwischen den Stufen. Wenn die Unterschiede zu groß sind, kann diese Interpolation komische Ergebnisse liefern, aber 100 Stufen für eine Walk-Animation erscheinen jetzt erstmal zu viel des Guten...

Marlon

Ah, alles klar, danke!
Bei der Walk Animation im 3ds Format hatte ich lediglich 4 Stufen benutzt und es sah gut aus, wenn JPCT auch beim MD2 Format interpoliert werde ich das für das MD2 Format ähnlich halten und die 100 Schritte auf 4 (bzw. 5) reduzieren. Wie ist das denn dann mit der Geschwindigkeit der Animation, wird die lediglich über die Ticks (siehe AdvancedExample) festgelegt?
www.forgottenelements.com
Free Action JAVA MMORPG

EgonOlsen

Die Geschwindigkeit hängt an der Veränderung des Indexes beim animate()-Aufruf. Das Beispiel macht das mit den Ticks, das muss man aber nicht so machen.

Marlon

...und diese Geschwindigkeit lässt sich ja dann für jede Animation individuell festlegen.
Ich habe es hinbekommen und bin echt sehr zufrieden mit dem Ergebnis!
Danke für die Hilfe!
www.forgottenelements.com
Free Action JAVA MMORPG