Mesh poligonaleUna mesh poligonale, in computer grafica, è un reticolo che definisce un oggetto nello spazio, composto da vertici, spigoli e facce.[1] Il termine mesh in inglese significa letteralmente "maglia", "rete".[2][3] Circa dagli anni duemila, le mesh poligonali sono usate sempre più intensivamente in molte differenti aree della computer grafica e della geometry processing (o elaborazione della geometria, che è un campo relativamente nuovo dell'informatica che concerne algoritmi e modelli matematici per l'analisi e la manipolazione di dati geometrici).[4] DefinizioneIntuitivamente, una mesh poligonale è la partizione di una superficie continua in celle poligonali, come triangoli, quadrilateri, ecc. Più formalmente, una mesh può essere definita come una tupla , dove è l'insieme dei vertici del modello (punti in ) e contiene l'adjacency information o, in altre parole, come i vertici sono connessi per formare gli spigoli e le facce della mesh.[5] Per esempio una mesh composta da un singolo triangolo sarebbe , ossia i tre vertici, i tre spigoli e il triangolo. Le mesh più usate in computer grafica sono le triangle meshes e le quadrilateral meshes (abbreviate in quad meshes).[5] In questo articolo, per "mesh" si intende una triangle mesh. Altre mesh, nelle quali gli elementi di base sono quadrilateri o altri poligoni, sono a volte utilizzate, ma possono verificarsi inconvenienti. Per esempio, è facile creare un quadrilatero i cui vertici non giacciono tutti sullo stesso piano, mentre c'è sempre un piano passante per tre vertici.[6] Inoltre, lavorare esclusivamente con triangle meshes semplifica la memorizzazione, e riduce il numero degli algoritmi.[7] CaratteristicheUna mesh, differentemente da un oggetto solido reale, non presenta una massa; è quindi una sorta di volume vuoto, privo di spessore, le cui facce sono appunto dei "veli" superficiali.[8] I componenti visibili di una mesh sono:
Fans e StripsL'insieme di tutti i vicini (neighbors) di un vertice è detto il 1-ring del vertice ed è definito come .[5] La cardinalità di è detta grado (degree) o valenza (valence) del vertice .[5] Una sequenza di triangoli adiacenti che condividono lo stesso vertice è detta fan di triangoli. Una strip è una sequenza di triangoli che può essere specificata elencando i propri vertici senza ambiguità. Per essere più specifici, dato un elenco ordinato di vertici , il triangolo è rappresentato dai vertici . Strips e fans sono usati per compattare le rappresentazioni delle mesh. Una strip di triangoli con vertici rappresenta triangoli. Così, una strip di 100 triangoli richiede 102 vertici per essere memorizzata, piuttosto che 300. La quantità di vertici salvata incrementa con il numero di triangoli; il numeri medio di vertici necessari per rappresentare un triangolo in una strip con triangoli è .[5] Nel caso di un fan, il triangolo è rappresentato dai vertici assumendo che sia il vertice condiviso.[5]
VarietàUna mesh 2D finita è una manifold mesh se gli spigoli e i triangoli che incontrano un vertice possono essere ordinati in un ordine ciclico senza ripetizioni, tali che lo spigolo sia uno spigolo dei triangoli e .[6] Questo implica che per ogni spigolo, ci sono esattamente due facce che lo contengono.[6] Una superficie è detta 2-manifold (two-dimensional-manifold) se l'intorno (neighborhood) di ogni punto sulla superficie è omeomorfico a un disco.[5][10] Più semplicemente, significa che se abbiamo un disco possiamo centrarlo in e farlo aderire alla superficie attorno a esso. La definizione di 2-manifold è estendibile alla superficie con frontiere, considerando di tagliare via metà del disco e farlo aderire alla frontiera. Se la superficie è una mesh poligonale, possiamo determinare se è manifold controllando se le seguenti condizioni sono vere:[5]
OrientazioneOgni faccia è un poligono e perciò ha due lati (sides). Se guardiamo una faccia e seguiamo i suoi vertici nell'ordine in cui sono specificati in , essi possono descrivere un movimento orario (clockwise) o antiorario (anti-clockwise).[5] Ovviamente, se guardiamo alle stesse facce dall'interno, queste orientazioni saranno scambiate.[5] La definizione dell'orientazione torna utile per la determinazione del vettore normale: se i vertici di un triangolo non-degenere (ossia uno con un'area non nulla) sono nei punti , , , allora possiamo calcolare , che è il vettore perpendicolare al piano del triangolo.[6] Da notare che se scambiamo i vertici e , il vettore risultante è negativo.[6] Poiché spesso si usano le normali di un triangolo in una mesh per determinare cosa è "dentro" o "fuori" la mesh, l'ordine dei vertici è critico. Strutture dati delle meshPer scegliere una mesh data structure (struttura dati della mesh), occorre considerare fattori topologici[11] e algoritmici:[4]
La scelta di una struttura dati richiede la misurazione di vari criteri come...[4]
Rappresentazioni delle mesh poligonaliFinora, abbiamo dato per scontato che c'è una qualche rappresentazione delle mesh senza considerare nel dettaglio come effettivamente memorizzare i poligoni. Infatti, ci sono molte rappresentazioni, e la scelta di una o dell'altra influenza notevolmente le nostre possibilità di lavorazione della mesh.[7] La soluzione più semplice consiste nel memorizzare ogni poligono con la posizione geometrica di ognuno dei suoi vertici.[7] Tuttavia, fare questo significherebbe non avere alcuna informazione sulla connettività – effettivamente, si otterrebbe solo una zuppa di poligoni che può essere renderizzata, ma con poche possibilità di manipolazione, poiché tutte le operazioni primitive assumono una qualche conoscenza di come i poligoni si relazionano gli uni agli altri. Indexed face setUna più utile e semplice rappresentazione è l'indexed face set.[7] Un indexed face set memorizza la mesh in due array. Il primo contiene tutti i vertici indicizzati da un numero (tipicamente solo in un array lineare). Per ogni vertice si memorizzano i suoi attributi, ovvero almeno la propria posizione nello spazio ma frequentemente anche altre informazioni come una normale al vertice (vertex normal), e possibilmente alcuni attributi di cui si necessita per scopi particolari come il rendering. Il secondo array è un elenco di facce che contiene almeno un elenco di indici, dove ogni indice fa riferimento all'array dei vertici. Edge-based data structureIl principio della struttura dati edge-based, è quella di rappresentare la connettività memorizzando esplicitamente come gli spigoli si relazionano gli uni agli altri.[7] Per ogni faccia della mesh, si memorizza semplicemente un puntatore a uno solo dei suoi spigoli. Analogamente, si memorizza per ogni vertice un solo puntatore a un singolo spigolo. Se vorremo il prossimo spigolo nell'edge loop[13] che definisce una faccia, semplicemente seguiremo un puntatore dallo spigolo corrente. Di conseguenza, possiamo circolare per una faccia, visitando tutti i suoi spigoli anche se la faccia ha solo un puntatore a uno di questi. Poiché le rappresentazioni edge-based sono basate su spigoli che conoscono le loro facce incidenti, solo le manifolds sono di solito rappresentabili usando queste strutture dati. Winged edge data structureUn winged edge è uno spigolo orientato che connette due vertici. Per ognuno dei suoi due face loops, esso presenta due puntatori verso i successivi spigoli, sia in senso orario che in quello antiorario. Sfortunatamente, la rappresentazione winged edge è un po' complicata, e presenta un altro difetto: lo spigolo in sé è bidirezionale, ma il winged edge è orientato. Se vogliamo muoverci da uno spigolo all'altro, il puntatore che dobbiamo usare dipende dall'orientamento dello spigolo. Vedi l'opera di Bruce G. Baumgart per maggiori dettagli.[14] Half edge data structureLa rappresentazione half edge presenta due rappresentazioni di uno spigolo dato.[7] Gli half edges sono in coppie, e ogni elemento della coppia rappresenta lo spigolo dal punto di vista di uno dei due poligoni che condividono lo spigolo.[7] Perciò, non vi è alcuna ambiguità. Ogni half edge presenta un puntatore successivo, che punta al prossimo spigolo nel loop che corrisponde alla sua faccia. Semplicemente seguendo i puntatori successivi, possiamo visitare tutti gli spigoli nell'edge loop di una faccia.
Formati di file per le meshAlcuni formati di file che memorizzano informazioni sulle mesh sono i seguenti:
Note
Voci correlate
|
Portal di Ensiklopedia Dunia