Triangulation: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) K (→Wozu braucht man das?) |
(→Triangulation) |
||
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
== Wozu braucht man das? == | == Wozu braucht man das? == | ||
Dazu muss man auf die Besonderheiten der Grafikhardware eingehen. | Dazu muss man auf die Besonderheiten der Grafikhardware eingehen. | ||
− | Heutzutage(und nicht erst seit gestern) werden Grafikkarten auf die Darstellung von (texturierten) Dreiecken optimiert (Linien und Punkte | + | Heutzutage (und nicht erst seit gestern) werden Grafikkarten auf die Darstellung von (texturierten) Dreiecken optimiert (Linien und Punkte lasse ich mal außen vor). Das hat einen ganz einfachen Grund: <br> |
Jedes Polygon kann als Zusammenstellung von Dreicken dargestellt werden. | Jedes Polygon kann als Zusammenstellung von Dreicken dargestellt werden. | ||
<br> | <br> | ||
Zeile 13: | Zeile 13: | ||
===Fazit=== | ===Fazit=== | ||
− | Wenn ihr die Möglichkeit habt, dann baut eure Szene von | + | Wenn ihr die Möglichkeit habt, dann baut eure Szene von Anfang an aus Dreiecken auf. Die müssen nicht mehr nachbearbeitet werden, und das bringt euch vorallem bei großen Szenen noch einen spürbaren Geschwindigkeitszuwachs. |
== Wie mach ich es? == | == Wie mach ich es? == | ||
+ | |||
+ | ===Zeichnen konvexer Dreiecke mit den Bordmitteln von OpenGL=== | ||
Es wäre sicherlich mühselig nun anzufangen die komplette Szene aus einzelnen Dreiecken zusammenzusetzen. Glücklicherweise hat OpenGL dafür eine Lösung.<br> | Es wäre sicherlich mühselig nun anzufangen die komplette Szene aus einzelnen Dreiecken zusammenzusetzen. Glücklicherweise hat OpenGL dafür eine Lösung.<br> | ||
− | Anstatt im | + | Anstatt im glBegin-glEnd Block mit '''GL_TRIANGLES''' zu arbeiten könnt ihr zusammenhängende ('''GL_TRIANGLE_STRIP''') Dreiecke (für rechteckige Flächen oder Flächen die aus Rechtecken zusammengesetzt wurden) oder konzentrische ('''GL_TRIANGLE_FAN''') Dreiecke (für [[Konvex | konvexe]] Polygone) verwenden. Was diese Konstanten konkret verändern ist im Artikel [[glBegin]] beschrieben. |
+ | |||
+ | ===Triangulierung und Darstellung von konkaven Polygonzügen=== | ||
+ | Möchte man konkave Polygonzüge darstellen, so ist dies nicht mehr ohne weiteres möglich. Um die Polygonzüge in Dreiecke zu unterteilen wird ein Algorithmus benötigt. Am einfachsten zu implementieren ist hierbei die sogenannte [[Ear Clipping Triangulierung]]. | ||
== Siehe auch == | == Siehe auch == | ||
[[glBegin]], [[Primitive]] | [[glBegin]], [[Primitive]] |
Aktuelle Version vom 12. März 2008, 13:48 Uhr
Inhaltsverzeichnis
Triangulation
Was ist das?
Triangulation steht für "Aufteilen der Polygone innerhalb der Szene in Dreiecke".
Die Triangulation ist damit eine Spezialisierung der Tesselierung.
Wozu braucht man das?
Dazu muss man auf die Besonderheiten der Grafikhardware eingehen.
Heutzutage (und nicht erst seit gestern) werden Grafikkarten auf die Darstellung von (texturierten) Dreiecken optimiert (Linien und Punkte lasse ich mal außen vor). Das hat einen ganz einfachen Grund:
Jedes Polygon kann als Zusammenstellung von Dreicken dargestellt werden.
Ihr könntet jetzt anbringen, dass ihr aber doch auch "Vierecke und Polygone mittels OpenGL zeichnen" könnt. (siehe Beitrag Primitive)
Das stimmt. Nur sind die Grafikkarten nunmal auf Dreiecke optimiert. Und wenn man was anderes als Dreiecke zeichnet, müssen diese Flächen erst für die Hardware in Dreiecke zerlegt werden. Und das kostet Zeit. Und Zeit ist etwas, was in der Programmierung (vorallem im Grafikbereich) so wertvoll ist wie der Kaffee in der Nacht. (Also quasi unersetzbar)
Fazit
Wenn ihr die Möglichkeit habt, dann baut eure Szene von Anfang an aus Dreiecken auf. Die müssen nicht mehr nachbearbeitet werden, und das bringt euch vorallem bei großen Szenen noch einen spürbaren Geschwindigkeitszuwachs.
Wie mach ich es?
Zeichnen konvexer Dreiecke mit den Bordmitteln von OpenGL
Es wäre sicherlich mühselig nun anzufangen die komplette Szene aus einzelnen Dreiecken zusammenzusetzen. Glücklicherweise hat OpenGL dafür eine Lösung.
Anstatt im glBegin-glEnd Block mit GL_TRIANGLES zu arbeiten könnt ihr zusammenhängende (GL_TRIANGLE_STRIP) Dreiecke (für rechteckige Flächen oder Flächen die aus Rechtecken zusammengesetzt wurden) oder konzentrische (GL_TRIANGLE_FAN) Dreiecke (für konvexe Polygone) verwenden. Was diese Konstanten konkret verändern ist im Artikel glBegin beschrieben.
Triangulierung und Darstellung von konkaven Polygonzügen
Möchte man konkave Polygonzüge darstellen, so ist dies nicht mehr ohne weiteres möglich. Um die Polygonzüge in Dreiecke zu unterteilen wird ein Algorithmus benötigt. Am einfachsten zu implementieren ist hierbei die sogenannte Ear Clipping Triangulierung.