Wie werden Joins und Bones in openGL implementiert?

8

Ich bin dabei, mein eigenes openGL-Framework zu rollen und weiß, wie man 3D-Objekte zeichnet ... etc ...

Aber wie definieren Sie Beziehungen zwischen 3D-Objekten, die möglicherweise ein Gelenk haben? Oder wie definierst du das 3D-Objekt als "Knochen"? Gibt es irgendwelche guten Ressourcen?

    
chutsu 25.12.2012, 13:08
quelle

2 Antworten

7
  

Aber wie definieren Sie Beziehungen zwischen 3D-Objekten, die möglicherweise ein Gelenk haben?

OpenGL interessiert sich nicht für diese Dinge. Ich bin keine reine Zeichnungs-API. Es liegt also an Ihnen, Ihre Kreativität freizusetzen und solche Strukturen selbst zu definieren. Der übliche Ansatz zur Skelettanimation ist ein Knochen / Rig-System, bei dem jeder Knochen eine Orientierung hat (dargestellt durch eine Quaternion- oder eine 3 × 3-Matrix), eine Länge und eine Liste von daran angehängten Knochen, dh eine Art Baum.

Ich würde diese Struktur als

definieren %Vor%

Außerdem brauchst du einen Drehpunkt, von wo aus das Rig startet. Ich würde es so machen.

%Vor%

Als nächstes benötigen Sie einige Funktionen, die durch diese Struktur iterieren, die Matrixpalette daraus generieren, damit sie auf das Modellnetz angewendet werden kann.

  

Hinweis: Ich verwende Freeglut

Völlig irrelevant

    
datenwolf 25.12.2012, 13:23
quelle
9

Da OpenGL nur eine Grafikbibliothek und kein 3D-Modellierungsframework ist, fällt die Aufgabe, "Bones" zu definieren und zu verwenden, auf Sie.

Es gibt verschiedene Möglichkeiten, es tatsächlich zu implementieren, aber die allgemeine Idee ist:

Sie behandeln jeden Teil Ihres Modells als Knochen (z. B. Kopf, Rumpf, Unterschenkel, Oberschenkel usw.) Jeder Knochen hat einen Elternteil, mit dem er verbunden ist (z. B. der Elternteil des unteren linken Beines ist das obere linke Bein) So hat jeder Knochen eine Anzahl von Kindern.

Nun definieren Sie die Position jedes Knochens als relative Position zum Elternknochen. Wenn Sie einen Knochen anzeigen, multiplizieren Sie nun seine relative Position mit der relativen Position des Elternknochens, um die absolute Position zu erhalten.

Zur Visualisierung:
Betrachten Sie es als eine Puppe. Wenn Sie den Arm der Puppe greifen und ihn bewegen, ändert sich die relative Position (und Rotation) der Hand nicht. Seine absolute Position wird sich ändern, weil du einen seiner Eltern bewegt hast.

Bei Versuchen mit Skelettanimationen habe ich das meiste davon über diesen Link gelernt: Ссылка

    
s3rius 25.12.2012 13:27
quelle

Tags und Links