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

Aktuelle Zeit: Mi Jul 16, 2025 02:58

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frustumculling
BeitragVerfasst: Di Mär 30, 2004 19:13 
Offline
DGL Member

Registriert: Sa Feb 28, 2004 15:36
Beiträge: 40
Hallo,

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?

Danke schon mal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 30, 2004 19:52 
Offline
DGL Member
Benutzeravatar

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.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 30, 2004 19:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: ?
BeitragVerfasst: Di Mär 30, 2004 20:01 
Offline
DGL Member

Registriert: Sa Feb 28, 2004 15:36
Beiträge: 40
Danke erstmal für die schnelle Antwort!

Leider habe ich das jetzt aber nicht ganz gerafft.
Wieso soll denn Frustumculling nur hinderlich bei Terrains sein?

Man steht doch dann irgendwo in der Landschaft und all das, was man nicht sieht, soll gar nicht erst gerendert werden, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 30, 2004 20:04 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 30, 2004 20:05 
Offline
DGL Member
Benutzeravatar

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.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: huii
BeitragVerfasst: Di Mär 30, 2004 20:14 
Offline
DGL Member

Registriert: Sa Feb 28, 2004 15:36
Beiträge: 40
Das ist erstmal ziemlich viel für mich.

So langsam glaube ich, ich hätte vielleicht doch ein anderes Projekt wählen sollen?!

Was wäre für einen noch nicht sehr erfahrenen OpenGLer ein angemessenes Projekt?

Ich kann:

-Delphi (wie ich meine ziemlich fortgeschritten) (ca. 3 1/2 Jahre mach ichs schon)
-OpenGL (Tut "Anfänger" komplett)
-Mathe Klasse 10 / 1 (<- erstes Halbjahr) (Bin Schüler)


Danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 30, 2004 20:52 
Offline
DGL Member
Benutzeravatar

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.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 30, 2004 21:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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ß.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


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


Wer ist online?

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.

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