Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 12.08.2004, 15:42 Titel: 3D Formate |
|
|
In dem JLI Buch für Direct X 9 kann ich entnehmen, dass X-Files nicht zum Standardformat gehören.
Welche Formate gehören nun zum heutigen Standard und wo finde ich den Tutorials dazu? Und welche Vorteile hat man gegenüber den X-Files? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 12.08.2004, 16:13 Titel: |
|
|
kommt drauf an, was du machen willst. auf http://www.gametutorials.com/ gibts tutorials für md2 und md3, zwar für openGL, aber das stört nicht wirklich. xfiles sind ansich schon ganz fein, vorallem kannst du die DX funktionen fürs laden, animieren, etc. benutzen, wenn du das willst. |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 12.08.2004, 20:44 Titel: |
|
|
Also in dem Buch wird erklärt, wie man statische Objekte mit X-Files reinläd. Aber wie kann man denn mit X-Files etwas bewegliches konstruieren? Es muss ja jetzt nicht etwas komplexes wie ein Mensch oder eine Kreatur sein, sondern z.B. ein Panzer, das eine bewegliche Kanone hat. Wie geht denn sowas? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 12.08.2004, 20:56 Titel: |
|
|
Der einfachste Fall ist, dass du drei Meshes hast, die jeweils drei Positionen haben. Schau mal ob du dolphin.x findest (kann auch dolphin[1|2|3].x heissen. Das ist ein Delphin der eine Bewegung ausführt. Du kannst die Bewegung des Delphins jetzt sehr einfach flüssig darstellen, in dem du die drei Meshes lädst und zwischen den Meshes interpolierst. Was heiss das? Du nimmst beispielsweise im ersten Schritt die Vertices des ersten Meshes mal 0.9 + die Vertices des zweiten Meshes mal 0.1, im nächsten Schritt die Vertices vom ersten * 0.8 und vom zweiten * 0.2 usw. Natürlich kannst du das feiner unterteilen. Ich hoffe es wird ungefähr klar, was das soll.
C. |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 07.09.2004, 12:29 Titel: |
|
|
Wie greift man auf die Vertizes zu, wenn man Meshes mit der Funktion D3DXLoadMeshFromX läd? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 07.09.2004, 13:55 Titel: |
|
|
Bitte suchen, Jonathan Klein hat auch schonmal danach gefragt.
C. |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 21.10.2006, 13:59 Titel: Alternativen zum Interpolieren |
|
|
Das mit dem Interpolieren ist vielleicht schön und gut, wenn eine Figur nicht so viele Bewegungen machen muss. Gibt es nicht auch eine Möglichkeit, mit der man bestimmte Variablen eines X-Files ändern kann, die für den Fortschritt einer Bewegung stehen. Bei Maya kann man z.B. Variablen erzeugen mit denen man Bewegungsabläufe steuern kann.
Hier steht dann z.B. :
ArmUp = 1.0 für Arm oben
ArmUp = 0.0 für Arm in der Mitte
ArmUp = -1.0 für Arm unten
Da werden dann quasi Bewegungen die man mit Hilfe des Skelleton erstellt hat als Driven-Key-Animation gespeichert.
Kann man mit dem x-file Format solche Driven-Key-Animationen speichern und im Spiel verwenden ? |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 21.10.2006, 15:16 Titel: |
|
|
Also, 3D Animationen sind sehr schweirig. Ganz so einfach wirst du das nicht hinkriegen.
Meiner Meinung nach nimmt man entweder eine 3D Engine die fertig ist (Ogre, Irrlicht) oder schreibt sich alles selber, wofür man aber viel Wissen benötigt.
Bei fertigen Engines kannste einfach so eine Animation die du im Modell gespeichert hast darstellen. Informationen dazu gibts in der jeweiligen Doku. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 22.10.2006, 11:32 Titel: |
|
|
Es gibt da verschiedene Ansätze. Einmal die Interpolation zwischen Statischen versionen des selben Objekts oder die Skeletal animation. Letzters ist komplizierter, man beommt aber schönere Animationen hin.
Ich finde es am einfachsten wenn du alle Teile einzeln lädst und dann in einem Baum speicherst. So ein Knotenpunkt würde dann aus dem eigentlichem Objekt, und den Rotations, Verschiebungs und Skalierungswerten gegenüber dem übergeordnetem Objekt bestehen. Beim rendern einfach alle werte vom Hauptknoten bis zum gewünschten Unterknoten adieren. Wenn du jetzt den Winkel des Oberarms änderst überträgt sich das auf alle nachfolgenden Elemente ( Unterarm, Hand, Finger). Um den Arm zu bewegen musst du also nur den Rotationswert im Oberarm ändern.
Um jetzt glaubhafte Bewegungen hinzubekommen brauchst du sequenzen von vielen Winkeländerungen die zeitlich versetzt und teilweise gleichzeitig ablaufen.
Soweit ich weiß ist die Verwaltung davon im x Format komplett vorhanden. Bzw. sie ist in der Klasse mesh von DX vorhanden. |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 22.10.2006, 15:30 Titel: |
|
|
Bei der "Skelatalen" Animation muss man übrigens auch zwischen den Frames interpolieren. Denn auch dort gibt es einzelne Animationsframes.
Der Vorteil über so ein "Skelet" zu animieren ist einfach, es werden viel weniger Daten verwendet da nur die einzelnen Joints (hierbei: Position und Rotation) gespeichert werden. Das eigentliche Mesh wird dann an dieses Skelet "gebunden" wobei immer eine Gruppe Vertices an ein "Joint" (Gelenk) gebunden werden und eine unterschiedliche Gewichtung erhalten. Dies hat den Vorteil das man z.B. Hautbewegungen super animieren kann.
Hat man erstmal das Mesh und die das Skelet so muss man nurnoch die einzelnen Frames (Positionsänderungen der Joints) einfügen. Hierbei ist zu beachten das die Bones (Knochen) eine Baumhierarchy bilden. D.h. alle Kinderknochen des Animierten Knochens müssen mit rotiert werden.
Nach dem ausrichten der Joints werden die Vertices an das aktuelle Skelett gebunden und danach kann gerendert werden.
Die Interpolation erfolgt über eine Slerp (spherical linear interpolation) und kann recht einfach mit Quaternions realisiert werden. (Aber auch mit 3x3 rotations Matritzen).
Das tolle bei dieser Technik ist aber nichtnur der kleiner Datenverbrauch, das simplere erstellen von Animationen (für die Grafikartisten) und das (eigentlich) leicht Animieren der Modelle sondern vorallem auch eine große Flexibilität die der Programmierer hat.
Es ist z.B. recht leicht ein System für IK (inverse Kinematik) zu implementieren.
Md2, Md3 und andere Keyframe animierte Modelformate sind eigentlich veraltet und sollten nichtmehr verwendet werden. Md5, das Ogre Meshformat oder andere Skeletal animierte Modelformate (u.a. .X!??) dagen sind vieeel besser!
grüße |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 22.10.2006, 15:40 Titel: |
|
|
Das ist schön und recht aber wie greife ich als Normalsterblicher im Code auf solche "Positionsänderungen der Joints" ein ?
Hätte da vielleicht jemand einen passenden Quell-Code Ausschnitt zu Hand?
Wann ja wäre das sehr nett.
Und Danke im Vorraus. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 22.10.2006, 16:03 Titel: |
|
|
David hat Folgendes geschrieben: | Md2, Md3 und andere Keyframe animierte Modelformate sind eigentlich veraltet und sollten nichtmehr verwendet werden. Md5, das Ogre Meshformat oder andere Skeletal animierte Modelformate (u.a. .X!??) dagen sind vieeel besser! |
Sind in den Formaten, die Bones unterstützen, dann die Weights von jedem einzelnen Vertex gespeichert oder wie darf ich das verstehen? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 22.10.2006, 17:45 Titel: |
|
|
@ LeeDiGer
Ich habe mal eine ganze Weile damit verbracht einen vollständig Objektorientierten Loader für animierte 3DS, MD2, MD3, AN8 und nicht animierte X Files zu schreiben. Ist übrigens nicht der, den ich hier schonmal gepostet hatte. Bei den X Files werde ich demnächst auch noch Unterstützung für Animationen hinzufügen (mit Skinning). Der MD3 loader ist noch etwas unvollständig.
Beim Schreiben dieses Loaders habe ich darauf geachtet, dass er möglichst portierbar ist. Er ist praktisch in drei Ebenen unterteilt.
Auf der niedrigsten Ebene gibt es eine Klasse für jedes unterstützte Dateiformat. Wenn man eine Datei des jeweiligen Typs laden will erstellt man eine Instanz der entsprechenden Klasse, ruft eine Funktion auf und schon hat man sämtliche Informationen, die aus der Datei geparst wurden feinsäuberlich auf bestimmte Strukturen verteilt. Alle Dateiformate werden übrigens mit offiziellen Chunk Descriptions geladen, was ein maximales Maß an Kompatibilität garantiert. Diese Klassen in ein eigenes Projekt zu übernehmen wäre nicht weiter schwer, da ich sie unabhängig von Direct3D und D3DX gemacht habe (ja, der X-Fileloader ist selbstgeschrieben ) und alles was man zu ihrer Verwendung benötigt in wenigen Modulen Platz findet. Zum Laden von X Files wird allerdings der Header Dxfile.h und die Library d3dxof.lib benötigt. Er baut nämlich auf der Klasse IDirectXFile auf.
Die Instanzen dieser Klassen werden dann von einer Klasse mit dem Titel CModel weiterverarbeitet. Das ist die zweite Ebene. Diese erstellt aus den Daten Meshs, Materials, Bones und was man sonst noch so braucht. Diese Klasse ist schon ziemlich Eng in die Engine eingestrickt, d.h. es wäre recht schwierig sie zu übernehmen ohne die ganze Engine zu übernehmen . Alle Instanzen von CModel werden von einer Klasse CModelManager verwaltet. Diese sorgt dafür, dass kein Model mehrfach geladen wird. Das heißt wenn man ein Model braucht ruft man nur CModelManager::LoadModel(...) auf und kriegt einen Pointer auf eine entsprechende CModel Instanz.
Schließlich kommt die Klasse CObject. Diese repräsentiert eine Instanz eines Models in der 3D Szene. Bei ihrer Erstellung übernimmt sie Zeiger auf die Meshs des Models (aus Speichergründen) und kopiert sich die Materials und Bones. Über diese Klasse kann man dann auch noch sehr viel mehr feine Sachen machen als nur ein 3D Objekt rendern. Man kann automatisch LODs generieren, Shadereffekte verwalten, Cel-Shading anwenden, aus mehreren einzelnen models eine Animation erstellen, Vertex Tweening aktivieren (ist bei Md2 und Md3 files standardmäßig an), Raytracing tests durchführen und noch einiges mehr. Diese Klasse zu verwenden ohne wesentliche Teile der Engine mit zu übernehmen ist praktisch unmöglich.
Zur Zeit würde ich allerdings nur die unterste Ebene veröffentlichen, da die anderen viel zu Stark mit meiner kompletten Engine verstrickt sind und ich keine Lust habe dafür eine komplette Dokumentation zu schreiben. Aber die ganzen Chunks einer Datei geparst zu haben ist schon die halbe Miete. Danach musst du die Daten nur noch ein bisschen umstrukturieren um sie deiner Engine schmackhaft zu machen. Also wenn du die haben willst, gib mir mal deine Emailadresse, dann werd ich die Dateien sobald wie möglich (bin jetzt erstmal bis Mittwoch weg) mal ein bisschen Veröffentlichungsfähig machen und dann kannste die gerne haben.
MfG
Dr. Best |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 22.10.2006, 18:42 Titel: |
|
|
Otscho hat Folgendes geschrieben: | Das ist schön und recht aber wie greife ich als Normalsterblicher im Code auf solche "Positionsänderungen der Joints" ein ?
Hätte da vielleicht jemand einen passenden Quell-Code Ausschnitt zu Hand?
Wann ja wäre das sehr nett.
Und Danke im Vorraus. |
Wie meinen? Du hast doch Zugriff auf die ganze Datenstruktur, also kannst du auch die Bones beliebig Rotieren. Suchmal "Mesh Skinning" in google.
The Lord of Programming hat Folgendes geschrieben: |
Sind in den Formaten, die Bones unterstützen, dann die Weights von jedem einzelnen Vertex gespeichert oder wie darf ich das verstehen?
|
So is das, genau!
Dr. Best hat Folgendes geschrieben: |
CModel [...] CModelManager [...] CObject [...]
|
Kleiner MFC Fanatiker ja??
grüße |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 22.10.2006, 19:39 Titel: |
|
|
Ich benutz kein MFC, also is das C noch frei .
Es stand halt so in Christians Buch und das war das erste, das ich gelesen hab, also hab ich's mir so angwöhnt. Außerdem, was ist denn eigentlich die "richtige" Variante? Die Klassen ohne irgendein Prefix benennen will ich nicht. Würde mir zu zu vielen Namenskonflikten führen. |
|
Nach oben |
|
|
|