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

Aktuelle Zeit: So Jul 13, 2025 14:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: VertexArray vs DisplayList
BeitragVerfasst: Mi Dez 04, 2002 17:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich höre immer recht viel von VertexArrays.. und das sie im grundegenommen viel besser seien als ne DisplayList...
deswegen wollte ich mal fragen, ist nen VertexArray einfach nur nen Array wo alle Vertices drin sind??

Sowas ist doch, wenn z.B. das Object aus 100.000 Vertices besteht nen riesen speicher bedarf wofür man dann irgendwas um die 512mb Ram bräuchte..

Würd mich freuen wenn mir mal wer erklärt was nen VertexArray ist.

Au'revoir,
Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 04, 2002 19:26 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
*hust* So große Modelle würde ich momentan nicht über ne Render-Que heizen ;D VertexArrays sind nicht Arrays mit Punkten drinne... und doch sind es, aber nicht in dem Sinne, wie Du es Dir vorstellst. Es handelt sich dabei um einen besonderen Punkt in der Pipeline an dem Du IMAO (kann sein, dass ich falsch liegen, alles hören sagen...) direkt auf dem AGB-Bus die Daten für die Vertizen speichern kannst. Du umgehst damit dann den Umweg über RAM etc, und speist es direkt ein. Klar, dass dies schneller geht.

Ein kleines Sample findest Du auf folgender Seite:
<a href='http://dgl.quellcodes.de/script/do_url.php?url=5' target='_blank'>http://dgl.quellcodes.de/script/do_url.php?url=5</a> (DelphiGL@cfxweb)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 04, 2002 19:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
hi,

ok.. ich werd's mir mal anschauen, danke :)

Zitat:
*hust* So große Modelle würde ich momentan nicht über ne Render-Que heizen ;D


Mh.. wie denn sonst?? Ich meine, nen großes, umfangreiches spiel kommt doch in einem Level bestimmt mal auf mehr als 100.000 Vertices... oder?? (Selbst mit FrustumCulling denk ich mal)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 04, 2002 20:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

also ich hab mir jetzt den Quelltext mal angeguckt... nur, so ganz verstehen tu ich's nochnicht... zummindest nicht so, das ich es einfach nachmachne könnte :oops:

Kennt vieleicht wer nen kleines Tutorial dafür??

Au'revoir,
Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 08:45 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
@AGP-Bus: Soviel ich weis (kann mich auch täuschen) sind die Daten bei normalen Vertex-Arrays NICHT im AGP-Speicher. Wenn man Display-Listen verwendet, kann es sein dass die Daten im AGP-Speicher abgelegt werden. Ansonsten muss man auf die NVidia Erweiterungen zurückgreifen, um Vertex-Daten im AGP-Speicher abzulegen.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 09:30 
Zitat:
Mh.. wie denn sonst?? Ich meine, nen großes, umfangreiches spiel kommt doch in einem Level bestimmt mal auf mehr als 100.000 Vertices... oder?? (Selbst mit FrustumCulling denk ich mal)


Na ja. Bei solch großen Datenmengen. kannst du sicher sein, dass ein Großteil der Grafikkarten keine gescheiten performanzen mehr liefern.
Wobei ein VertexArray auch nur dann richtig was bringt, wenn du es nicht permanent verändern muss (z.b: Animationen).
Und das VertexArray hat noch einen anderen Nachteil. Es zwingt die GraKa dazu alle Flächen darzustellen. Was sehr auf die Performance geht, wenn du nur max 10% von allem siehst. Was bei spielen ja so üblich ist.

Aber mit FrustumCulling kannst du die Anzahl schon mal einschränken. Eine andere möglichkeit ist zum Bleistift, dass du einfach weniger flächen machst. Bzw. Ähnliche beieinander liegende Flächen zusammen zufassen.
Es macht ja kaum Sinn eine gerade Fläche in 200-300 kleine Flächen aufzuteilen.


Nach oben
  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VertexArray vs DisplayList
BeitragVerfasst: Do Dez 05, 2002 11:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
...ich höre immer recht viel von VertexArrays.. und das sie im grundegenommen viel besser seien als ne DisplayList...

Wollt nur mal kurz anmerken, dass VertexArrays nicht schneller sind als DisplayListen!

VertexArrays unterscheiden sich von den DLs aber insofern, als das man durch die Pointerbasis damit auch dynamische Geometrie darstellen und beschleunigen kann.
Da eine Displaylist in der Regel kompiliert wird und deren nachträglichen Änderung und damit verbundene Neuompilierung je nach Karte auch mehrere Sekunden dauern kann sind DLs nur für statische Geometrie geeignet!

Die Tatsache, das die VAs also ihre Daten in Form eines Pointers bekommen, zieht eine Ablagerung der Daten im langsamen Hauptspeicher mit sich, im Gegensatz zu den DLs, die kompiliert in den Graka-Speicher kommen (bzw. über AGP in den Hauptspeicher, wenn kein Grakaspeicher mehr vorhanden ist).
Wie hier schon gesagt, können die VertexDaten für ein VA auch in den AGP-Speicher gelegt werden...das geht dann über nVidias VAR und FENCE, ist deshalb aber auch mit Vorsicht zu geniessen,da es ja kartenspezifisch ist!
Weiterer Nachteil der VAs : Die Vertexdaten müssen die komplette Programmdauer über im Speicher bleiben...das ist bei einer DisplayListe nicht der Fall...wurde die erstmal kompiliert, können die Vertexdaten aus dem Hauptspeicher verschwinden!

Fazit : Statische Geometrie -> DisplayListen (geringer Speicherverbrauch)
Dynamische Geometrie -> VertexArray (hoher Speicherverbrauch)

P.S. : Wenn ich heute noch Zeit bekommen, dann schreib ich mal ne kleine App, die Geometrie einmal mti VAs rendert, und einmal als DL...damit kann man sich dann auch mal von der Geschwindigkeit dieser beiden Optimierungen ein Bild machen!

Edit : Hab grad mal ein kleines Programm geschrieben, in dem ein Terrain als VA oder DL darstellbar ist..wie auf den Screenshots zu sehen, ist die DisplayListe ein gutes Stück schneller (Rechner : XP1800+, GF4-Ti4400).
Hier der DL-Link : <a href='http://www.delphigl.de/vavsdl.zip' target='_blank'>http://www.delphigl.de/vavsdl.zip</a>
(Hinweis : Der Graka-Treiber muss natürlich VertexArrays unterstützen.Ausserdem muss er die WGL_EXT_Swap_Control-Extension utnerstützen, da das Programm den VSync abstellt um das Ergebnis nicht zu verfälschen).
Im Zip befindet sich sowohl das Kompilat als auch der Quellcode.
Umschalten zwischen VA und DL : Taste "1"

Hier noch die zwei Screenshots :

VertexArray:
Bild

DisplayListe:
Bild

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ok... also ne DisplayList bei statischen dingen klingt logisch...
Dann hab ich aber ne andere frage :)

Ich hab mich mal nen wenig mit Octrees etc beschäfftigt... soll man da dann für jeden abschnitt ne DisplayList erstellen??

Ich meine sobald man nen Octree verwendet, fällt die DisplayList doch weg, oder???

Au'revoir,
Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 18:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Ich hab mich mal nen wenig mit Octrees etc beschäfftigt... soll man da dann für jeden abschnitt ne DisplayList erstellen??

Ich meine sobald man nen Octree verwendet, fällt die DisplayList doch weg, oder???

Nope...wie du selbst schon festgestellt hast, kann man jeden Abschnitt der Octree in eine DL kompilieren.
Dies macht jedoch dann Probleme. wenn es wirklich viele Abschnitte sind -> Hoher Grakapeicherbedarf, oder es sehr kleine Abschnitte sind -> hoher Overhead, kein Geschwindigkeitsvorteil mehr, sondern eher sogar das Gegenteil.
Ansonsten steht einer Kombination von Octrees und DLs nix im Wege!

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 19:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
mhh.... und was ist da jetzt die beste variante???
Ich meine wenn ich Octrees benutze möchte ich ja auch Collision-Detection etc machen... also muß ich ja die Koordinaten von den ganzen Vertices sowieso irgendwo speichern... :)

Vorallem, WO speichert man die ganzen Koordinaten??? Alle in nem Array o.ä?? Brauch das dann nich wahnsinnig viel Arbeitsspeicher???

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 19:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Vorallem, WO speichert man die ganzen Koordinaten??? Alle in nem Array o.ä?? Brauch das dann nich wahnsinnig viel Arbeitsspeicher???

Ja.Die Daten müssen dann in ein Array.Der Speicherverbrauch hält sich aber stark in Grenzen!
Ein kleines Rechenbeispiel : Ein Objekt mit 100.000 Vertices hat 300.000 Koordinaten (x,y,z), Datentyp Single (4 Byte) und 200.000 Texturenkoordinaten (s,t), auch Single.

Speicherverbrauch :
> 300.000*4Byte + 200.000*4Byte
= 1.200.000 Byte + 800.00 Byte
= 2.000.000 Byte
= 1,9 MByte Speicherbedarf

Den Hauptspeicher bekommt man also net so schnell voll.Wie bekannt, sollte man ja nicht wild mit Polygonen um sich werfen, da die Graka ja auch ihre Grenzen hat!
Die Spielermodelle in UT2k3 haben z.B. "nur" 3.000-5.000 Polygone...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 19:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

ok.. danke :)

Eine frage hab ich jetzt aber noch... oder besser, 2.

1. Ich hab dein beispiel mal angeguckt.. hat bei mir mit beiden varianten ca. 500 FPS (GeForce2 Pro nur..) ABER... wenn ich jetzt z.B. nen programm von mir angucke und da wirklich NUR Schwarzen bildschirm mache wo FPS angezeigt werden... bleibt es ständig so um die 110FPS... gibt es irgendwas wichtiges was ich vieleicht vergessen hab???
(Oder wieviele Frames hast du denn bei meim' Spiel -> <a href='http://www.animes.de/Snake.exe' target='_blank'>http://www.animes.de/Snake.exe</a> Ich hab immer so ca. 110FPS)

2. Du benutzt die OpenGL12.pas.. ich immer OpenGL.pas.. wo sind'n da die unterschiede?? bzw.. ist es sehr viel sinnvoller OpenGL12 statt OpenGL zu benutzen??

Au'revoir,
Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 21:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 27, 2002 16:29
Beiträge: 77
Wohnort: Düsseldorf
Ich vermute mal, das du das VSYNC an hast.
Wenn das aktiviert ist, die die FPS immer gleich der Wiederholungsrate des Bildschirms.

_________________
Probleme sind zum Lösen da


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 05, 2002 21:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Na ja, aber bei dem Programm von Son of Satan hab ich ja 500 FPS :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VertexArray vs DisplayList
BeitragVerfasst: Fr Dez 06, 2002 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 27, 2002 16:29
Beiträge: 77
Wohnort: Düsseldorf
Zitat:
da das Programm den VSync abstellt um das Ergebnis nicht zu verfälschen


Der stellt den VSync ja auch ab

_________________
Probleme sind zum Lösen da


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite 1, 2  Nächste
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 | 15 Queries | GZIP : On ]