PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : polygone: quads oder triangles ?


eXistence
2003-07-25, 22:20:35
Ich beschäftige mich seit einiger Zeit mit 3d-software ala max und maya und mir ist aufgefallen, dass diese zum Teil mit Polygonen arbeiten, welche 4 edges haben (oder noch mehr).
In games könnte man ja oft Flächen, die aus 2 triangles bestehen, durch ein solches quad ersetzen, warum wird das nicht gemacht ?
Warum arbeiten games immer noch ausschließlich mit triangles ?
oder habe ich da irgendwas nicht verstanden ? bitte um Aufklärung =)

eXistence

Aqualon
2003-07-25, 22:32:32
Grakas können nicht mit Rechtecken sondern nur mit Dreiecken umgehen? *ins blaue rat*

Nochmal nachgedacht:

Dreiecke sind die kleinste Einheit, aus der man alle Polygone bauen kann und deswegen werden wohl nur Dreiecke bei Grafikberechnungen in den Grakas verwendet.

Aqua

Ganon
2003-07-25, 22:51:01
Mach mal nen Viereck rund!

Abe Ghiran
2003-07-25, 23:02:00
Dreiecke haben mindestens zwei (zumindest fallen mir gerade nicht mehr ein) sehr hübsche Eigenschaften, wodurch sie sehr einfach zu handhaben sind:

- Sie sind immer planar, da drei Punkte eine Ebene aufspannen.

- Sie sind immer konvex (haben also keine "Dellen").

Ich denke mit diesen Vorrausetzungen lassen sich viele Algorithmen einfacher gestalten und da einfacher bei Hardware i.d.R. weniger Transistoren und mehr Speed bedeutet, hantieren Grafikkarten immer noch nur mit Dreiecken.

Übergibt man der Api jetzt Quads oder Polygone müssen die erst trianguliert (= in Dreiecke zerlegt werden), wobei ich mal vermute, das das dann die Software, sprich CPU macht.
Das mag bei Modelern & offline Renderern nicht so schlimm sein aber bei einem Spiel will man sowas ja vermeiden und macht das vorher, so das die Engine zur Laufzeit nur noch mit Dreiecken hantieren muß.

Grüße, Jan

Xmas
2003-07-26, 01:01:48
Original geschrieben von eXistence
In games könnte man ja oft Flächen, die aus 2 triangles bestehen, durch ein solches quad ersetzen, warum wird das nicht gemacht ?
Warum arbeiten games immer noch ausschließlich mit triangles ?
Spiele arbeiten nicht ausschließlich mit Dreiecken. Manche verwenden Quads, andere auch Bézier-Patches oder ähnliches auf Modellebene. Auf dem Weg zur Hardware werden die Einheiten aber immer kleiner. Es ist für die Berechnungen aber wünschenswert, dass man eine möglichst einfache Struktur hat, und nicht mehrere verschiedene Objekttypen. Oft ist es effizienter nur mit Dreiecken zu rechnen statt Dreiecke und Quads zu mischen.


Dass die Hardware nur Dreiecke verarbeitet, ist Auslegungssache. Denn Triangle-Strips, -Fans und Quad-Strips sind durchaus "Hardware-unterstützt" (wenn man bei einer so trivialen Aufgabe überhaupt davon reden kann), und diese Stellen im Prinzip nichts anderes als Polygone dar. Nur eben mit einigen Beschränkungen.

Tigerchen
2003-07-26, 08:51:28
Wenn Dreiecke so viel besser sind frage ich mich warum nVIDIA beim nV 1 auf Quads gesetzt hat?Wie kamen die darauf?

Quasar
2003-07-26, 08:53:47
Original geschrieben von Abe Ghiran
- Sie sind immer konvex (haben also keine "Dellen").

...aber dafür Beulen?

Konkav <-> Konvex

Quasar
2003-07-26, 08:55:38
Original geschrieben von Tigerchen

Wenn Dreiecke so viel besser sind frage ich mich warum nVIDIA beim nV 1 auf Quads gesetzt hat?Wie kamen die darauf?


Weil man damals noch ganz am Anfang stand und der quasi-Standard des Dreiecks als kleinste geometrische Einheit u.a. durch DirectX noch nicht etabliert war.

Eigentlich ein vielversprechendes Verfahren, nur leider eben inkompatibel zum kurze Zeit später erschienenen Direct3D und damit, wie alles, was sich M$ widersetzt, zum Untergang verdammt.

nggalai
2003-07-26, 09:53:11
Hola,
Original geschrieben von Xmas
Dass die Hardware nur Dreiecke verarbeitet, ist Auslegungssache. Denn Triangle-Strips, -Fans und Quad-Strips sind durchaus "Hardware-unterstützt" (wenn man bei einer so trivialen Aufgabe überhaupt davon reden kann), und diese Stellen im Prinzip nichts anderes als Polygone dar. Nur eben mit einigen Beschränkungen. Lustigerweise scheinen aber auch alle Software-Renderer während des Renderings zu triangulieren. Es wird zwar hauptsächlich mit Quads oder N-Gons gemodelt, aber mir ist kein Renderer bekannt, der nicht an einer Stelle in der Pipeline alles in Dreiecke umwandelt.

93,
-Sascha.rb

Fragman
2003-07-26, 12:32:59
ein prob von n gons ist auch, das sie machnmal eine art "schattenartefact" bilden koennen, wenn die vertex punkte nicht auf auf einer ebene liegen und untereinander extrem davon abweichen. ist dann aber durch korrekturen beim modeling zu beheben.

Abe Ghiran
2003-07-26, 15:17:11
Original geschrieben von Quasar
...aber dafür Beulen?

Konkav <-> Konvex

Ähh ne, war jetzt vielleicht blöd von mir ausgedrückt, Beulen haben die natürlich auch nicht. Sind also beides (konkav & konvex) und beides irgendwie nicht, also perfekt :).
Weiß jemand wie man das mathematisch korrekt beschreibt?

Grüße, Jan

Kant
2003-07-26, 15:27:04
Hallo,

Der große Vorteil bei der Verwendung von Triangles ist, das man die Kontrolle darüber behält, was gerendert wird. Das funktioniert bei Quads und Polygonen nur noch eingeschränkt, nämlich dann wenn sie planar sind.
So läßt sich ein Quad schon auf 2 verschiedene Arten triangulieren.
Und wenn das Quad nicht planar war, sehen beide Arten anders aus.

Aqualon
2003-07-26, 15:35:38
Original geschrieben von Abe Ghiran
Ähh ne, war jetzt vielleicht blöd von mir ausgedrückt, Beulen haben die natürlich auch nicht. Sind also beides (konkav & konvex) und beides irgendwie nicht, also perfekt :).
Weiß jemand wie man das mathematisch korrekt beschreibt?

Wie wärs mit "gerade" ;)

Aqua

huha
2003-07-26, 20:55:39
Original geschrieben von Abe Ghiran

Übergibt man der Api jetzt Quads oder Polygone müssen die erst trianguliert (= in Dreiecke zerlegt werden), wobei ich mal vermute, das das dann die Software, sprich CPU macht.


Ich dachte immer, der T-Part von T&L soll dem Prozessor diese Aufgabe abnehmen (wobei ich T&L eigentlich für unsinnig halte, denn so ne ROhpower-Aufgabe kann der höher getaktete CPU doch sicher tausendmal besser als die 300mhz-GPU)

-huha

Demirug
2003-07-26, 21:21:33
Original geschrieben von huha
Ich dachte immer, der T-Part von T&L soll dem Prozessor diese Aufgabe abnehmen (wobei ich T&L eigentlich für unsinnig halte, denn so ne ROhpower-Aufgabe kann der höher getaktete CPU doch sicher tausendmal besser als die 300mhz-GPU)

-huha

Nein der T Teil von T&L übernimmt die Aufgabe die Daten welche als 3D Koordinaten im Objectspace vorliegen die entsprechende Daten für die Darstellung auf dem Bildschirm zu berechnen. Dafür ist mindestens eine Vektor Matrix Multiplikation notwendig. Ein Vertexshader braucht dafür in der Regel 4 Takte. Und ein moderne Grafikchip hat ja mehr als einen VS. Der Hauptvorteil das die Grafikkarte diesen Job übernimmt liegt aber darin das man die CPU entlastet und sie sich um andere Dingen kümmern kann.

aths
2003-07-27, 21:13:02
Original geschrieben von Xmas
Dass die Hardware nur Dreiecke verarbeitet, ist Auslegungssache.Afaik machen z.B. GeForce-Karten aus jedem Quad wieder 2 Dreiecke (manchmal beim Smooth Shading gut zu sehen) während es wohl auch OpenGL-Hardware gibt, die Vierecke direkt rendern kann.

Stone2001
2003-07-27, 22:01:46
Original geschrieben von Abe Ghiran
Ähh ne, war jetzt vielleicht blöd von mir ausgedrückt, Beulen haben die natürlich auch nicht. Sind also beides (konkav & konvex) und beides irgendwie nicht, also perfekt :).
Weiß jemand wie man das mathematisch korrekt beschreibt?

Grüße, Jan
Nichts leichter als das!

Def.:
M Teilmenge vom R^n (bzw. R^n selbst) heißt konvex : <=> aus a,b Element M folgt stets S[a,b] ist eine Teilmenge von M (bzw. M selbst).
Anmerkung:
(1) S[a,b] bezeichne eine Strecke von Punkt a nach Punkt b!
(2) Ist eine Menge nicht konvex, so wird sie als "nicht konvex" bezeichnet, nicht als konkav.

][immy
2003-07-28, 13:23:34
also Polygon heißt zwar multieck, aber es werden halt meistens dreiecke genutzt, weil man damit auch jede andere form (mehr oder weniger rund erstellen kann

Direct3D unterstützt sogar selbst nur dreiecke direckt. alles andere darfst du dir bei der programmierung selbst schreiben (kann inzwischen natürlich anders sein, das letzte mit dem ich unter D3D programmiert hab war DirctX 6, kann auch sein das es dafür schon eine funktion gab, aber ansich hab ich dazu nix gefunden (aber was solls, so eine funktion ist schnell geschrieben halt wieder 2 dreiecke = ein viereck))
aber selbst wenn es eine funktion dafür gibt, es werden stehts 2dreiecke sein, da directX selbst nicht mit vierecken umgehen kann
sobald man polygone mit mehr als 3 ecken nutzt, werden diese figuren direkt wieder zu mehreren 3-ecken umgerechnet


OpenGL hingegen unterstützt auch vierecke direkt wodurch nicht wieder diese unterteilung aus 2 dreiecken entsteht. was die grafikkarten natürlich daraus machen ist mehr oder weniger denen überlassen
wie das bei openGL mit den anderen multiecken ist, weiß ich jetzt nicht, aber ich denke, ab irgendwo wird es wieder auf 3- oder 4-ecke zurückgerechnet

Abe Ghiran
2003-07-28, 23:27:11
Original geschrieben von Stone2001
Nichts leichter als das!

Def.:
M Teilmenge vom R^n (bzw. R^n selbst) heißt konvex : <=> aus a,b Element M folgt stets S[a,b] ist eine Teilmenge von M (bzw. M selbst).


:bonk: ach klaro..., das kommt mir jetzt wo ich's sehe auch aus gdv noch sehr bekannt vor, thanx.

Grüße, Jan