Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

06.03.2012, 21:05

Suche Informationen zu Skeletale Animation

Hi,

der Titel sagt ja schon fast alles: ich suche möglichst viele Informationen zu skeletaler Animation, auf Deutsch oder Englisch. Dabei darf das ganze gerne auf OpenGL basieren, DX ist aber auch kein Problem... Was genau ist mir erstmal egal (Tutorials, Dokumentationen, ...), das ganze sollte nur aktuell und verständlich sein (also kein Nehe z.B.) und von Grund auf erklärt werden.

Zusätzlich währen Infos für einen eigenen Blender Exporter ganz gut, also wie ich den in Blender einbinde, wie ich an die Daten komme usw. (ich werd aber nochmal zusätzlich in die Blender Doku gucken).

Und falls ihr selbst noch was wisst oder Ideen habt: ich würde gerne Mesh (mit Vertices, Texturkoordinaten, Normalen, Indices) und Animationen (mit Bones , den einzellnen "Frames", Gewichtung, Vertex Gruppen) trennen. Und das möglichst in Dateien. Wie lässt sich das am besten realisieren?

Schon mal Danke für eure Hilfe...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

06.03.2012, 21:18

Hier, alle Informationen auf einen Blick: Klick
@D13_Dreinig

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

06.03.2012, 22:22

Genau das wollte ich eben nicht... ich will eure Empfehlungen weil man doch viel Schrott bei google findet.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

07.03.2012, 00:27

Ich kenn leider kaum ein gutes Tutorial. Die Basics hab ich hier im Forum schon vielfach erklärt. Ich habs mir damals irgendwie aus diesem Tutorial zusammengereimt: http://wayback.archive.org/web/jsp/Inter…%2Fms3danim.asp

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

07.03.2012, 09:45

Genau das wollte ich eben nicht... ich will eure Empfehlungen weil man doch viel Schrott bei google findet.


Brauchbare Informationen von Schrott zu trennen, das ist doch das übliche Problem das jeder Programmierer täglich hat. Dadurch verschaft man sich ein viel breiteren Überblick über vorhandene Techniken und Ansätze und nur dadurch wird man wirklich Fitt in einem Thema.

http://mathinfo.ens.univ-reims.fr/image/…skinnedmesh.pdf
@D13_Dreinig

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

07.03.2012, 11:49

Erst mal solltest du dich informieren - falls dir folgende Begriffe noch nichts sagen - was Quaternionen und Euler-Rotationen sind.
In dem obigen Tutorial sehe ich auf den ersten Blick, dass es sich um ein Tutorial für einen Loader des MS3D (Milkshape3D) Formats handelt.
Das MS3D Format ist eig. ne gute Sache, weil das Programm Milkshape3D furchtbar viele Importer und Exporter bietet. Aber die Rotation finde ich nicht toll, weil dabei Euler-Rotationen verwendet werden.
Quaternionen sind einfach am praktischsten für Animationen - egal ob Skeletal- oder Node Animation.

Ansonsten kannst du dir gerne mal meinen Blender Exporter meines eigenen 3D Formats anschauen, das mitlerweile auch Skeletal-Animation unterstützt:
- zum Thread über den Blender Exporter für SPM
- SoftPixel Mesh FileFormat Spec.txt

Um den Exporter für Blender schreiben zu können habe ich folgendes gemacht:
- andere Mesh exporter für Blender (v.2.5+) durchgesehen.
- mich durch die Blender Python API durchgearbeitet - per online docu und in der Python Console von Blender rumgespielt und ausprobiert
Dieser Weg war mühsam aber nach einer Woche, hat man einen guten Überblick, über die Python API in Blender.

Gruß,
Lukas

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

07.03.2012, 22:18

Schonmal vielen Dank :)
Vor allem LukasBanana hat mir sehr weiter geholfen.

Zitat

Brauchbare Informationen von Schrott zu trennen, das ist doch das übliche Problem das jeder Programmierer täglich hat.


Klar, aber glaubst du ich hätte nicht schonmal gegoogelt?

@dot: dein Tutorial werde ich mir gleich mal ausdrucken, weil es schön kurz ist. Ich finde es immer recht angenehm erstmal die "light" Version zu basteln bevor man gleich das volle Programm integriert (ist auch motivierender).

Jetzt bräuchte ich vielleicht nur ein kleines Blender Model zum testen, da ich nicht so der 3D Artist bin und mich lieber mit der Programmierung beschäftigen würde (wenn die sch**ß Schule es langsam mal wieder zulassen würde).

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

07.03.2012, 22:51

Klar, aber glaubst du ich hätte nicht schonmal gegoogelt?


In diesem Fall scheinbar nicht ausreichend genug.
@D13_Dreinig

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

08.03.2012, 08:51

Naja ich hab schon 1 gutes PDF und einen kleinen Einstieg gefunden... aber ich vertrau da lieber auf eure Kompetenz ;)

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

10

10.03.2012, 13:19

So jetzt hab ich mal eine Frage was das rendern angeht:

C-/C++-Quelltext

1
2
3
4
5
6
glDrawRangeElements(GL_TRIANGLES,
                            m_bones[i].index_offset,
                            m_bones[i].index_offset+m_bones[i].index_count,
                            m_bones[i].index_count,
                            GL_UNSIGNED_INT,
                            &m_indices[0]);


(Vollständiger Code)

Ich versuche gerade den Teil des Meshes zu rendern der zu dem Bone gehört. Dazu habe ich jetzt 2 structs:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct samBone{
    string name;
    unsigned int parent; // -1 = kein parent

    mat4 transformation;
    vec3 rotation;

    unsigned int index_offset; // Vertex group
    unsigned int index_count;
};

struct samFrame{
    string name;

    unsigned int bone_offset;
    unsigned int bone_count;
};


Ich wähle das aktuelle Frame aus und lese daraus dann die passenden Bones (diese liegen alle in einem Vektor, deshalb brauch ich nur den offset und die Anzahl der Bones). Danach wird für jedes Bone die Modelview erstellt (mit Bezug auf den parent Bone). Danach durchlaufe ich alle Bones zum rendern, gebe für jedes Bone die Modelview neu an den Shader und rendere den Teil für das Bone (index_offset bis index_offset+index_count). Das Problem ist jetzt das glDrawRangeElements nicht das macht was ich erwartet habe:


(Link)


Wobei das ganze quasi zwei Würfel hintereinander sind (in einem Mesh):


(Link)


Beim zweiten Bild habe ich mit:

C-/C++-Quelltext

1
2
3
4
5
6
glDrawRangeElements(GL_TRIANGLES,
                            0,
                            60,
                            60,
                            GL_UNSIGNED_INT,
                            &m_indices[0]);


gerendert (also das ganze Mesh).
Was hab ich jetzt falsch verstanden? Sollte ich mit glDrawRangeElements bei 60 Indices mit 0, 30, 30 nicht die ersten 30 Indices rendern und mit 30, 60, 30 die nächsten 30?

PS: das ganze ist nur Experimentel, das heißt ich versuch das im Moment nur irgendwie zum laufen zu bringen (das heißt noch ohne Vertex weights und mehr als 2 Frames). Außerdem habe ich vor das ganze mit irgendeinem Mesh verbinden zu können (z.B. ply) indem ich alles was ich dazu brauche seperat speichere (Vertex Groups, Vertex weights, Bones, Frames, ...). Ist das sinnvoll?
In den Bildern oben wird nichts transformiert, also liegt es nicht daran das der zweite Würfel einfach nur verschoben währe.
Noch eine Frage: ist es überhaupt mit der Render Funktion möglich das Mesh verbunden zu lassen (ich meine zwischen den Bones)?

Werbeanzeige