JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=5641743e051328a94e52251a84a735eeMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

3D Formate
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.08.2004, 15:42    Titel: 3D Formate Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 12.08.2004, 16:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.08.2004, 20:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 12.08.2004, 20:56    Titel: Antworten mit Zitat

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 Wink 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 07.09.2004, 12:29    Titel: Antworten mit Zitat

Wie greift man auf die Vertizes zu, wenn man Meshes mit der Funktion D3DXLoadMeshFromX läd?
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 07.09.2004, 13:55    Titel: Antworten mit Zitat

Bitte suchen, Jonathan Klein hat auch schonmal danach gefragt.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 21.10.2006, 13:59    Titel: Alternativen zum Interpolieren Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 21.10.2006, 15:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 22.10.2006, 11:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 22.10.2006, 15:30    Titel: Antworten mit Zitat

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! Wink

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 22.10.2006, 15:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 22.10.2006, 16:03    Titel: Antworten mit Zitat

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! Wink

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 22.10.2006, 17:45    Titel: Antworten mit Zitat

@ 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 Wink ) 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 Rolling Eyes . 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 22.10.2006, 18:42    Titel: Antworten mit Zitat

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?? Wink

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 22.10.2006, 19:39    Titel: Antworten mit Zitat

Ich benutz kein MFC, also is das C noch frei Very Happy .
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum