Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 15:55

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Animationen
BeitragVerfasst: Do Jan 02, 2003 21:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

hab mal ne frage zu Animationen... z.B. ne Figur die läuft.

Ich hab die jetzt in nem 3D Programm Modelliert und Animiert, wie mach ich das jetzt in OpenGL..?

Bisher hab ich's so gemacht, das ich einfach 30 DisplayListen gemacht hab (halt für jede Haltung der Figur eine) und die dann immer nacheinander dargestellt hab... ist das so richtig, oder gibt's da bessere/andere methoden für???

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 02, 2002 18:06
Beiträge: 299
Wohnort: Dresden
Nicht ganzt, also für Dynamisches Zeugs gibts VertexArrays. Das mit den Displaylists ist ziemlich speicherfressend. Aber wie das jetzt OpenGL-mäßig genau mit den VA's funktioniert, da fragst du am besten jemand anderen. Ich würde einfach einen Face und einen VertexArray anlegen und nur den VertexArray bei jeder Bewegung verändern.
MfG HomerS

_________________
"Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Also wie schon bemerkt, ist es eine schlechte Idee, für jeden Animationsframe eines Objektes eigene Displaylisten zu erstellen.Das ist besonders bei großen Animationen für Objekte mit vielen Eckpunkten sehr Grafikkartenspeicherintensiv.

An deiner Stelle hat du zwei Möglichkeiten :

<span style='color:green'>Vordefiniertes (geeignetes) Modellformat : </span>
z.B. MD2 (Quake2, Animation auf Vertexbasis), MD3 (Quake3, höhere Polycounts als MD2, immernoch Animation auf Vertexbasis), SMD (Half-Life Format, AFAIK skelettales Animationssystem), oder MS3D (Milkshape3D, AFAIK auch skelettales Animationssystem).
<span style='color:blue'>Vorteile : Laderoutinen finden sich zuhauf im Netz und es gibt für diese Formate bereits sehr gute Editoren</span>

<span style='color:green'>Eigene Methode entwickeln und Animationen z.B. aus 3DS importieren : </span>
Wenn du deine Objekte z.B. mit dem 3D-Studio animieren willst, dann bastle dir ein eigenes Format.
Wenn du ein Objekt hast, dann leg seine Eckpunkte im Speicher ab (->VertexArray) und generiere parallel dazu ein Array, in dem für jeden Animationsframe die Translationen bzw. die Rotationen hinterlegt sind.
Da Vertex-Arrays dynamisch sind, kannst du dein Vertexarray ja mit Hilfe deiner eignene Rotations- und Translationsberechnungen in jedem Frame selbst verändern.
<span style='color:blue'>Vorteil : Weitaus geringerer Speicherverbrauch als alle Frames in Displaylisten abzulegen und voll kontrollierbar</span>

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 19:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Also wenn überhaupt nehm ich ne eigene Methode.. *g*

und du meinst also, nich für jedes Frame alle Vertex Koordinaten speichern, sondern nur die, welche sich ändern... ja?

Oder für jedes Frame einen komplette VertexArray???


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 19:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ein eigenes Vertexarray für jeden Frame wäre denkbar, und auch die einfachste Methode.
Alternativ (das was ich meine), wäre wie du sagst für jeden Frame ein dynamisches Array zu erstellen, in dem dann nur die Transformationen und Rotationen für die Eckpunkte liegen, die in diesem Frame auch verwendet werden.Das ist zwar etwas schwierigers zu realisieren, spart aber jede Menge speicher.
So würde ich das ungefähr machen :
Code:
  1.  
  2.  
  3. TVertexAnimation = record
  4.  
  5.  &nbsp; pVertex &nbsp; &nbsp; &nbsp; &nbsp;: ^TVertex; // Zeiger auf den zu verändernden Eckpunkt
  6.  
  7.  &nbsp; pRotation &nbsp; &nbsp; &nbsp;: TVertex; // Rotation für alle drei Achsen
  8.  
  9.  &nbsp; pTranslation &nbsp; : TVertex; // Translation für alle drei Achsen
  10.  
  11.  end;
  12.  
  13. TAnimation = record
  14.  
  15.  &nbsp;Frame : array of array of TVertexAnimation;
  16.  
  17.  end;
  18.  
  19.  


Hoffe du kennst dich ein wenig mit dynamischen Arrays aus...die sind nämlich sehr nützlich und äusserst praktisch (wie oben zu sehen, da auch nur Speicher für die veränderten Eckpunkte allokiert wird).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 19:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu :)

Mhh... Ja, dann mach ich das mal so *g*

Macht es eigentlich einen unterschied, ob in einer Variable ne "0" oder "12347" steht??? Ne, oder???

Weil, wenn ich z.B. ne SpielFigur so animieren will, hab ich ja nur von jedem Frame die WorldKoordinaten jeden einzelnen Vertèx', nich um wieviel es rotier... ok, vergiss es *G*

Klar hab ich die daten um wieviel das ding verschoben wurde etc...
Danke ~~ :)

*winkt*
Aya


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]