2010-05-12 17 views
6

Ho una serie di triangoli sovrapposti da un modello 3D proiettato in un piano 2D. Ho bisogno di unire ogni isola di triangoli commoventi in un poligono chiuso non convesso.Unisci triangoli sovrapposti in un poligono

I poligoni risultanti non dovrebbero presentare alcun buco (poiché i dati di origine non lo sono).

Molti dei triangoli di origine condividono i bordi (in virgola mobile identici) con altri triangoli nei dati di origine.

Qual è il modo più semplice per farlo? Le prestazioni non sono particolarmente importanti, poiché ciò avverrà in fase di progettazione.

+1

Vedi anche "Unione dei poligoni complessi": http://stackoverflow.com/questions/2667748/union-of-complex-polygons – unutbu

risposta

2

Provare gpc o la libreria General Polygon Clipper.

+0

purtroppo questo sarà utilizzato in un gioco commerciale; non sono sicuro di come si sentirebbe UManchester a riguardo. – nornagon

+1

gpc ha anche una licenza commerciale. Inoltre, gpc elenca altre librerie simili su http://www.cs.man.ac.uk/~toby/alan/software/#Links. Forse uno di questi ha una licenza più adatta. – lhf

2

Immagina la proiezione su un piano come una "vista" del modello (cioè la direzione di proiezione è la linea di vista e la proiezione è ciò che vedi). In tal caso, i bordi dei poligoni che si desidera calcolare corrispondono alla sagoma del modello.

La silhouette, a sua volta, è una serie di spigoli nel modello. Per ciascun bordo della silhouette, le facce adiacenti avranno delle normali che puntano lontano dal piano o verso il piano. È possibile verificare che ciò accetti il ​​prodotto punto della faccia normale con il piano normale - cerca i bordi le cui normali faccia adiacenti hanno punti prodotti di segni opposti con la direzione di proiezione.

Una volta trovati tutti i bordi della silhouette, è possibile unirli insieme ai confini dei poligoni desiderati.

In genere, è possibile trovare ulteriori informazioni sul rilevamento e l'estrazione delle silhouette tramite termini google come mesh silouette finding detection. Forse un buon punto di partenza è here.

+0

Questo non è abbastanza adeguato - per uno, ho diverse parti del modello le cui proiezioni si sovrappongono. – nornagon

+0

@nomagon, buon punto. Inoltre, i tuoi modelli sono chiusi? Cioè hanno un interno e un esterno come una sfera o un toro? O sono solo una zuppa poligonale generale? – brainjam