Effektive Implementierung für Darstellung großer Datenmengen in Jogl

Beowölfchen

Mitglied
Hallo,

ich möchte mit Jogl ein Höhenprofil darstellen, dass in jeder Achsenrichtung maximal 400 Einheiten einnimmt. Zudem sollen 4 unterschiedliche Höhenbereiche mit unterschiedlichen Texturfarben gekennzeichnent werden.

Mein Ansatz ist folgender:

Ich durchlaufe die x-z-Ebene und baue bei jeder Koordinate einen GL-Cube bis zu der Grenze des Höhenbereiches oder der Höhe, die ich angeben will. Wenn der Turm sich also über mehrere Höhenbereiche ersteckt, dann baue ich erst einen für den untersten Bereich, dann für den Nächsthöheren mit der Farbe für den Bereich usw.

Das Problem ist, dass diese Erstellung sehr viel Rechenzeit in Anspruch nimmt und ich dann beim Start der Applikation und bei Bewegung der Perspektive sehr lange warten muss, bis das Bildneu aufgebaut ist.

ich habe schon versucht zu optimieren, indem ich die nicht sichtbaren GL_Cubes gar nicht zeichne, aber das hat nicht viel geändert...

Ich hab im Netz mir schon so einige Beispiele für Landschaftsprofile angeschaut. Es geht hier nicht um die sanften Übergänge in eine hügeligen Landschaft, sondern eher und schematische Darstellungen. Dir Grenzen der Höhenbereiche mussen also scharf sein und ebenso der Übergang zwischen den benachbarten Würfeln.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Sooo spezifisch kann ich da nicht werden, aber...: Die vorgefertigten Cubes von GLUT oder diese quadrics zu verwenden ist definitiv langsam. Alternativen wären - je nach GL-Version - erstmal "Display Lists", aber besser (vieeel effizienter, aber auch schwieriger zu verwenden) Vertex Buffer Objects bzw Vertex Array Objects.

Fancy hat da bestimmt ein passendes Beispiel für dich :D
 

Beowölfchen

Mitglied
Alternativen wären - je nach GL-Version - erstmal "Display Lists", aber besser (vieeel effizienter, aber auch schwieriger zu verwenden) Vertex Buffer Objects bzw Vertex Array Objects.

Wenn dann will ich das auch richtig machen! Also wäre ich für Vertex Buffer Objects...
Danke für den Hinweis Marco13! (Mit Stichwörtern googlet es sich einfacher :D)

Wenn Fancy mir ein Beispiel geben könnte, wäre es bestimmt nicht schlecht.

Vielleicht finde ich auch Zeit aus meinen Erkenntnissen ein Tutorial zu machen. Ich finde Jogl an sich sehr interessant, weil man da Ruckzuck nen Applet draus machen kann und dann braucht der Client nur noch JRE und - schwubs - da hat er ne 3D-Ansicht über den Browser (eigentlich Java-Webstart) gestartet.
 
G

Guest2

Gast
Moin,

die vorgefertigten geometrischen Körper aus GLU und GLUT sind nie eine gute Idee. Die sind nicht nur langsam, sondern in den meisten Fällen auch unvollständig. Entweder sind die Normal- oder die Texturkoordinaten nicht definiert. Imho der einzige sinnvolle Körper davon ist glutSolidTeapot, da sind dann sowohl die Normal- als auch die Texturkoordinaten definiert. Allerdings ist dafür da die Orientierung der Dreiecke falsch (im Uhrzeigersinn statt dagegen).

Grundsätzlich ist es also eine gute Idee alles selber aus Dreiecken zusammen zu bauen. Das Stichwort um große Mengen Dreiecke in einem "rutsch" darzustellen hat Marco ja bereits erwähnt, Vertex Buffer Object (VBO). Eine etwas einfachere Variante davon wäre das Vertex Array (VA), dabei wird vom Prinzip her die selbe Datenstruktur wie beim VBO verwendet, jedoch werden die Geometriedaten nicht im Speicher der Grafikkarte sondern im Hauptspeicher untergebracht. Die beiden Beispiele die Marco verlinkt hat nutzen auch VAs. Man sieht das z.B. am letzen Parameter von glVertexPointer, beim VA ist dort ein Buffer, beim VBO ein int.

Bei beiden gibt es dann nochmal die Unterscheidung ob die Dreiecke ohne Index im Buffer liegen (x, y, z, x, y, z, x, y, z, x, y, z, …) oder mit Index (x1, y1, z1, x2, y2, z2, …) und einen Buffer der Indices (1, 2, 3, 1, 3, 4, …). Mit Indices verbraucht dabei weniger Speicher und ist schneller, dafür kann der Aufbau der Datenstruktur fummeliger sein. Ohne Indices wäre das dann glDrawArrays, bzw. mit Indices glDrawElements.

Ein Vertex Array Object (VAO) ist wieder etwas anderes und liegt eine "Ebene" drüber. Dies nimmt normalerweise ein VBO auf und speichert dessen Zustand, dadurch sind später beim darstellen weniger OpenGL Aufrufe notwendig.

Die Möglichkeiten sind also vielfältig. ;)

Die Beispiele die Du im Netz zu Höhenprofilen gefunden hast, basierten wahrscheinlich auf einem festen XZ Gitter bei dem lediglich der Y Wert aus dem eigentlichen Höhenprofiel kam. Wenn Du bei Dir jetzt senkrechte "Wände" haben möchtest, bedeutet das im Wesentlichen, dass auf einem XZ Punkt mehrere Vertices senkrecht übereinander liegen können. Das erstellen des Gitters könnte deshalb etwas fummelig werden. Allerdings muss dies nur einmal beim Start der Anwendung berechnet werden, anschließend sollte die Geometrie als Konstante im Speicher der Grafikkarte liegen.

Sollte das Höhenprofiel in sich dynamisch sein, würde sich der Geometrie Shader anbieten. Der könnte dann relativ elegant die zusätzlich notwendigen "Wände" an den Seiten der "Hügel" einfügen, so dass man wieder mit einem einfachen XZ Gitter arbeiten könnte (es währe wieder nur ein Vertex pro XZ Punkt notwendig). (Kann man natürlich auch so machen wenn das Höhenprofil statisch ist :D)
Allerdings muss dazu die Grafikkarte des Zielsystems Geometrie Shader unterstützen.

Gruß,
Fancy
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Effektive args[] Behandlung Java Basics - Anfänger-Themen 16
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
I GenericQueue / Implementierung als Ringspeicher Java Basics - Anfänger-Themen 4
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
S SkipList Implementierung Java Basics - Anfänger-Themen 1
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
I Erste Schritte Implementierung der API Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
M falsche implementierung von currentTimeMillis() ? Java Basics - Anfänger-Themen 14
G Implementierung eines Kontos Java Basics - Anfänger-Themen 11
M Quicksort implementierung Java Basics - Anfänger-Themen 23
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
K Kleiner Fehler bei Methoden Implementierung Java Basics - Anfänger-Themen 6
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
S OOP Implementierung Komposition, Aggregation, Assoziation und Generalisierung Java Basics - Anfänger-Themen 2
C Klassenhirarchien zur Implementierung von Fahrzegen Java Basics - Anfänger-Themen 26
BinaryLogic Datentypen Statistik Interface - untersch. Implementierung Java Basics - Anfänger-Themen 5
E Performante Implementierung eines "Hintergrundprogramms" Java Basics - Anfänger-Themen 10
S Saubere Implementierung Java Basics - Anfänger-Themen 2
K Dijkstra implementierung 2.0 Java Basics - Anfänger-Themen 19
K dijskral implementierung Java Basics - Anfänger-Themen 14
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
B OOP Problem bei Implementierung von Interface Java Basics - Anfänger-Themen 6
J HashSet Implementierung Java Basics - Anfänger-Themen 16
R NullPointerException in Queue-Implementierung Java Basics - Anfänger-Themen 11
X Frage zur Implementierung von equals() Java Basics - Anfänger-Themen 2
D Datentypen Implementierung eines Binärbaumes Java Basics - Anfänger-Themen 7
B Implementierung Java Basics - Anfänger-Themen 2
N Implementierung Tic tac toc Java Basics - Anfänger-Themen 25
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
Y Implementierung einer Potenzturm Funktion Java Basics - Anfänger-Themen 4
S Implementierung gegen Interfaces / List, ArrayList, LinkedList Java Basics - Anfänger-Themen 11
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
U Implementierung Constructor Java Basics - Anfänger-Themen 7
T Problem mit Implementierung von einer HashMap aufgabe Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
I Zugriff auf Implementierung verhindern Java Basics - Anfänger-Themen 8
D Implementierung nach MVC Java Basics - Anfänger-Themen 6
B Theoretische Frage zum Programmbau (nun zur Implementierung) Java Basics - Anfänger-Themen 8
H Implementierung von Interfaces Java Basics - Anfänger-Themen 4
G Implementierung von Bäumen Java Basics - Anfänger-Themen 2
N Probleme mit paint() bei Implementierung in ein Panel Java Basics - Anfänger-Themen 4
B Wie funktioniert die implementierung von c code in Java? Java Basics - Anfänger-Themen 7
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben