ich habe mich in letzter Zeit sehr mit OpenGL beschäftigt und bin letztendlich immer an den FPS gescheitert:
Mein aktuelles Projekt (da es von vielen empfohlen wird) ist das schnelle, optimierte einlesen von Heightmaps, die sogar dann noch ganz in Ordnung aussehen sollen.
Ich habe daraufhin festgestellt, dass man immer Probleme mit der Geschwindigkeit bekommt! Ich habe daraufhin mich auf die Suche nach verschiedenen Möglichkeiten umgeschaut: So wie es aussieht wäre der erste Schritt das Frustumculling, dass die größte Leistungsoptimierung bringt. Leider habe ich bis jetzt keine guten Tutorials gefunden.
Kennt ihr vielleicht eins?
Wer hat erfahrung mit Heightmaps?
Was könnte man noch verbessern?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zum Thema Frustum-Culling gibts auf meiner Seite (siehe Signatur) ein Tutorial, allerdings nicht im Zusammenhang mit Terrains. Bei Terrians lässt sich Frustum-Culling nämlich nur zusammen mit Octrees oder zumindest Terrain-Patches nutzen, da dass Cullen auf Vertex oder Dreiecks-Basis im Endeffekt sogar schlechter wäre als gar kein Culling. Also solltest du dich mal mit dem Thema Octrees beschäftigen, momentan die beste Methode zur Terraindarstellung, da diese auf aktueller Hardware das beste CPU/GPU-Verhältnis bietet.
Schau dir doch mal die Terraintutorials hier auf DelphiGL an - da ist sogar ein CLOD Algorithmus dabei.
Ich würde allerdings empfehlen, das Terrain in einem Quad- oder Octree zu organisieren, und dann die entsprechenden Nodes, so deren Bounding Box (oder Sphere oder was auch immer) im Frustum liegt per Brute Force (also ohne CLOD) zu rendern, da der Dreiecksdurchsatz auf modernen Grafikkarten ohnehin ziemlich hoch sein darf.
Wenn es klar ist dass ein bestimmter Node (wenn etwa alle Schnittpunkte auf einer Ebene liegen) mit wenigen Polygonen dargestellt werden kann, spricht natürlich nichts dagegen, dies auch zu tun - nur bei CPU lastigen, "intelligenten" Designs wäre ich eher vorsichtig, da, wie gesagt, die GraKa oftmals schneller rendern als die CPU rechnen kann.
Frustum Culling an sich ist nicht hinderlich. Nur man sollte das hierachisch machen. Also erstmal größere Bereiche und danach immer kleinere Blöcke testen, weil man sonst zu viele Tests machen muß und die Tests im Endeffekt langsamer als das Rendern wären. Dazu bietet sich ein Occtree oder Quadtree an. Moderne Grafikkarten können weit über 100.000.000 Dreiecken pro Sekunde zeichnen und da lohnt es sich nicht jedes einzeln zu testen, weil da der Test schon länger dauert.
Zuletzt geändert von LarsMiddendorf am Di Mär 30, 2004 20:06, insgesamt 2-mal geändert.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Deshalb sag ich ja Frustum-Culling UND Octree. Wenn du Frustum-Culling z.B. nur auf Dreiecksbasis machst, dann wird dein Rendering komplett CPU-lastig, weil der Frustumtest ja auf der CPU läuft. Du gehst daher hin, unterteilst mittels nem Octree dein Terrain in Terrainblöcke und testest nur die Boundingboxen der Terrainblöcke gegen das Frustum.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Terraindarstellung ist anfänglich zwar wirklich recht einfach, aber sobalds an das Optimieren geht, wirds für einen Anfänger ehrlich gesagt zu viel. Octrees und Co. sind wirklich recht fortgeschrittene Themen, also warte damit bis du mit OpenGL mehr Erfahrung hast.
Als Anfängerprojekt eignen sich in meinen Augen eher so simple Spiele wie z.B. Tetris, Pong, Invaders, usw, Da lernt man nämlich nicht nur OpenGL an sich, sondern auch wie man es in einem Spiel anwendet und mit anderen Techniken (Timebased-Movement, Eingabe, Sound) zusammenbringt.
Du must ja auch nicht gleich einen Octree programmieren. Eine andere Möglichkeit ist, ein quadratisches Terrain in (sagen wir mal) 16x16 Blöcke aufzuteilen, und die dann jeden Frame gegen das Frustum zu testen - das ist schön übersichtlich und immer noch performant genug (256 Bounding Boxes stecht jede CPU locker weg), um ansehnliche (und halbwegs große) Terrains damit darstellen zu können.
Von dort bis zum Quad/Octtree ist der Sprung dann auch nicht mehr gar so groß.
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.