OpenGL: Modelle erzeugen und in OpenGL laden?

3D-Visualisierung mit der Open Graphics Library (OpenGL)
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Xin » Fr Jul 02, 2010 4:07 pm

Mal eine Frage, die was spezieller ist....
  • Ich würde gerne ein 3D-Objekt in OpenGL visualisieren, aber halt nicht programmatisch zeichnen, sondern ein Modell laden?
    Rein grundsätzlich - womit lassen sich solche Modelle machen und wie werden diese Modelle geladen?
  • Ich würde gerne ein solches Modell auch programmatisch bewegen, wie z.B. Räder am Auto, Arme an einer Figur.
    Gibt es Modelle, die derartiges abbilden?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3112
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von cloidnerux » Fr Jul 02, 2010 4:28 pm

Dieser Thread
oder sowas: http://www.codeworx.org/opengl_tut31.php, dafür habe ich auch eine Funktionierende Klasse, die aber aus Einfachheit auf Texturen verzichtet.
Bewegen kannst du, indem du einfach per glTranslate, glRotate oder glScale das ganze Objekt beim Zeichnen verschiebst.
Erstellen kannst du die Modelle mit Blender(Kostenlos), Maya(Als Schülerversion Kostenlos) oder alles was sich 3D-Modeller schimpft.
Wenn du Modelle nur ein ein unbrauchbares Format speichern kannst mit deinem Programm, dann gibt es sicherlich iwo auch noch einen Konverter, also nicht verzweifeln.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Xin » Fr Jul 02, 2010 4:43 pm

cloidnerux hat geschrieben:oder sowas: http://www.codeworx.org/opengl_tut31.php, dafür habe ich auch eine Funktionierende Klasse, die aber aus Einfachheit auf Texturen verzichtet.
Schon witzig, wie klein die Internet-Welt ist, da bin ich auch schon gelandet.
Ansonsten habe ich was zum Thema Matrix-Stacks gefunden, aber soweit bin ich noch nicht.

Meine OpenGL-Schulung findet jedenfalls jetzt definitiv endlich mal statt... Schnauze voll - Portmonee leer: 1676,08 Euro für eine Woche Crashkurs. >:-]
Ich bereite mich vor, um für das Geld die richtigen Fragen stellen zu können...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Kerli » Fr Jul 02, 2010 4:46 pm

Ich habe dafür am Anfang einen eigenen Loader geschrieben der Wavefront .obj Dateien laden kann und bin jetzt aber auf Assimp umgestiegen, nachdem mein Loader noch nicht so ganz komplett war und ich mich anderen Dingen widmen wollte :)
Bewegen und Animieren kannst du wie cloidnerux bereits erwähnt hat mit glTranslate/glRotate/glScale bzw. wenn es hierarchisch sein soll könnte auch glPush/PopMatrix ganz nützlich sein. Für fortgeschrittenere Animationen kann man dann natürlich auch mit Skeletal/Bone-Animationen arbeiten, die eh einige Formate unterstützen. Zum darstellen wird man dann wahrscheinlich über Shader gehen...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Xin » Fr Jul 02, 2010 4:52 pm

Kerli hat geschrieben:Ich habe dafür am Anfang einen eigenen Loader geschrieben der Wavefront .obj Dateien laden kann und bin jetzt aber auf Assimp umgestiegen, nachdem mein Loader noch nicht so ganz komplett war und ich mich anderen Dingen widmen wollte :)
Assimp klingt sehr gut - ich sehe, da sind Dateiformate möglich, die auch Blender exportieren kann.
Kerli hat geschrieben:Bewegen und Animieren kannst du wie cloidnerux bereits erwähnt hat mit glTranslate/glRotate/glScale bzw. wenn es hierarchisch sein soll könnte auch glPush/PopMatrix ganz nützlich sein. Für fortgeschrittenere Animationen kann man dann natürlich auch mit Skeletal/Bone-Animationen arbeiten, die eh einige Formate unterstützen. Zum darstellen wird man dann wahrscheinlich über Shader gehen...
Die Skeletal/Bone-Geschichte interessiert mich. ^^

Translate/Rotate/Scale bin ich dabei, Push/PopMatrix kann ich mir vorstellen, bei Skeletal/Bone gehe ich davon aus, zu wissen, was gemeint ist - wie wird es grob beschrieben umgesetzt?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3112
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von cloidnerux » Fr Jul 02, 2010 4:59 pm

Translate/Rotate/Scale bin ich dabei, Push/PopMatrix kann ich mir vorstellen, bei Skeletal/Bone gehe ich davon aus, zu wissen, was gemeint ist - wie wird es grob beschrieben umgesetzt?
Du hast ein "Skelett" in einem Objekt. Jedem "Knochen", besser gesagt den Endpunkten, sind dann einzelne Vertices(Knotenpunkte der Gitterstruktur zugewiesen).
Jetzt bewegst du nur einen "Knochen" und damit auch die mit ihm Verbundenen Vertices. Diese Bleiben immer in Relation zum Knochen/Skelett, sodass es etwas flüssiger und natürlicher aussieht.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Xin » Fr Jul 02, 2010 5:05 pm

cloidnerux hat geschrieben:
Translate/Rotate/Scale bin ich dabei, Push/PopMatrix kann ich mir vorstellen, bei Skeletal/Bone gehe ich davon aus, zu wissen, was gemeint ist - wie wird es grob beschrieben umgesetzt?
Du hast ein "Skelett" in einem Objekt. Jedem "Knochen", besser gesagt den Endpunkten, sind dann einzelne Vertices(Knotenpunkte der Gitterstruktur zugewiesen).
Jetzt bewegst du nur einen "Knochen" und damit auch die mit ihm Verbundenen Vertices. Diese Bleiben immer in Relation zum Knochen/Skelett, sodass es etwas flüssiger und natürlicher aussieht.
Soweit so klar, wie wird sowas grob beschrieben? Sind Interpolationen möglich, so dass ein Punkt in Abhängigkeit von mehr als einem "Knochen" berechnet werden kann?

Beispielsweise, so dass sich das Gewebe an einem Arm nicht ineinanderschiebt, wenn der Arm gebeugt wird?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Kerli » Fr Jul 02, 2010 10:18 pm

Xin hat geschrieben:Soweit so klar, wie wird sowas grob beschrieben? Sind Interpolationen möglich, so dass ein Punkt in Abhängigkeit von mehr als einem "Knochen" berechnet werden kann?
Man hat ein Set von hierarchischen Knochen und jede Menge Vertizes, die zusätzlich zu den normalen Informationen wie Position jetzt auch Gewichte für einzelne Knochen halten. Man kann zb sagen es sollen maximal drei Knochen Einfluss auf einen einzelnen Vertex haben, dann braucht jeder Vertex erstens drei Werte die beschreiben welche Knochen sie beeinflussen und noch drei Gewichte die angeben wie stark er von jedem der drei Knochen beeinflusst wird.

Zum Anzeigen berechnet man sich dann die Transformationsmatrizen aller Knochen und Interpoliert diese für jeden Vertex je nach seinen Gewichten. Mit der resultierenden Matrix kann man dann den Vertex transformieren und erhält so dessen Position. Vor allem die Interpolation für jeden Vertex wird gerne als Shader implementiert, da sie sonst einfach zu aufwenig wird :)

Für weitere Informationen einfach einmal nach Rigging, Skinning, Skeletal/Bone Animation etc. suchen...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Xin » So Jul 04, 2010 10:59 am

Kerli hat geschrieben:Man hat ein Set von hierarchischen Knochen und jede Menge Vertizes, die zusätzlich zu den normalen Informationen wie Position jetzt auch Gewichte für einzelne Knochen halten. Man kann zb sagen es sollen maximal drei Knochen Einfluss auf einen einzelnen Vertex haben, dann braucht jeder Vertex erstens drei Werte die beschreiben welche Knochen sie beeinflussen und noch drei Gewichte die angeben wie stark er von jedem der drei Knochen beeinflusst wird.
Ist die Anzahl der beeinflussenden Knochen beliebig oder gibt es eine Grenze?

Woher hast Du hier eigentlich Dein Wissen?
Kerli hat geschrieben:Zum Anzeigen berechnet man sich dann die Transformationsmatrizen aller Knochen und Interpoliert diese für jeden Vertex je nach seinen Gewichten. Mit der resultierenden Matrix kann man dann den Vertex transformieren und erhält so dessen Position. Vor allem die Interpolation für jeden Vertex wird gerne als Shader implementiert, da sie sonst einfach zu aufwenig wird :)
Ah... das geht dann in Richtung der Matrix-Stacks?
Kerli hat geschrieben:Für weitere Informationen einfach einmal nach Rigging, Skinning, Skeletal/Bone Animation etc. suchen...
Hmm... mein Kurs enthält keine Shader, den werde ich dann entweder später mal besuchen, wenn ich mich in den vorherigen Kapiteln von OpenGL sicher fühle.

Aber da habe ich ja schonmal einen ersten Überblick, wohin ich lernen muss.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: OpenGL: Modelle erzeugen und in OpenGL laden?

Beitrag von Kerli » So Jul 04, 2010 9:46 pm

Xin hat geschrieben:Ist die Anzahl der beeinflussenden Knochen beliebig oder gibt es eine Grenze?
Theoretisch hast du keine Grenze. Man muss halt abwägen wie viel Rechenleistung und Speicher man hat und wie schnell es berechnet werden sollte :)
Xin hat geschrieben:Woher hast Du hier eigentlich Dein Wissen?
Ich hab ein paar Bücher zur Spieleprogrammierung wo das teilweise erwähnt wird, und sonst hab ich auch einiges über Tutorials bzw. auch Blender+Tutorials gelernt. Das eine oder andere ist an der Uni wohl auch schon vorgekommen, aber das wird erst im Master dann stärker werden wo man sich spezialisieren kann...
Xin hat geschrieben:Ah... das geht dann in Richtung der Matrix-Stacks?
Ist durchaus möglich. Zumindest wenn die Knochen relativ zueinander transformiert werden.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten