www.jpct.net

General => German corner => Topic started by: Elrohir on March 03, 2009, 06:09:27 pm

Title: md2-files and several texture-selections
Post by: Elrohir on March 03, 2009, 06:09:27 pm
Guten Abend

Mal wieder beschäftigt mich ein kleines Problem, was die Animationen betrifft. Undzwar geht, es wie die Überschrift schon sagt, darum, wie es wohl möglich wäre, das animierte objekt, auch wieder entsprechend zu texturieren, wenn es mehrere Selektionen und somit unterschiedliche texturen für die selektionen hat?
Denn bei allen beispielen die ich fand, habe ich immer nur den einzelnen .setTexture() befehl auf das komplette objekt gesehn, aber das nutzt in diesem falle ja wohl nichts... Leider habe ich bissher immer die 3ds dateien bereits in cinema4d texturiert und somit keinerlei Erfahrung im nachträglichen texturen im quellcode :o

MfG
Elrohir
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 03, 2009, 08:13:03 pm
Du kannst von jedem Object3D den PolygonManager bekommen (Object3D.getPolygonManager()). Der hat Methoden, die Texturen einzelner Polygone nachträglich zu verändern. Dazu muss man aber die "ID", d.h. den Index des Polygons im Modell kennen oder raten. Das kann je nach Fall etwas komplizierter werden, aber anders geht es leider nicht...
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 03, 2009, 10:38:10 pm
hm, also bekommt man das index des polygons, nicht der selektion? o.o
ich mein, muss doch einfacher gehn als für mehrere tausend polys einzeln rauszufinden, welchen index das hat, und dann die textur zuzuweisen o.o
und für kacheln etc. dürfte das doch auch eher unzuträglich werden, oder? o.o kommt doch nen bisschen komisch, wenn die textur auf jedem poly anders liegt u.u
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 03, 2009, 10:42:06 pm
Was genau meinst du mit "Selektion"? Das, was die Methoden in Interact2D teilweise liefern? Wenn ja, dann ist das die Polygon-ID. Damit kannst du direkt an den PolygonManager gehen. Wenn nein, was genau meinst du dann?
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 04, 2009, 09:49:30 am
Was genau meinst du mit "Selektion"? Das, was die Methoden in Interact2D teilweise liefern? Wenn ja, dann ist das die Polygon-ID. Damit kannst du direkt an den PolygonManager gehen. Wenn nein, was genau meinst du dann?


Nunja, in Cinema4D gibt es halt die Möglichkeit, mehrere Polygone zu markieren, und zu bearbeiten, und dann kann man diese Selektion auch "einfrieren", und dann kommt son Selektions-tag hinter das Objekt, mithilfe dessen man immer sofort diese Polygone zur Hand hat, anstatt sie jedesmal neu selektieren zu müssen..

EDIT: Interact2D sagt mir leider gar nichts, von daher kannich dir dazu leider nichts sagen ;)
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 04, 2009, 09:58:14 am
Ich verstehe...nein, diese Selektion hast du dann nicht mehr zur Verfügung. Was konkret willst du denn umtexturieren?
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 04, 2009, 10:17:14 am
inwiefern umtexturieren? eher überhaupt erstmal texturieren, weil die texturen doch in dem md2-file verloren gehn...
Oder kann man, wenn man die grundposition als 3ds-file speichert, dieses 3ds-file sozusagen über das md2-mesh "überschreiben" oder so? :o

EDIT: und nja, müsste dann ja bei sämtlichen charakteren, "monstern", bzw. anderen npc's und anderen animierten objekten geschehn :o
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 04, 2009, 12:01:24 pm
Md2 unterstützt nur eine Textur pro Objekt. Ein einfaches setTexture() auf dem geladenen Objekt reicht daher.
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 04, 2009, 12:21:40 pm
uhm, ich fürchte, wir reden gerade leicht aneinander vorbei...


ich habe einen charakter wie diesen:

http://upload.worldofplayers.de/files3/kla'mher.jpg (http://upload.worldofplayers.de/files3/kla'mher.jpg)

so, und nunja, wie würdest du denn jetzt dieses Objekt mitsamt Animation einbringen? oO *gerade ein wenig verwirrt ist*

EDIT: mir ist grad ne verrückte Idee gekommen...
was wäre, wenn man parallel zu der md2-datei ne 3ds-file mit dem objekt hat...
und dann geht man die poly-IDs einfach durch, holt sich für jede Poly-ID die textur und packt sie auf die Poly-ID des animierten Objektes... ginge sowas? :o (also, vom code her, klar, wüsst' ich auch, wie ich's machen muss, nur halt ob die theorie stimmt... kann es selber halt leider grad nicht überprüfen, da er die nächsten ca. 14 stunden wohl mit rendern von ner kleinen scene beschäftigt ist...)


EDIT2: ok, war schneller als gedacht..
habe es jetzt so probiert:
for(int i = 0; i<=animated.getPolygonManager().getMaxPolygonID();i++){
        animated.getPolygonManager().setPolygonTexture(i, mesh.getPolygonManager().getPolygonTexture(i));
     }

nur leider  kommt da texturtechnisch nur shice bei raus...
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 04, 2009, 07:42:43 pm
uhm, ich fürchte, wir reden gerade leicht aneinander vorbei...
Ja mag sein...aber ich verstehe echt nicht, was du machen willst. Du hast diesen Kla'mger-Typen als Beispiel...ok, das ist ein MD2? Warum lädst du es dann nicht einfach als solches? Dann die entsprechende Texture zuweisen und fertig. Da es nur eine gibt, reicht das setTexture() in Object3D. Was genau willst du jetzt mit dem 3DS anstellen?  ???
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 04, 2009, 09:07:52 pm
Ja mag sein...aber ich verstehe echt nicht, was du machen willst. Du hast diesen Kla'mger-Typen als Beispiel...ok, das ist ein MD2? Warum lädst du es dann nicht einfach als solches? Dann die entsprechende Texture zuweisen und fertig. Da es nur eine gibt, reicht das setTexture() in Object3D. Was genau willst du jetzt mit dem 3DS anstellen?  ???

uhm, ok, also ich habe diesen kla'mher tyen halt in cinema 4d gespeichert fertig texturiert und animiert...
so, das halt als md2 exportiert....
so, du sagst, es gibt nur eine Textur? das ist ja das problem, es gibt ja mehrere Texturen... eine für den körper an sich, eine für die augen auf beiden seiten und eine für diese metallklammer die vom Auge aus zur Seite führt...


und mit dem 3ds...
ich habe die animation wieder weggeschnitten, und das reine modell als 3ds exportiert...
dann beide dateien in je eine Instanz von Object3D geladen
dann die polygonmanager von beiden genommen
und für jede polygon-id von dem objekt aus dem 3ds file die textur geholt und auf die polygon-id von dem objekt aus dem md2-file gelegt.
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 04, 2009, 10:43:58 pm
Ok, verstehe. Ob das klappt, hängt vom Exporter ab. Und da es scheinbar nicht klappt, exportieren die wohl in beide Formate anders. Alternativ könntest du die Animationsstufen einzeln als 3ds exportieren, einzeln laden (nicht vergessen, hier false zu setzen: http://www.jpct.net/doc/com/threed/jpct/Loader.html#setVertexOptimization(boolean) (http://www.jpct.net/doc/com/threed/jpct/Loader.html#setVertexOptimization(boolean))) und dann zu einer Animation zusammenfügen. Das machen einige hier so. Es gibt auch irgendwo ein paar Threads dazu. Damit erhältst du deine verschiedenen Texturen pro Objekt. Das MD2-Format selber kann wirklich nur eine.
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 04, 2009, 11:07:18 pm
Nja, uhm, wenn es noch ein anderes animationsformat gibt, das von jPCT unterstützt wird, wäre das ja auch möglich... also, wie würdest du das denn machen, wenn du ne ani von nem objekt mit mehreren texturen hast?

und wenn ich doch mehrere 3dsfiles nehmen muss, wie könnte man diese denn dann zu der animation zusammenfügen?
und nja, wäre eigentlich eher unpraktisch, da dies ein uhm... relativ großes projekt wird, und auch so habe ich schon öfters nen heap-overflow, und wenn so viele 3ds-files geladen werden, wird das sicher nicht zuträglich sein :o und vor allem würden das halt hunderte von 3ds-files werden...

Und  wenn es ja nciht möglich ist, über die obige schleife einfach die texturen zu übertragen von dem 3ds-file auf das md2, wäre es denn dann vielleicht möglich, einfach das grundmesh sozusagen zu ersetzen?
also, die vertexe sind ja die gleichen etc. also könnte man doch eigentlich auf den ersten keyframe das objekt von dem 3ds-file legen oder nicht? und wenn ja, wie ginge das?^^
hab's schon über getMesh() und setMesh() versucht, aber danach war's immer noch untexturiert...

oder war vielleicht die von mir verwendete schleife falsch? also, dass dieser int-wert nicht ausreicht, sondern man mit der setTexture(polyid, textureinfo) arbeiten muss? nur wenn ja, wie bekomme ich die instanz von textureinfo zu der polyid von dem objekt aus dem 3ds-file?:o
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 05, 2009, 08:14:59 am
Generell ist jPCT eine der wenigen Engines (die einzige, die ich kenne...), die mehrere Texturen pro Objekt und Texture Stage grundsätzlich erlaubt. Üblich sind eine Textur/Stage/Objekt. Von daher wäre es im Prinzip durchaus sinnvoll, die Texturen irgendwie zu einer zu machen. Ist das keine Option?

Die Kollegen, die mit 3DS für die Animationen arbeiten, laden die einzeln, bauen aus den Meshes der Einzelobjekte die Animationen zusammen und serialisieren  meistens die fertige Animation. Damit umgeht man das aufwändige Laden der einzelnen Meshes bei Starten.
Der Weg ist:


setMesh() und getMesh() gehen nicht, weil im Mesh die Texturinformationen nicht hinterlegt sind. Die hängen direkt im einzelnen Objekt, damit ein Mesh für unterschiedlich texturierte Objekte benutzt werden kann.

Deine Kopierschleife sieht mir ok aus. Das Problem wird sein, dass das 35. Polygon im MD2 einfach nicht das 35. Polygon im 3DS ist. Aber das liegt dann am Exporter.
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 05, 2009, 01:21:58 pm
Generell ist jPCT eine der wenigen Engines (die einzige, die ich kenne...), die mehrere Texturen pro Objekt und Texture Stage grundsätzlich erlaubt. Üblich sind eine Textur/Stage/Objekt. Von daher wäre es im Prinzip durchaus sinnvoll, die Texturen irgendwie zu einer zu machen. Ist das keine Option?
hm, müsste ich gucken, wie das gehen soll :o



Quote from: EgonOlsen
Die Kollegen, die mit 3DS für die Animationen arbeiten, laden die einzeln, bauen aus den Meshes der Einzelobjekte die Animationen zusammen und serialisieren  meistens die fertige Animation. Damit umgeht man das aufwändige Laden der einzelnen Meshes bei Starten.
Der Weg ist:

  • Alle Objekte laden
  • Eine neue Animation erstellen
  • die Meshes alles Objekte an diese Animation hängen
  • die Animation dem ersten Objekt der Menge zuweisen und dieses serialisieren
  • ...oder eben ohne Serialisierung, dieses einfach mal animiertes Objekt benutzen

uhm, was heißt das serialisieren, und wie kann man denn ne neue animation erstellen und die daranhängen?^^ also,weil das doch per objekt3d.animate(index etc) funktioniert.... aber einfach mergen die objekt3Ds kann doch nicht richtig sein, doer?^^


also wär ganz nett, wenn du vllt. nen beispielcode hättest, wie das ginge :-o
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 05, 2009, 06:25:55 pm
Mit serialisieren meine ist einfach, das betreffende auf die Platte zu schreiben und in der eigentlichen Applikation einfach wieder zu deserialisieren. Wenn du damit noch nicht gearbeitet hast, guck mal nach ObjectOutputStream und ObjectInputStream sowie java.io.Serializable...ist nicht kompliziert, nur ein paar Zeilen Code.

A propos Code...in diesem Thread ist ein Beispiel für die 3DS-Sache: http://www.jpct.net/forum2/index.php/topic,1030.msg6366.html (http://www.jpct.net/forum2/index.php/topic,1030.msg6366.html)
Es fehlt zwar die Methode loadModel(), aber scheint nur ein Wrapper von den Loader zu sein, also nichts kritisches...

Hilft das?
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 05, 2009, 06:57:07 pm
Hilft das?

Sogar sehr, danke!! :)

Und gut, mit dem serialisieren habe ich mich in der tat noch nciht beschäftigt... ich nehem an, das heißt, dass das objekt als byte-muster drauf gespeichert wird?
und hieße das, ich brauche dann nur noch ein 3ds-file am schluss mit dem modellierten stand-modell und dann das serialisierte animation-file? :o das wär nat. genial! :)
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 05, 2009, 09:00:38 pm
Du brauchst nur ein serialisiertes Object3D. Da sind dann die Animationen schon mit drin. Am Besten erstellt man die serialisierten Versionen mit einem kleinen Hilfsprogramm und lässt die Applikation nur noch mit dem Ergebnis arbeiten. Am Ende kann man die serialisierten Objekte in einem JAR zusammenpacken, dann brauchen sie auch nicht mehr soviel Plattenplatz. Es gibt auch noch ein paar Tricks (von Config.saveMemory=true abgesehen), mit denen man die serialisierten Dateien verkleinern kann...raft hat da mal was gemacht, ich habe es aber nicht mehr so genau im Kopf. Ist vielleicht auch erstmal nicht so wichtig.
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 06, 2009, 09:59:51 pm
Du brauchst nur ein serialisiertes Object3D. Da sind dann die Animationen schon mit drin. Am Besten erstellt man die serialisierten Versionen mit einem kleinen Hilfsprogramm und lässt die Applikation nur noch mit dem Ergebnis arbeiten. Am Ende kann man die serialisierten Objekte in einem JAR zusammenpacken, dann brauchen sie auch nicht mehr soviel Plattenplatz. Es gibt auch noch ein paar Tricks (von Config.saveMemory=true abgesehen), mit denen man die serialisierten Dateien verkleinern kann...raft hat da mal was gemacht, ich habe es aber nicht mehr so genau im Kopf. Ist vielleicht auch erstmal nicht so wichtig.


Nunja, ich meinte damit auch vor allem, ob man die originaldaten noch auf der festplatte braucht...
also, dass die objekte mit nem hilfsprogramm erstellt werden, war mir wohl klar, nur halt nicht, ob ich die verwendeten 3ds dateien danach löschen kann ;)
Title: Re: md2-files and several texture-selections
Post by: EgonOlsen on March 06, 2009, 10:52:14 pm
Nunja, ich meinte damit auch vor allem, ob man die originaldaten noch auf der festplatte braucht...
also, dass die objekte mit nem hilfsprogramm erstellt werden, war mir wohl klar, nur halt nicht, ob ich die verwendeten 3ds dateien danach löschen kann ;)
Für die Distribution selber brauchst du die nicht, aber ich würde sie nicht löschen. Wenn du z.B. auf eine neue Version von jPCT wechselst, musst du die serialisierten Dateien neu erzeugen, da sich die serialVersionUID einiger Klassen ändern könnte, wenn Felder hinzu kommen oder wegfallen.
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 07, 2009, 12:36:14 pm
Für die Distribution selber brauchst du die nicht, aber ich würde sie nicht löschen. Wenn du z.B. auf eine neue Version von jPCT wechselst, musst du die serialisierten Dateien neu erzeugen, da sich die serialVersionUID einiger Klassen ändern könnte, wenn Felder hinzu kommen oder wegfallen.

ye, meinte jetzt auch nur für die Distribution... ist ja dann schon für die Dateimenge wesentlich bequemer ;)
Danke für die Hilfe, bin jetzt grad dabei, son Programm für's erstellen der Animationen zu schreiben, denke mal, dasses jetzt klappen dürfte :)
Title: Re: md2-files and several texture-selections
Post by: Elrohir on March 08, 2009, 08:06:34 pm
ok, uhm, gibt doch noch ein kleines problem...
undzwar wirft er jetzt folgenden fehler aus:

[ Sun Mar 08 19:58:35 CET 2009 ] - ERROR: Bounding box missing in this mesh!
[ Sun Mar 08 19:58:35 CET 2009 ] - ERROR: This Animation is empty!

woran könnte das liegen? :o

EDIT: ok, hatte vergessen den calcBoundingBox befehl anzuwenden... allerdings kommt jetzt dieser error:
[ Sun Mar 08 20:24:44 CET 2009 ] - ERROR: The sizes of the Animation's Meshes (582) and the object's Mesh (574) don't match!

und das sogar, wenn ich beidesmal genau die gleiche 3ds-datei benutze oO

EDIT2: hrm, ok, sry, hatte jetzt wiederum nicht das basisobject gebuildet.. jetzt funktioniert's.. :)