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

Aktuelle Zeit: So Jul 13, 2025 18:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Triangulieren und Quadrangulieren
BeitragVerfasst: Mi Dez 08, 2010 17:27 
Offline
DGL Member
Benutzeravatar

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

ich will gern ein beliebiges polygon Triangulieren, bzw Quadrangulieren.
Dafür fallen mir spontan ein paar wege ein.

Quadrangulieren:
Wenn die anzahl der Vertices im Polygon gerade ist kann man einfach jedes Vertex mit dem "gegenüberliegenden" verbinden. Also wenn es 8 Vertices hat würdem an einfach Vertex 1 mit 6 und 2 mit 5 verbinden. 0 und 7 sowie 3 und 4 sind ja schon.
Das würde dann 3 Quads ergeben.

Wenn es eine ungerade anzahl an Vertices sind, setzt man einfach in der mitte des Polygons sowie auf jeder Edge ein neues Vertex ein und verbindet diese.

Ggf. kann man noch beides mischen so das man maximal 2 vertices einfügen muß, statt bei einem Poly mit z.B. 9 Vertices 10 stück.


Triangulieren:
Wäre das simpelste vom Vertex 0 aus jeweils mit 1 und 2, 2 und 3, 3 und 4 etc ein neues triangle zu bilden, oder alternativ auch ein neues Vertex in der mitte platzieren und mit jedem vorhandenen vertex verbinden.


Beides wären meine ansätze wie ich das realisieren würde, nur.. ist es der optimale weg? Und, sobald es ein konkaves polygon ist funktioniert das natürlich alles nicht mehr.. nur, wie macht man es bei einem konkaven polygon?

Oder gibt es tolle Algorithmen dafür die sehr schnell sind und alle möglichen fälle (n-vertices, Konkav, Konvex..) abdecken?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 08, 2010 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Für Dreiecke empfehle ich Corner-Cutting (auch bekannt als Marching). Funktioniert sowohl mit konvexen als auch mit konkaven Polygonen und ist relativ einfach zu implementieren. Wenn du optimal Triangulieren möchtest, also nicht im Sinne der Laufzeit sondern der Qualität des Dreiecksnetzes, such mal nach Delaunay-Triangulation.

Für Quads ist mir nichts bekannt. Ich kenne wen an meinem Lehrstuhl der da wohl dran bastelt, allerdings in der 3D-Variante. 2009 gabs da schon mal nen Paper vom Lehrstuhl zu, vielleicht findet sich da ja unter den Referenzen etwas brauchbares.
http://www-i8.informatik.rwth-aachen.de ... php?id=210 => Mixed-Integer Quadrangulation
Habe von der Thematik leider nicht mehr Ahnung als "die machen irgendwas mit Quads"....bin halt mit meinem eigenen Kram schon ausgelastet ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 08, 2010 17:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
It is not the best/fastest but for opengl maybe the easiest to implement it glutesselate.

I use that in my glvg project:
http://thuis.vanderhoning.net/svn_glvg
As glutesselate is not the fastest way i chache the tesselate mesh and render that. I only call tesselation if a polygon changes its shape.

More info on glu tesselation can be found at:
http://glprogramming.com/red/chapter11.html

Other possible methods are listed at:
http://vterrain.org/Implementation/Libs ... ulate.html
and there may even be more.

For 2d polygons there is also the shader way skipping triangulation altogether:
http://http.developer.nvidia.com/GPUGem ... _ch25.html

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 08, 2010 17:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
Coolcat hat geschrieben:
Für Quads ist mir nichts bekannt. Ich kenne wen an meinem Lehrstuhl der da wohl dran bastelt, allerdings in der 3D-Variante. 2009 gabs da schon mal nen Paper vom Lehrstuhl zu, vielleicht findet sich da ja unter den Referenzen etwas brauchbares.
http://www-i8.informatik.rwth-aachen.de ... php?id=210 => Mixed-Integer Quadrangulation
Habe von der Thematik leider nicht mehr Ahnung als "die machen irgendwas mit Quads"....bin halt mit meinem eigenen Kram schon ausgelastet ;)

For that you need to have a already triangulated mesh if i read it correctly.

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 08, 2010 17:56 
Offline
DGL Member
Benutzeravatar

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

in erster linie geht es mir um geschwindigkeit, also lieber einen schnellen algo mit nicht perfekten ergebnissen statt eines etwas langsameren mit über-perfektem :)

Coolcat hat geschrieben:
Für Dreiecke empfehle ich Corner-Cutting (auch bekannt als Marching). Funktioniert sowohl mit konvexen als auch mit konkaven Polygonen und ist relativ einfach zu implementieren. Wenn du optimal Triangulieren möchtest, also nicht im Sinne der Laufzeit sondern der Qualität des Dreiecksnetzes, such mal nach Delaunay-Triangulation.


Vieleicht stell ich mich beim googlen auch grad echt doof an, aber ich finde dazu nix.. hast du da zufällig nen guten link wo das verfahren beschrieben wird?


@glutesselate:
I need it for a program that's not even using OpenGL .. ;)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 08, 2010 18:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Vieleicht stell ich mich beim googlen auch grad echt doof an, aber ich finde dazu nix.. hast du da zufällig nen guten link wo das verfahren beschrieben wird?

Hab dir ne PM mit nem Skript-Auszug geschickt.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 08, 2010 18:12 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 09, 2010 11:53 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Oder auch im DGL-Wiki:

http://wiki.delphigl.com/index.php/Ear_ ... ngulierung

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


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


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]