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

Aktuelle Zeit: Fr Jul 18, 2025 21:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Sep 08, 2006 08:16 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich diskutiere gerade mit Lyr (im Wiki) einige Grundannahmen, die hier auch immer wieder genannt werden, und wo Lyr der meinung ist, dass diese wohl so nicht korrekt sind.

Ein Hauptpunkt ist wohl das die Aussage "GL_POLYGON ist langsamer als alle anderen Methode" unbegründet sei.
Jetzt frage ich mich natürlich, woher kommen diese Aussagen? Kennt noch jemand die Quellen, oder ist das eine OGL-Legend?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 08, 2006 09:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Da ich die Disskussion im Wiki ein bisschen wirr finde schreibe ich mal nur hier.

Die Aussagen stammt unter anderen von offiziellen Dokumenten von OpenGL.org. (Wenn ich mich noch recht erinnere) Leider finde ich das Dokument nicht mehr. Wahrscheinlich liegt es daran, weil es so alt ist. Und da sind wir auch schon beim Hauptpunkt dieses Problems. Zu dieser Zeit waren Anwendungen mit 6000 Dreiecken schon richtig groß und jedes Dreieck was man weglassen konnte wurde weggelassen. Und da Polygone wohl geringfügig mehr Aufwand bedeuteten bzw die Grafikkarten/Treiber einfach noch nicht so weit ausgereift wahren wie heute hat es früher schon einen Unterschied gemacht. Zu diesem Zeitpunkt war es auch extrem wichtig wie häufig man glBegin und glEnd aufruft. Zum Beispiel bei einem Schachbrett. Heutzutage ist das kein so wirklich ausschlaggebender Punkt. Aber früher hat es einen doch nicht unerheblichen Geschwindigkeitsvorteil gebracht.

Speziell wenn man an solche Technologien wie VBOs denkt. Da ist es besonders wichtig wirklich alles am Stück zu rendern. Von daher liegt in diesem Fall wohl eher die Präferenz auf Dreiecken. Aber auch nur deswegen, weil man alles am Stück rendern kann und so keine Zeit "vergeudet".

Ich bin der Meinung, dass die Aussage "gl_polygon ist das langsamste primitiv" heutzutage immer noch stimmen könnte. Aber die Relationen sind anders geworden. Und damit dürfte der Unterschied (wenn existent) nicht mehr wahrnehmbar sein. Bzw durch den Einsatz von VBOs ist das sowieso nicht mehr vergleichbar.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 08, 2006 09:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

ich weiss zwar nicht ob das mit der Langsamkeit bzw. Schnelligkeit von GL_POLYGON zu tuen hat, aber es gibt da zwei entscheidende Nachteile gegenüber anderen Methoden, wie z.B. GL_TRIANGLES, GL_TRIANGLE_STRIP oder GL_TRIANGLE_FAN :

1. Es muß darauf geachtet werden, dass das Polygon konvex ist und sich nicht selbst überschneidet, ansonsten gibt es undefinierte Resultate.

2. Man kann nicht immer davon ausgehen, dass alle Punkte eines Polygons in einer Ebene liegen, im Gegensatz zu einem Dreieck. Um dies herauszufinden sind ziemlich komplizierte Berechnungen nötig.


Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 08, 2006 11:15 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Diese Einschränkungen sollten genauso auch für GL_TRIANGLE_FAN gelten. Wenn man sich das mal genau durchdenkt, dann ist GL_POLYGON = GL_TRIANGLE_FAN. Niemand zwingt einem ja, den 1. Vertex ins Zentrum des Fans zu legen. Und wenn der 1. auch mit am Rand liegt, ist das Verhalten gleich.

Was allerdings sein könnte ist, dass die Implementation von GL_POLYGON nicht so genau vorgegeben ist wie bei GL_TRIANGLE_FAN (Abarbeitung der Vertices). Deshalb könnte wohl u.u. (je nach Treiber) das Verhalten abweichen. Allerdings werden die Triberschreiber wohl aus effizienzgründen einfach bei GL_POLYGON den selben Code wie bei GL_TRIANGLE_FAN ausführen. Wieso auch nicht. Is ja nicht falsch...

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 09, 2006 05:39 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Ja, meine Kernaussage war, dass so gut wie auf allen Grafikkarten gilt GL_POLYGON = GL_TRIANGLE_FAN.

Aber ich muss dj3hut1 insofern recht geben, als dass GL_POLYGON nicht allzu genau definiert ist. Natürlich steht in den OGL-Specs nicht GL_POLYGON = GL_TRIANGLE_FAN, sonnst wär GL_POLYGON wohl kaum eingeführt worden. Und diese großzügige Auslegung in der Spezifikation ist es auch was GL_POLYGON etwas ... unangenehm macht. Als Programmierer legt man üblicherweise nun mal nicht allzu viel Wert auf schwammige Definitionen.

Mir geht es jedoch darum, dass sobald jemand GL_POLYGON verwendet häufig gesagt wird es sei langsam, was sagen wir mal bei >95% der Grafikkarten nicht stimmt. Der Grund GL_TRIANGLE_FAN statt GL_POLYGON zu verwendet sollte also nicht die Geschwindigkeit sondern die genauere Spezifikation von Triangle-Fan sein.

Eine Ausnahme wo GL_POLYGON Vorteile bringen kann ist (wie ja auch schon dj3hut1 angedeutet hat) wenn man ein konvexes Polygon besitzt welches mehr oder weniger auf einer Ebene liegt (zB 2D Anwendungen). Hier hat man in den wenigen Fällen wo GL_POLYGON anders behandelt wird als GL_TRIANGLE_FAN den Nachteil das GL_POLYGON wohl ein klein wenig langsamer ist, dafür erhält man jedoch auch schönere Resultate (bzgl. Farb- und Texturinterpolation) als bei GL_TRIANGLE_FAN.

Die Moral von der Geschichte: GL_POLYGON wurde nicht eingeführt um "Newbies" zu ärgern (was aber wohl leider ein Nebeneffekt davon war) sondern um Grafikkarten die Möglichkeit zu geben 2D Anwendungen schöner zu machen, was aber die meisten Grafikkarten nicht machen.

So sehe ich das zumindest ... ich habe mich zwar nicht allzu sehr damit beschäftigt, aber Aussagen wie: GL_POLYGON ist nur schlecht sonnst nichts, kann ich dennoch nicht gut heißen, denn wieso wäre wohl GL_POLYGON eingeführt worden wenn es zB gegenüber Triangle-Fan nur Nachteile bringen würde?

Das mit den 95% ist natürlich nur geschätzt aber da eine schöne Darstellung von GL_POLYGON wohl kaum allzu weit oben auf der Prioritätenliste von Grafikkarten steht denke ich dass das nicht so falsch sein wird. Wär aber mal interessant das zu testen.

@Lossy eX:
Ein (konvexes) GL_POLYGON ist nur eine andere Art mehrere Dreiecke anzugeben. Insofern hat das nichts mit der Anzahl der Dreiecke zu tun (wenn es gleich behandelt wird wie GL_TRIANGLE_FAN). Und GL_POLYGON stammt genau aus der Zeit wo 2D Anwendungen mit OGL noch etwas populärer waren und da macht es wie gesagt Sinn wenn GL_POLYGON etwas schöner ist als zB GL_TRIANGLE_FAN.
Also wenn überhaupt, dann wirkt sich GL_POLYGON auf die Füllrate aus, nicht auf die Vertex Pipeline.


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 » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]