ich beschäftige mich seit kurzem mit Delphi und OpenGL und in diesem Zusammenhang benutze ich auch glscene.
Mein Anliegen:
Ich habe eine Plane der Größe 100x100 und möchte darauf jetzt so ca. 200000 Objekte rendern.
Diese Objekte können z.B. einfach nur Sprites sein.
Ich kenne die Position der Objekte und es gibt insgesamt nur 12 Typen (Grafiken) die auftreten können, d.h. es wiederholt sich relativ viel.
Erzeuge ich z.B. Proxyobjects, bricht die Performance relativ schnell ein (ab 10000 wird's richtig langsam).
Sind Imposter dafür am besten geeignet???
Ich habe ein Tutorial zu "Imposter" gefunden bekomme dies aber für mein Problem nicht zum Laufen.
Meine Frage: Gibt es ein gutes Tutorial zu diesen Impostern, oder gibt es überhaupt eine sinnvolle Lösung soviele Objekte darzustellen?
Falls immer nur wenige Objekte die Position wechseln, ist es sinnvoll sie alle in einem Vertex Buffer zu speichern und nur die geänderten Positionen zu aktualsieren.
Okay, ersteinmal danke für die schnelle Antwort.
Ich versuche jetzt nochmal das Problem ein bischen besser zu beschreiben.
Ich habe bsw. eine Kugel und Würfel. Ich habe jetzt eine große Fläche auf der ich viele "Kopien" dieser beiden Objekte verteilen möchte.
Die Fläche ist aber 100x100 und die Objekte haben dann eine Breite und Höhe von 0.1, so dass theoretisch 1000000 Mio Objekte Platz finden würden,
es werden aber nur ca. 200000 benötigt.
weil die Speicheranforderungen relativ lahm sind. Probier mal FastMM4 aus. Außerdem sind deine Objekte echt 3D oder reichen Billboards? Weil 200k Objekte ist für Echtzeit eigentlich zu viel.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja. Die Schleife ist langsam weil der Delphi SpeicherManager dabei total überfordert ist. Eine Alternative wäre da der erwähnte Speichermanager FastMM4.
Aber ich denke du wirst auch noch ein anderes Problem haben. Und zwar glScene selbst! Ich sage das nicht nur weil ich dagegen wettern möchte sondern auch weil ich zu meiner Anfangszeit auch mit glScene gearbeitet habe und dort habe ich festgestellt, dass die Klassenstruktur dem Ganzen das Genick bricht. Ich liebe Objekt Orientierung aber in diesem Falle ist sie Fatal.
Einfache Erklärung dafür. Jeder Würfel/Kugel/Fläche ist ein Objekt und jedes Objekt hat eine ganze Reihe an Einstellungen. Farbe, Textur, Vorderseite, Rückseite etc. Und wenn ein solches Objekt gezeichnet wird dann werden alle diese Einstellungen in OpenGL gesetzt. Und das ist gar nicht mal wenig. Oder anders. Wenn du "nur" 20000 mal ein und das selbe Objekt zeichnen möchtest genügt es dann nicht nur alle Einstellungen ein mal zu tätigen? Genau das macht glScene aber eben nicht. Ich weiß nicht ob er das mittlerweile besser kann aber ich denke eher nicht.
Aber auch wenn glScene das besser macht sind 200.000 Billboard doch schon ein ganz gehöriges Stück arbeit. Wenn man diese in einer Schleife rendert. Du hast dort viel zu viele OpenGL Aufrufe bzw irgendwelche Sachen die die CPU machen muss. Besser wären bei fixen Strukturen entweder Displaylisten oder bei dynamischen Strukturen Vertex Buffer Objects kurz VBOs. Damit erstellst du dir einen Bereich auf der Grafikkarte und lädst dort die Daten hoch.
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Raster mit 1000x1000 Objekten
=> wenn du alle gleichzeitig siehst ist jedes Objekt 1 Pixel groß
was wiederum bedeutet, dass eine Textur reichen würde.
Wenn nicht alle gleichzeitg sichtbar sind, dann empfiehlt sich das was PhoenixGL vorgeschlagen hat (namentlich Quadtree/Octree und Frustum Cullng).
Und glscene ist ja ein Scenengraph, oder? Es stellt sich hier zum einen die Frage ob du wirklich jedes Frame den Scenengraphen neu aufbauen musst oder ob sich da nicht eine etwas bessere Lösung finden liese (wiederum lass ich hier mal das Wort Quadtree fallen). Wenn sich mit diesem Scenengraphen keine bessere Lösung finden lässt (was ich bezweifle), dann könnte man ggf. darüber nachdenken ob man nicht einen Scenengraphen speziell für diese Aufgabe selbst macht oder aber einen anderen Scenengraphen verwendet der das kann.
Es wäre also noch interessant zu wissen, wie groß der Bereich ist den du auf einmal siehst bzw. wie ausgeprägt diverse Zoom-Funktionalität sein sollte. Und zum anderen wäre es noch nützlich zu wissen wie dynamisch deine Szene ist. Also verändern sich alle 200.000 Objekte jedes Frame (oder in anderen Intervallen) oder sind die Änderungen nur eher geringfügig (ein paar 100 oder 1000 Objekte je Frame ändern ihre Position).
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.