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

Aktuelle Zeit: Fr Jul 18, 2025 08:15

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Aug 13, 2008 12:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

ich hab mir gestern ne kleine Engine geschrieben, mit der ich Objekte laden kann. Und um diese Objekte dann zu Zeichnen benutz ich GL_TRIANGLES. Im einem Tutorial stand aber mal das man auf Performance-Gründen bei einem Viereck lieber GL_QUADS nehmen soll. Deshalb wollt ich ma fragen wie groß der Performance-Verlust ist und ob es sich vlt. lohnt irgendwie zu überprüfen, ob es ein Quad oder einene Triangle ist?

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 13, 2008 13:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Da Quads intern eh in Dreiecke unterteilt werden, kannst du ruhig nur Triangles verwenden.
Außerdem wird es für deine Engine leichter, wenn du dich nur um Triangles kümmern musst.
Das mit den Performance Gründen bei einem Viereck GL_QUADS zu verwenden, kann ich mir nur dadurch erklären,
dass bei GL_TRIANGLES mehr Vertices und evtl. Normalen etc. übertragen (an die GraKa gesendet) werden müssen.

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 13, 2008 13:33 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Solange du einen Indexbuffer verwendest dürfte der Unterschied recht klein sein. Ich nehme Quads hauptsächlich für Billboards, Partikelsysteme etc. Für einen Mesh würde ich immer indexbuffer+vertexbuffer+GL_TRIANGLES nehmen.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 13, 2008 14:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Benutzt du überhaupt so etwas wie ein VertexBufferObject? Denn das was the-winner gesagt hatte bezieht sich darauf.

Im imediate Modus liegt der Unterschied zwischen quad und triangle aber dort, da du bei einem Quad 4 Vertices übertragen musst und bei 2 Dreiecken 6 übertragen musst. Und bei den 6 sind 2 vermutlich sogar doppelt. Und dann sollte man das ganze mal auf CPU Ebene betrachten. Bei glVertex3f hast du 3 Single Werte die übertragen werden müssen. Diese müssen auf den Stack gepackt werden und von OpenGL wieder vom Stack gelesen werden. Wenn du 50% Aufrufe mehr hast dauert das schlicht länger. Dafür gibt es auch glVertex3fv. Dort wird nur ein Pointer auf ein "array[0..2] of single" übergeben. Das spart Zeit bei der Übergabe. Aber auch nur, wenn du das Array nicht jedes mal erst zusammenbauen musst.

Bei einem VBO hingegen fällt noch ein anderer Ansatz mit rein. Du hast einen Buffer wo deine Vertices abgelegt sind und einen mit Indizes. Die geben dann an in welcher Reihenfolge die Vertices benutzt werden sollen. Grafikkarte haben intern wohl einen kleinen Cache für die letzten Vertices. Wenn du jetzt also mit einem VBO (inklusive index) arbeitest und den vertex2 3x benötigst, dann kann es sein, dass der noch in dem Cache ist und somit die GPU nicht noch einmal auf Speicher zugreifen muss. Der Cache ist allerdings nicht so wirklich groß. Glaube nur so was um die letzten 20 Vertices.

Aber um mein ganzes geschriebenes etwas überflüssig zu machen. Wenn du reichlich Vertices hast, dann kommst du um ein VBO sowieso kaum umher und da denke ich macht es kaum einen Unterschied (das weiß ich aber nicht 100%ig). Aber selbst im imediate mode. Wenn du nur so ein paar hundert Flächen hast, dann spielt das vermutlich keine wirklich ausschlaggebende Rolle. Ich denke da werden dann andere Stellen weit mehr bremsen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 13, 2008 15:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Ah, danke für die Antworten.
Ich hab die Triangles und Vertecs ja sowieso in im Speicher abgelegt, jetzt muss ich bloß mien record zum array umbauen, dann kann ich glech das array übergeben. Sowas wie Frame Buffer Objekte hab ich noch nich eingebaut. Erstma alles nur so...zum Test.

MfG Bergmann.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.007s | 16 Queries | GZIP : On ]