Ja ja, Bewegungsbahn ist ein merkwürdiger Begriff. Was ich meine ist folgendes.
Wenn ich in der Render Prozedur den Befehl
Code:
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
weglasse und ein Objekt - zum Beispiel einen Würfel - bewege, dann werden seine aktuelle Position und alle alten Positionen gezeichnet.
Im Prinzip möchte ich genau das, ich möchte die Bewegungsbahn eines Objektes sehen können, allerdings befinden sich noch viele andere objekte in meiner OpenGL - Welt, so dass ich nicht einfach den glClear Befehl weglassen kann. Zudem soll man sich in dem Programm bewegen können. Diese Bewegungen würden die Bewegungsbahn eines objektes ebenfalls verfälschen.
So wie ich das sehe, habe ich keine andere Möglichkeit als in einem Array die alten Positionen zu speichern und in einer Schleife in meiner Render Prozedur auszugeben. Was mache ich aber, wenn ich, sagen wir mal die Bewegungsbahnen von 100 Objekten über einen Zeitraum von vielleicht zwei bis drei Minuten ( mal Framerate) anzeigen will. Das Array würde wohl verdammt groß werden
Hat jemand von euch vielleicht eine Idee die mir weiter helfen könnte?
Zudem soll man sich in dem Programm bewegen können. Diese Bewegungen würden die Bewegungsbahn eines objektes ebenfalls verfälschen.
Da geht dann auch der Accumulation-Buffer nicht mehr. Da wird dir nichts anderes übrig bleiben, als das Array. Reichts denn nicht, wenn du nur jeden 5. Frame in dem Array verewigst? Oder jeden 20. und dann dazwischen interpolierst?
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Kommt drauf an was du genau machen willst. Wenn sich die Bewegungsvektoren (Richtung müsste reichen) nicht alzu oft ändern, dann reicht es vielleicht lediglich die Änderungen des Bewegunsvektors und einzelne Zwischenpositionen (Bei Änderung) zu speichern. Damit kann man dann alles eindeutig reproduzieren.
Oder du merkst dir nur einzelne KeyFrames und ermittelst dann dazwischen einen Weg. Das ist dann zwar nicht mehr so genau klappt aber evtl. bei der Bewegungsaufzeichnung eines menschlichen Spielers besser als erstere Variante (Keine Ahnung, was du genau damit machen willst ).
Wenn sich die Objekte völlig willkürlich bewegen wird’s allerdings schwierig, weil die gespeicherten Daten dann sehr groß werden.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich denke selbst bei einem Menschlichen Spieler könnte es klappen wenn du nur die Richtungsänderungen speicherst, und ansonsten immer nen Counter hochzählst für die Zeit die er in dem zustand bleibt. In nem Ego Shooter bewegt man sich meist gerade aus. Bei Runden Gängen ises blöd, aber sonst dürfte das gehen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ich möchte ein "N-Körper Problem" simulieren.
Dabei geht es darum, dass beliebig viele Körper mit bestimmten Massen sich alleine durch ihre gravitativen Anziehungskräfte in Bewegung versetzten. Es kommt also zu sehr vielen Interaktionen zwischen den Körpern, weil jeder jeden beeinträchtigt.
Nur jede x-te Position zu speichern wäre natürlich eine Möglichkeit, auch wenn mir das nicht wirklich gefällt.
wenn du immer die gleiche Position hast, könntest du evtl. das Objekt in eine Textur zeichnen, welche du dann im nächsten Frame als hintergrund für die Objektzeichnung verwendest (du zeichnest also das Objekt immer wieder in die selbe Textur, ohne diese zu löschen) und diese einblenden, das würde nur ein Problem mit dem Depthbuffer geben, da das objekt evtl. verdeckt würde, und dann frühere Zeitpunkte nicht sichtbar wären.
Das könnte man beheben, indem man mit 2 Texturen arbeitet, wobei du in eine die Depth-Werte (des Objektes) zeichnest und in die andere das Objekt mit seinen Farben. Beim Zeichnen in die Hauptszene müsstest du dann mittels Multitexturing beide Texturen übergeben und die Depthwerte vergleichen (dann musst du die Textur aber als letztes Zeichnen). Diese Methode benötigt aber vermutlich GLSL oder ähnliches und benötigt somit eine rel. neue Grafikkarte.
Achso und evtl. reicht eine Textur für die Farben nicht, da ich nicht weiß, ob man eine Textur in die man rendert in diesem Rendervorgang verwenden darf / kann, würde eher darauf tippen das das nciht geht, aber evtl. kannst du ja da das glclear weglassen.
Um die Methoden mal zu vergleichen :
Wenn sich die Kamera bewegt, wirst du um das Array nicht herumkommen, außerdem hat das Array den Vorteil das es sehr leicht umzusetzen ist. Der Nachteil des Array ist, wie du schon erkannt hast der enorme Speicherverbrauch bei langen Szenen. Außerdem steigt die Polygon anzahl pro Frame, was dazu führen wird,
dass die FPS-anzahl mit der Zeit abnimmt.
Im Gegensatz dazu hat die Methode mit den Texturen einen konstanten Speicherverbrauch, und die Polygonanzahl ist ebenfalls konstant. Ihre Nachteile sind die
schwerere Umsetzung und das du entweder auf den Depthbuffer verzichten musst oder aber rel. neue Hardware benötigst.
MfG
Tomok
_________________ Bevor du definierst, was etwas ist, versichere dich seiner Existenz.
Also erstmal vielen Dank für die Antworten und guten Ideen!
Ich denke, ich werde die Lösung mit dem Array verwirklichen. Wenn die Framerate zu sehr in den Keller geht, werde ich die Bewegungsbahnen nur optional einblenden lassen. Das hatte ich eigentlich eh vor.
Ich hab sowas in meiner Facharbeit gemacht. Da hab ichs so gelöst, dass ich aus all den vielen kleinen Partikeln Klumpen berechnet habe, und nur für die 10-20 Klumpen die Bewegung gezeichnet habe (mit Arrays).
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.