Mesh poligonale: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
ortografia
Davi.trip (discussione | contributi)
Riscrittura della voce
Riga 1: Riga 1:
[[Image:Dolphin triangle mesh.svg|thumb|Un esempio di mesh poligonale]]
[[Image:Dolphin triangle mesh.svg|thumb|Un esempio di mesh poligonale]]


Una '''mesh poligonale''', in [[computer grafica]], è un reticolo che definisce un oggetto nello spazio, composto da [[Vertice (geometria)|vertici]], [[Spigolo|spigoli]] e [[Faccia (geometria)|facce]].<ref>{{Cita libro|nome=Francesco|cognome=Siddi|titolo=Grafica 3D con Blender|url=https://www.amazon.it/Grafica-3D-Blender-Francesco-Siddi/dp/8850333145/ref=sr_1_1?ie=UTF8&qid=1520100755&sr=8-1&keywords=grafica+3d+con+blender|accesso=2018-03-03|data=25 giugno 2014|editore=Apogeo|lingua=Italiano|ISBN=9788850333141}}</ref> Il termine ''mesh'' in inglese significa letteralmente "maglia", "rete".<ref>{{Cita libro|nome=Giuseppe|cognome=Ragazzini|titolo=Il Ragazzini 2017. Dizionario inglese-italiano, italiano-inglese. Con Contenuto digitale|url=https://www.amazon.it/Ragazzini-Dizionario-inglese-italiano-italiano-inglese-elettronicamente/dp/8808737373/ref=sr_1_1?s=books&ie=UTF8&qid=1520101282&sr=1-1&keywords=il+ragazzini+2017|accesso=2018-03-03|data=1 giugno 2016|editore=Zanichelli|lingua=Italiano|ISBN=9788808737373}}</ref><ref>{{Cita web|url=http://www.wordreference.com/enit/mesh|titolo=mesh - Dizionario inglese-italiano WordReference|sito=www.wordreference.com|lingua=it|accesso=2018-03-03}}</ref>
Una '''mesh poligonale''' (letteralmente: maglia, rete), è un insieme di vertici, spigoli e facce che definiscono la forma di un oggetto tridimensionale. È una delle basi costituenti della [[computer grafica 3D]]. La [[Modellazione 3D|modellazione 3d]] è la serie di tecniche che sottendono alla creazione di una mesh poligonale.


Negli anni recenti, le mesh poligonali sono divenute via via sempre più popolari e al giorno d'oggi sono usate 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 [[Algoritmo|algoritmi]] e [[Modello matematico|modelli matematici]] per l'analisi e la manipolazione di dati geometrici).<ref name=":2">{{Cita libro|nome=Mario|cognome=Botsch|nome2=Leif|cognome2=Kobbelt|nome3=Mark|cognome3=Pauly|titolo=Polygon Mesh Processing|url=https://www.amazon.it/Polygon-Mesh-Processing-Mario-Botsch/dp/1568814267/ref=tmm_hrd_swatch_0?_encoding=UTF8&qid=1520103876&sr=1-3|accesso=2018-03-03|edizione=1|data=2010-08-09|editore=A K Peters/CRC Press|lingua=Inglese|p=|ISBN=9781568814261}}</ref>
==Elementi di una mesh==
[[File:Mesh_panoramica.svg|miniatura|517x517px|Elementi che compongono una mesh poligonale|centro]]
Una mesh è un reticolo che definisce un oggetto nello spazio. Questo reticolo è composto fondamentalmente da tre elementi: vertici, spigoli, e facce. 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.<ref>{{Cita libro|autore=Werner Stefano Villa|titolo=Autodesk AutoCAD 2017 - Guida completa per architettura, meccanica e design|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>


== Definizione ==
I '''vertici''' ("vertice" in inglese è "vertex") sono dei punti dello spazio (dotati quindi di coordinate ''x'', ''y'', ''z'' che ne determinano la posizione) e costituiscono la base per definire gli '''spigoli''' (edges), ovvero i segmenti che congiungono due vertici nello spazio. A loro volta, gli spigoli definiscono, attraverso la propria connessione e chiusura, le '''facce'''. Per definire una faccia sono sufficienti tre spigoli tra loro connessi.<ref name=":0">{{Cita libro|autore=Francesco Siddi|titolo=Grafica 3D con Blender|anno=|editore=|città=|p=|pp=|ISBN=}}</ref> Una ''mesh'' triangolare consiste in molti triangoli uniti lungo i propri spigoli, per formare una superficie. Altre mesh, nelle quali gli elementi di base sono quadrilateri, o altri poligoni, sono a volte utilizzate, ma possono verificarsi problemi legati a esse. Per esempio, è facile creare un quadrilatero i cui vertici non giacciono tutti sullo stesso piano, mentre c'è sempre un piano contenente tre vertici.<ref>{{Cita libro|autore=John F. Hughes , Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, Kurt Akeley|titolo=Computer Graphics: Principles and Practice|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>
Intuitivamente, una mesh poligonale è la partizione di una superficie continua in celle poligonali, come [[Triangolo|triangoli]], [[Quadrilatero|quadrilateri]], ecc. Più formalmente, una mesh <math>\mathcal{M}</math> può essere definita come una [[tupla]] <math>(\mathcal{V},\mathcal{K})</math>, dove <math>\mathcal{V} = \{v_i\in \Reals^3|i=1...\mathit{N}_v\}</math> è l'insieme dei vertici del modello (punti in <math>\Reals^3</math>) e <math>\mathcal{K}</math> contiene l'''adjacency information'' o, in altre parole, come i vertici sono connessi per formare gli spigoli e le facce della mesh.<ref name=":1">{{Cita libro|nome=Fabio|cognome=Ganovelli|nome2=Massimiliano|cognome2=Corsini|nome3=Sumanta|cognome3=Pattanaik|titolo=Introduction to Computer Graphics: A Practical Learning Approach|url=https://www.amazon.it/Introduction-Computer-Graphics-Practical-Learning/dp/1439852790/ref=sr_1_1?ie=UTF8&qid=1520105260&sr=8-1&keywords=INTRODUCTION+TO+COMPUTER+GRAPHICS|accesso=2018-03-03|edizione=1|data=22 ottobre 2014|editore=Chapman and Hall/CRC|lingua=Inglese|p=|ISBN=9781439852798}}</ref> Per esempio una mesh composta da una singolo triangolo sarebbe <math>(\{v_0,v_1,v_2\},\{\{v_0,v_1\}\{v_1,v_2\}\{v_2,v_0\}\{v_0,v_1,v_2\}\})</math>, 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'').<ref name=":1" /> 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.<ref name=":3">{{Cita libro|nome=John F.|cognome=Hughes|nome2=Andries Van|cognome2=Dam|nome3=Morgan|cognome3=Mcguire|titolo=Computer Graphics: Principles and Practice|url=https://www.amazon.it/Computer-Graphics-Principles-John-Hughes/dp/0321399528/ref=sr_1_1?ie=UTF8&qid=1520171220&sr=8-1&keywords=computer+graphics+principles+and+practice|accesso=2018-03-04|edizione=3|data=28 febbraio 2009|editore=Addison-Wesley Professional|lingua=Inglese|p=|ISBN=9780321399526}}</ref> Inoltre, lavorare esclusivamente con ''triangle meshes'' semplifica la memorizzazione, e riduce il numero degli algoritmi.<ref name=":4">{{Cita libro|nome=Jakob Andreas|cognome=Baerentzen|nome2=Jens|cognome2=Gravesen|nome3=Francois|cognome3=Anton|titolo=Guide to Computational Geometry Processing: Foundations, Algorithms, and Methods|url=https://www.amazon.it/Guide-Computational-Geometry-Processing-Foundations/dp/1447140745/ref=sr_1_1?ie=UTF8&qid=1520175016&sr=8-1&keywords=guide+to+computational+geometry|accesso=2018-03-04|data=31 maggio 2012|editore=Springer-Verlag New York Inc|lingua=Inglese|p=|ISBN=9781447140740}}</ref>
Altri elementi che compongono una mesh, ma che sono opzionali, sono:
* Un '''poligono''' è un insieme complanare di facce. In sistemi che supportano facce con un maggiore numero di spigoli, i poligoni e le facce sono equivalenti. Comunque, molti componenti hardware da rendering supportano solo facce triangolari o quadrangolari, quindi i poligoni sono rappresentati come più facce. Matematicamente una mesh poligonale può essere considerata una griglia non strutturata, o grafo non orientato, con proprietà addizionali su geometria, forma e topologia.
* Le '''superfici''', più spesso chiamate '''smoothing groups''', sono utili, ma non richieste per raggruppare regioni smussate. Consideriamo un cilindro; per smussarne l'[[ombreggiatura]], tutte le normali delle superfici devono puntare orizzontalmente via dal centro, mentre le normali dei cerchi devono puntare dritte per sopra e sotto. Renderizzata come una sola superficie con il [[Phong shading]], i vertici delle pieghe avrebbero normali scorrette. Perciò, è necessario un qualche modo per determinare dove far cessare la smussatura, per raggruppare parti smussate di una mesh, semplicemente come gruppi di poligoni raggruppano facce triangolari. Come alternativa al fornire superfici/smoothing groups, una mesh può contenere altri dati, come un angolo diviso (poligoni con normali al di sopra di questa soglia sono ciascuno trattati automaticamente come smoothing groups separati o qualche tecnica come lo splitting o la bisellatura è automaticamente applicata allo spigolo presente fra di essi). In più, mesh a risoluzioni molto alte sono meno soggette a inconvenienti che richiederebbero smoothing groups, in quanto i loro poligoni sono così piccoli che rendono il bisogno irrilevante. Ulteriormente, esiste un'altra alternativa che consiste nel semplice distacco delle superfici stesse dal resto della mesh. I [[Motore di rendering|motori di rendering]] non tentano di smussare spigoli lungo poligoni non contigui.
Nella realtà, i materiali sono considerati diretto attributo di un oggetto; pertanto, molti oggetti sono associati a un preciso materiale. Se pensiamo a un bicchiere, lo immaginiamo di vetro, se pensiamo a un cucchiaio, sarà di acciaio, plastica o legno. Se pensiamo alla carrozzeria di un'automobile ci verrà in mente un metallo ricoperto da un'elegante vernice, lucida come uno specchio. Nella computer grafica, il processo di definizione di una forma o di un oggetto è completamente separato dall'attribuzione di un '''materiale''' allo stesso.<ref name=":0" /> In Blender, ad esempio, un materiale è uno strumento che determina le proprietà fondamentalmente ottiche della mesh a cui viene applicato. In altre parole, se voglio rendere una mesh trasparente, devo prima selezionare la mesh e in seguito andare nella finestra dedicata ai materiali e da lì impostare la trasparenza. Un materiale, come detto, è qualcosa che viene applicato, "assegnato", anche a specifiche facce; in questo modo, è possibile gestire più materiali in un'unica mesh.


==Caratteristiche==
Molti formati di mesh supportano anche alcune forme di '''coordinate UV''' (vedi [[mappatura UV]]), che consistono in una separata rappresentazione bidimensionale della mesh "dispiegata" (in inglese unfolded) per mostrare la porzione di texture map (vedi [[texture mapping]]) da applicare a differenti poligoni della mesh.
Una 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.<ref>{{Cita libro|nome=Werner Stefano|cognome=Villa|titolo=Autodesk AutoCad 2017. Guida completa per architettura, meccanica e design|url=https://www.amazon.it/Autodesk-AutoCad-completa-architettura-meccanica/dp/8848131360/ref=sr_1_1?s=english-books&ie=UTF8&qid=1520105498&sr=8-1&keywords=autocad+2017+villa|accesso=2018-03-03|data=23 giugno 2016|editore=Tecniche Nuove|lingua=Italiano|ISBN=9788848131360}}</ref>


I componenti visibili di una mesh sono:
È anche possibile che le mesh contengano altre informazioni come ''attributi'' ai vertici come colore, vettori tangenti, weight maps per controllare l'animazione, ecc.. (alcune volte chiamati anche ''channels'').
* '''Vertice''' – [[Punto (geometria)|Punto]] dello [[Spazio (matematica)|spazio]], dotato quindi di coordinate <math>x</math>, <math>y</math>, <math>z</math> che ne determinano la posizione. In inglese: ''vertex''.
* '''Spigolo''' – [[Segmento]] che congiunge due vertici nello spazio. In inglese: ''edge''.
* '''Faccia''' – Definita attraverso la connessione e chiusura di almeno tre spigoli.<ref name=":0">{{Cita libro|autore=Francesco Siddi|titolo=Grafica 3D con Blender|anno=|editore=|città=|p=|pp=|ISBN=}}</ref> In inglese: ''face''.


==Struttura dati di una mesh==
=== Fans e Strips ===
L'insieme di tutti i vicini (''neighbors'') di un vertice <math>v_i</math>è detto il ''1-ring'' del vertice ed è definito come <math>v_1(i)=\{j|\{i,j\}\in\mathcal{K}\}</math>.<ref name=":1" /> La [[cardinalità]] di <math>v_1(i)</math>è detta grado (''degree'') o valenza (''valence'') del vertice <math>v_i</math>.<ref name=":1" />
Una ''struttura dati'' di una mesh è una rappresentazione che organizza i dati dei vertici, degli spigoli e delle facce. Ci sono diverse strutture dati ed esse possono essere complicate da implementare.<ref>{{Cita libro|autore=Steven J. Gortler|titolo=Foundations of 3D Computer Graphics|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>


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 <math>\{v_0,v_1,...,v_n\}</math>, il triangolo <math>i</math>è rappresentato dai vertici <math>\{v_0,v_{i+1},v_{i+2}\}</math>. ''Strips'' e ''fans'' sono usati per compattare le rappresentazioni delle mesh. Una ''strip'' di triangoli con <math>n</math> vertici rappresenta <math>n-2</math> 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 <math>\bar{v_t}</math>necessari per rappresentare un triangolo in una ''strip'' con <math>m</math> triangoli è <math>\bar{v_t}=1+2/m</math>.<ref name=":1" /> Nel caso di un ''fan'', il triangolo <math>i</math> è rappresentato dai vertici <math>\{v_0,v_{i+1},v_{i+2}\}</math> assumendo che <math>v_0</math>sia il vertice condiviso.<ref name=":1" /> <gallery mode="packed">
Alcuni esempi sono:
File:Triangle strip.png|Una strip di triangoli
* '''Face-vertex mesh''': una semplice lista di vertici e un insieme di facce che puntano ai vertici che formano il poligono.
File:Triangle fan.png|Un fan di triangoli
* '''Winged-edge mesh''', in cui ogni spigolo punta a due vertici, due facce, e ai quattro (in senso orario e antiorario) spigoli che toccano le facce. Questo tipo di maglie permettono un tempo costante di attraversamento della mesh, ma richiedono una quantità maggiore di dati da memorizzare.
</gallery>
* '''Half-edge mesh''': Simile al precedente, ma possiede solo informazioni riguardo agli half edge.
* '''Quad-edge mesh''': vengono memorizzati solo gli spigoli, gli half edge e i vertici senza considerare i poligoni. I poligoni sono impliciti nella rappresentazione, e si possono ottenere attraversando la struttura. I requisiti di memoria sono simili alle half edge mesh.
* '''Corner-tables''': memorizzano i vertici in una tabella predefinita, in modo che attraversando la tavola si possano ottenere i poligoni rappresentati implicitamente. La rappresentazione è più compatta e più efficiente per recuperare poligoni, ma le operazioni di modifica sono lente. Inoltre, questo tipo di mesh non rappresenta la mesh completamente.
* '''Vertex-vertex mesh''': una mesh "VV" rappresenta solo i vertici, che puntano ad altri vertici. Sia lo spigolo e le informazioni sulla faccia sono implicite nella rappresentazione. Tuttavia, la semplicità della rappresentazione consente di svolgere con maggiore efficienza diverse elaborazioni.


=== Varietà ===
La scelta della struttura dati viene fatta in base all'applicazione che utilizza tali dati, le prestazioni richieste, la dimensione dei dati, e le operazioni da eseguire. Ad esempio è più facile utilizzare triangoli piuttosto che altri poligoni, soprattutto in geometria computazionale. Per certe operazioni è necessario avere un accesso rapido alle informazioni e questo richiede strutture più complesse come le winged-edge mesh. Per il rendering hardware sono necessarie strutture semplici e di conseguenza le corner-tables sono comunemente incorporate in API di basso livello per il rendering come [[DirectX]] e [[OpenGL]].
{{Vedi anche|Varietà (geometria)}}
Una mesh 2D finita è una ''manifold mesh'' se gli spigoli e i triangoli che incontrano un vertice <math>v</math> possono essere ordinati in un ordine ciclico <math>t_1,e_1,t_2,e_2,...,t_n,e_n</math>senza ripetizioni, tali che lo spigolo <math>e_i</math> sia uno spigolo dei triangoli <math>t_i</math> e <math>t_{i+1}</math>.<ref name=":3" /> Questo implica che per ogni spigolo, ci sono esattamente due facce che lo contengono.<ref name=":3" />


Una superficie è detta ''2-manifold'' (''two-dimensional-manifold'') se l'[[intorno]] (''neighborhood'') di ogni punto <math>\mathrm{p}</math>sulla superficie è [[Omeomorfismo|omeomorfico]] a un [[disco]].<ref name=":1" /><ref>{{Cita libro|nome=Jakob Andreas|cognome=Baerentzen|nome2=Jens|cognome2=Gravesen|nome3=Francois|cognome3=Anton|titolo=Guide to Computational Geometry Processing: Foundations, Algorithms, and Methods|url=https://www.amazon.it/Guide-Computational-Geometry-Processing-Foundations/dp/1447140745/ref=sr_1_1?ie=UTF8&qid=1520175016&sr=8-1&keywords=guide+to+computational+geometry|accesso=2018-03-04|data=31 maggio 2012|editore=Springer-Verlag New York Inc|lingua=Inglese|p=|citazione=A shape is a manifold if any sufficiently small patch is homeomorphic to a disk.|ISBN=9781447140740}}</ref> Più semplicemente, significa che se abbiamo un disco possiamo centrarlo in <math>\mathrm{p}</math> e farlo aderire alla superficie attorno a esso. La definizione di ''2-manifold'' è estendibile alla superficie con [[Frontiera (topologia)|frontiere]], considerando di tagliare via metà del disco e farlo aderire alla frontiera.
=== Vertex-vertex mesh ===
[[File:Vertex-Vertex Meshes (VV).png|senza_cornice|437x437px|Descrizione del metodo di memorizzazione VV per le mesh poligonali.|centro]]
Una '''vertex-vertex mesh''' rappresenta un oggetto come un insieme di vertici connessi ad altri vertici. Questa è la rappresentazione più semplice, ma non ampiamente usata, dato che le informazione delle facce e degli spigoli sono implicite. Perciò, è necessario navigare nei dati in modo da generare un elenco di facce per il rendering. Inoltre, le operazioni su spigoli e facce non sono facilmente realizzabili.


Se la superficie è una mesh poligonale, possiamo determinare se è ''manifold'' controllando se le seguenti condizioni sono vere:<ref name=":1" />
Tuttavia, le mesh VV beneficiano di piccoli spazi di memoria e di un efficiente morphing della forma. La figura mostra una scatola di quattro lati rappresentata da una mesh VV. Ogni vertice è collegato ai vertici vicini. Si noti che gli ultimi due vertici, ''v8'' e ''v9'' (al centro superiore e inferiore della scatola), possiedono quattro vertici collegati piuttosto che cinque. Un sistema generale deve essere in grado di gestire un numero arbitrario di vertici collegati a un dato vertice.
* '''Edge Manifold''' – Ogni spigolo è condiviso da una faccia (significa che è sulla frontiera della mesh) o due facce.
* '''Vertex Manifold''' – Se due facce <math>f_a</math> e <math>f_b</math> condividono un vertice, allora possiamo muoverci da <math>f_a</math> a <math>f_b</math> "traversando" solo gli spigoli nel ''1-ring'' del vertice. In altre parole, possiamo camminare su tutto l'intorno del vertice senza passare per il vertice stesso.


=== Orientazione ===
Per una descrizione completa delle mesh VV vedere l'opera di Smith.<ref>{{Cita web|url=http://algorithmicbotany.org/papers/smithco.dis2006.pdf|titolo=Colin Smith, On Vertex-Vertex Meshes and Their Use in Geometric and Biological Modeling}}</ref>
{{Vedi anche|Orientazione}}
[[File:Normal vectors2.svg|miniatura|Un poligono e i suoi due vettori normali]]
Ogni 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 <math>\mathcal{K}</math>, essi possono descrivere un movimento orario (''clockwise'') o antiorario (''anti-clockwise'').<ref name=":1" /> Ovviamente, se guardiamo alle stesse facce dall'interno, queste orientazioni saranno scambiate.<ref name=":1" />


La definizione dell'orientazione torna utile per la determinazione del [[Normale (superficie)|vettore normale]]: se i vertici di un triangolo non-degenere (ossia uno con un'area non nulla) sono nei punti <math>P_i</math>, <math>P_j</math>, <math>P_k</math>, allora possiamo calcolare <math>(P_j-P_i)\times(P_k-P_i)</math>, che è il vettore perpendicolare al piano del triangolo.<ref name=":3" /> Da notare che se scambiamo i vertici <math>P_j</math> e <math>P_k</math>, il vettore risultante è negativo.<ref name=":3" /> 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.
=== Face-vertex mesh ===
[[File:Mesh_fv.jpg|senza_cornice|548x548px|centro]]
Una '''face-vertex mesh''' rappresenta un oggetto come un insieme di facce e un insieme di vertici. Questa è la rappresentazione di mesh più ampiamente utilizzata, trattandosi dell'input tipicamente accettato dal moderno hardware grafico.


==Strutture dati delle mesh==
Le face-vertex mesh migliorano le mesh VV in quanto consentono una ricerca esplicita dei vertici di una faccia e delle facce che circondano un vertice. La figura mostra l'esempio della scatola come una mesh FV. Il vertice ''v5'' è evidenziato per mostrano le facce che lo circondano. Si noti che in questo esempio, ogni faccia deve necessariamente avere esattamente tre vertici. Tuttavia, questo non significa che ogni vertice ha lo stesso numero di facce circostanti.
Per scegliere una ''mesh data structure'' ([[struttura dati]] della mesh), occorre considerare fattori [[Topologia|topologici]]<ref>{{Cita libro|autore=Walter Maraschini|autore2=Mauro Palma|titolo=Enciclopedia della Matematica|edizione=Edizione speciale per il Corriere della Sera|anno=2014|editore=Garzanti|p=|volume=M-Z|citazione=La topologia consiste nello studio delle proprietà della figure e delle forme geometriche che rimangono invariate quando esse vengono sottoposte a deformazioni continue, che si verificano cioè senza "strappi", "sovrapposizioni", "incollamenti" e "duplicazioni". In termini meno intuitivi, è lo studio delle proprietà delle figure geometriche del piano e dello spazio che rimangono invarianti per trasformazioni biunivoche e bicontinue, dette omeomorfismi o trasformazioni topologiche, ossia trasformazioni che mantengono, anche inversamente, proprietà di "convergenza" e di "connessione"}}</ref> e [[Algoritmo|algoritmici]]:<ref name=":2" />
* '''Requisiti topologici''' – Quali tipi di mesh è necessario rappresentare per mezzo della struttura dati? Possiamo fare affidamento a mesh ''2-manifold'', o abbiamo necessità di rappresentare spigoli complessi e vertici singolari? Possiamo limitarci a ''triangle meshes'' pure, o abbiamo necessità di rappresentare mesh poligonali arbitrarie? Le mesh sono regolari, semiregolari, irregolari?<ref>{{Cita libro|nome=Mario|cognome=Botsch|nome2=Leif|cognome2=Kobbelt|nome3=Mark|cognome3=Pauly|titolo=Polygon Mesh Processing|url=https://www.amazon.it/Polygon-Mesh-Processing-Mario-Botsch/dp/1568814267/ref=tmm_hrd_swatch_0?_encoding=UTF8&qid=1520103876&sr=1-3|accesso=2018-03-04|edizione=1|data=2010-08-09|editore=A K Peters/CRC Press|lingua=Inglese|p=|citazione=Un vertice in una triangle mesh è detto regolare se la sua valenza (ovvero il suo numero di vertici vicini) è 6 per i vertici interni o 4 per i vertici ai confini. Nelle mesh quadrangolari, le valenze regolari sono 4 e 3, rispettivamente. [...] La struttura globale di una mesh può essere classificata come irregolare, semiregolare, altamente regolare, o regolare. [...] In una mesh regolare tutti i vertici sono regolari. Una mesh regolare può essere compattamente rappresentata come un array 2D che può essere usato per un rendering efficiente (una cosiddetta "immagine geometrica")|ISBN=9781568814261}}</ref> Vogliamo costruire una gerarchia di mesh via via più rifinite?
* '''Requisiti algoritmici''' – Quali tipi di algoritmi opereranno sulla struttura dati? Vogliamo semplicemente renderizzare la mesh, o necessitiamo di un accesso efficiente a intorni locali di vertici, spigoli e facce? La mesh sarà statica o la sua geometria e/o connettività cambierà nel tempo? Abbiamo necessità di associare dati con vertici, spigoli e facce della mesh? Abbiamo requisiti specifici in termini di consumo della memoria (ovvero, gli insiemi di dati sono massivi)?
La scelta di una struttura dati richiede la misurazione di vari criteri come...<ref name=":2" />
# Il tempo per costruirla durante la pre-elaborazione.
# Il tempo di risposta a una specifica [[query]].
# Il tempo per eseguire una specifica operazione.
# Il consumo e la ridondanza della memoria.


=== Rappresentazioni delle mesh poligonali ===
Per il rendering, l'elenco delle facce viene di solito trasmesso alla GPU come un insieme di indici ai vertici, e i vertici sono inviati come strutture di posizione/colore/normale (nella figura è indicata solo la posizione). Ciò da il vantaggio che le modiche fatte alla forma, ma non geometria, possono essere dinamicamente aggiornate semplicemente rispedendo i dati del vertice senza aggiornare la connessione della faccia.
Finora, 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.<ref name=":4" />


La soluzione più semplice consiste nel memorizzare ogni poligono con la posizione geometrica di ognuno dei suoi vertici.<ref name=":4" /> Tuttavia, fare questo significherebbe non avere alcuna informazione sulla connettività – effettivamente, si otterrebbe solo una zuppa di poligoni che può essere [[Rendering|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.
La modellazione richiede una facile traversata di tutte le strutture. Con le mesh FV è facile trovare i vertici di una faccia. Inoltre, l'elenco dei vertici contiene un elenco delle facce connesse a ogni vertice. A differenza delle mesh VV, sia le facce che i vertici sono espliciti, quindi la localizzazione di facce e vertici è a tempo costante. Tuttavia, gli spigoli sono impliciti, quindi è necessaria una ricerca per trovare tutte le facce che circondano una data faccia. Altre operazioni dinamiche, come la divisione (splitting) o la fusione (merging) di una faccia, sono anch'esse difficili con una face-vertex mesh.


=== Winged-edge mesh ===
==== Indexed face set ====
Una più utile e semplice rappresentazione è l'''indexed face set''.<ref name=":4" /> 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.
[[File:Mesh_we2.jpg|centro|senza_cornice|750x750px]]
Una '''winged-edge mesh''', introdotta da Bruce Baumgart nel 1975, rappresenta esplicitamente i vertici, le facce e gli spigoli di una mesh. Questo tipo di rappresentazione è ampiamente utilizzato in programmi di modellazione per fornire la maggiore flessibilità nella lavorazione della geometria della mesh, perché le operazioni di splitting e merging possono essere eseguite rapidamente. I loro principali punti a sfavore sono i requisiti di archiviazione (di grandi dimensioni) e una maggiore complessità dovuta al mantenimento di molti indici. Una buona discussione sulle problematiche di implementazione delle winged-edge mesh, può essere trovata nel libro ''Graphics Gems II''.


==== Edge-based data structure ====
Le winged-edge mesh affrontano la questione dell'attraversamento di spigolo in spigolo, e forniscono un insieme ordinato di facce intorno a uno spigolo. Per ogni dato spigolo, il numero di spigoli in uscita può essere arbitrario. Per semplificare ciò, le winged-edge mesh ne forniscono solo quattro: gli spigoli più vicini in senso orario, e quelli in senso antiorario, ad ogni estremità. Gli altri spigoli possono essere attraversati in modo incrementale. Le informazioni per ogni spigolo, perciò, assomigliano a una farfalla, da qui il nome "winged-edge mesh" (mesh di spigoli ad ala). La figura mostra la "scatola" come una winged-edge mesh. I dati complessivi di uno spigolo consistono in 2 vertici, 2 facce e 4 spigoli.
Il principio della [[struttura dati]] ''edge-based'', è quella di rappresentare la connettività memorizzando esplicitamente come gli spigoli di relazionano gli uni agli altri.<ref name=":4" /> Per ogni faccia della mesh, si memorizza semplicemente un [[Puntatore (programmazione)|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''<ref>{{Cita web|url=https://web.archive.org/web/20110324081434/http://wiki.cgsociety.org/index.php/Edge_Loop|titolo=Edge Loop - CGWiki|data=2011-03-24|accesso=2018-03-04}}</ref> 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 indicenti, solo le ''manifolds'' sono di solito rappresentabili usando queste strutture dati.


==== Winged edge data structure ====
Renderizzare graficamente una winged-edge mesh richiede la generazione di un elenco di indici delle facce. Questo è di solito fatto solo quando cambia la geometria. Le winged-edge mesh sono ideali per la geometria dinamica, come le superfici di suddivisione e la modellazione interattiva, poiché le modifiche alla mesh possono verificarsi localmente. La traversata lungo la mesh, forse necessaria per la rilevazione di collisioni, può essere realizzata in modo efficiente.
Un ''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.<ref>{{Cita libro|nome=Bruce G.|cognome=Baumgart|titolo=Winged Edge Polyhedron Representation|url=https://www.amazon.com/Winged-Polyhedron-Representation-Bruce-Baumgart/dp/B00B06RJJ8/ref=sr_1_fkmr0_1?ie=UTF8&qid=1520179650&sr=8-1-fkmr0&keywords=Winged-Edge+Polyhedron+Representation+for+Computer+Vision|accesso=2018-03-04|data=1972|editore=PN}}</ref>


==== Half edge data structure ====
Vedi l'opera di Baumgart per maggiori dettagli.<ref>{{Cita libro|autore=Bruce Baumgart|titolo=Winged-Edge Polyhedron Representation for Computer Vision|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>
La rappresentazione ''half edge'' presenta due rappresentazioni di uno spigolo dato.<ref name=":4" /> 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.<ref name=":4" /> 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'<nowiki/>''edge loop'' di una faccia.<gallery mode="packed" heights="150">

File:Mesh we2.jpg|Winged edge data structure
=== Render dynamic mesh ===
File:Dcel-halfedge-connectivity.svg|Half edge data structure
La winged-edge mesh non è l'unica rappresentazione che permette modifiche dinamiche alla geometria. Una nuova rappresentazione che unisce le proprietà della winged-edge mesh e della face-vertex mesh si chiama '''render dynamic mesh''', che memorizza esplicitamente entrambe: i vertici di una faccia e le facce prossime a un vertice (come le mesh FV), e le facce e i vertici prossimi a uno spigolo (come una winged-edge).
</gallery>

Una render dynamic mesh richiede minore spazio di memorizzazione rispetto a una mesh winged-edge standard e può essere renderizzata direttamente dall'hardware grafico, in quanto l'elenco delle facce contiene un elenco dei vertici. Inoltre, la traversata da vertice a faccia è esplicita (a tempo costante), come lo è da faccia a vertice. Le mesh RD non richiedono i quattro spigoli in uscita, poiché questi possono essere trovati facendo la traversata da spigolo a faccia, quindi da faccia a spigolo prossimo.

Le mesh RD beneficiano delle caratteristiche delle winged-edge mesh, permettendo alla geometria di essere dinamicamente aggiornata di volta in volta.

Vedi l'opera di Tobler & Maierhofer per maggiori dettagli.<ref>{{Cita web|url=http://wscg.zcu.cz/wscg2006/Papers_2006/Short/E17-full.pdf|titolo=Tobler & Maierhofer, A Mesh Data Structure for Rendering and Subdivision}}</ref>

=== Half-edge mesh ===
[[File:Dcel-halfedge-connectivity.svg|centro|senza_cornice|264x264px]]
Una '''half-edge mesh''' (o conosciuta anche come '''doubly connected edge list'''; '''DCEL'''), è una struttura dati che rappresenta un incorporamento di un [[grafo]] planare in un piano, e [[Politopo|politopi]] nello spazio 3D. Questa struttura dati fornisce una efficiente manipolazione delle informazioni sulla [[topologia]] associate agli oggetti in questione (vertici, spigoli, facce). È utilizzata in molti algoritmi di [[geometria computazionale]] per gestire le suddivisioni poligonali del piano, comunemente chiamati ''planar straight-line graphs''. Per esempio, un [[diagramma di Voronoi]] è comunemente rappresentato da una DCEL dentro una [[bounding box]].

Questa struttura dati fu originariamente proposta da Muller e Preparata<ref>{{Cita pubblicazione|autore=Muller, D. E.; Preparata|titolo=Finding the Intersection of Two Convex Polyhedra|rivista=|volume=|numero=}}</ref> per rappresentazioni di politopi convessi.

Una DCEL è molto più di un elenco di spigoli doppiamente connessi. Nel caso generale, una DCEL contiene una voce per ogni spigolo, vertice e faccia della suddivisione. Ogni voce può contenere informazioni addizionali, per esempio, una faccia può contenere il nome dell'area. Ogni spigolo di solito racchiude due facce ed è perciò conveniente considerare ogni spigolo come due mezzi-spigoli. Ogni mezzo-spigolo (half-edge) racchiude una singola faccia e così possiede una indicazione verso quella faccia. Un mezzo-spigolo possiede una indicazione verso il prossimo mezzo-spigolo e il precedente della stessa faccia. Per raggiungere l'altra faccia, possiamo muoverci verso il gemello del mezzo-spigolo e quindi traversare verso l'altra faccia. Ogni mezzo-spigolo ha anche una indicazione al proprio vertice di origine (il vertice di destinazione può essere ottenuto interrogando quello di origine o il suo gemello, o il successivo mezzo-spigolo).

Ogni vertice contiene le proprie coordinate e in più memorizza una indicazione verso uno spigolo arbitrario che ha il vertice come propria origine. Ogni faccia memorizza una indicazione verso alcuni mezzi-spigoli, o i propri più esterni (se la faccia non è racchiusa allora l'indicazione è nulla). Possiede anche un elenco di mezzi-spigoli, uno per ogni spigolo che può essere incidente entro la faccia. Se i vertici o le facce non contengono alcuna informazione interessante, non c'è necessita di memorizzarli, così da salvare spazio e ridurre la complessità della struttura dati.


==Formati di file per le mesh==
==Formati di file per le mesh==

Versione delle 18:53, 4 mar 2018

Un esempio di mesh poligonale

Una 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]

Negli anni recenti, le mesh poligonali sono divenute via via sempre più popolari e al giorno d'oggi sono usate 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]

Definizione

Intuitivamente, 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 una 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]

Caratteristiche

Una 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:

  • VerticePunto dello spazio, dotato quindi di coordinate , , che ne determinano la posizione. In inglese: vertex.
  • SpigoloSegmento che congiunge due vertici nello spazio. In inglese: edge.
  • Faccia – Definita attraverso la connessione e chiusura di almeno tre spigoli.[9] In inglese: face.

Fans e Strips

L'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à

Lo stesso argomento in dettaglio: Varietà (geometria).

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]

  • Edge Manifold – Ogni spigolo è condiviso da una faccia (significa che è sulla frontiera della mesh) o due facce.
  • Vertex Manifold – Se due facce e condividono un vertice, allora possiamo muoverci da a "traversando" solo gli spigoli nel 1-ring del vertice. In altre parole, possiamo camminare su tutto l'intorno del vertice senza passare per il vertice stesso.

Orientazione

Lo stesso argomento in dettaglio: Orientazione.
Un poligono e i suoi due vettori normali

Ogni 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 mesh

Per scegliere una mesh data structure (struttura dati della mesh), occorre considerare fattori topologici[11] e algoritmici:[4]

  • Requisiti topologici – Quali tipi di mesh è necessario rappresentare per mezzo della struttura dati? Possiamo fare affidamento a mesh 2-manifold, o abbiamo necessità di rappresentare spigoli complessi e vertici singolari? Possiamo limitarci a triangle meshes pure, o abbiamo necessità di rappresentare mesh poligonali arbitrarie? Le mesh sono regolari, semiregolari, irregolari?[12] Vogliamo costruire una gerarchia di mesh via via più rifinite?
  • Requisiti algoritmici – Quali tipi di algoritmi opereranno sulla struttura dati? Vogliamo semplicemente renderizzare la mesh, o necessitiamo di un accesso efficiente a intorni locali di vertici, spigoli e facce? La mesh sarà statica o la sua geometria e/o connettività cambierà nel tempo? Abbiamo necessità di associare dati con vertici, spigoli e facce della mesh? Abbiamo requisiti specifici in termini di consumo della memoria (ovvero, gli insiemi di dati sono massivi)?

La scelta di una struttura dati richiede la misurazione di vari criteri come...[4]

  1. Il tempo per costruirla durante la pre-elaborazione.
  2. Il tempo di risposta a una specifica query.
  3. Il tempo per eseguire una specifica operazione.
  4. Il consumo e la ridondanza della memoria.

Rappresentazioni delle mesh poligonali

Finora, 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 set

Una 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 structure

Il principio della struttura dati edge-based, è quella di rappresentare la connettività memorizzando esplicitamente come gli spigoli di 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 indicenti, solo le manifolds sono di solito rappresentabili usando queste strutture dati.

Winged edge data structure

Un 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 structure

La 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 mesh

Alcuni formati di file che memorizzano informazioni sulle mesh sono i seguenti:

Note

  1. ^ (IT) Francesco Siddi, Grafica 3D con Blender, Apogeo, 25 giugno 2014, ISBN 9788850333141. URL consultato il 3 marzo 2018.
  2. ^ (IT) Giuseppe Ragazzini, Il Ragazzini 2017. Dizionario inglese-italiano, italiano-inglese. Con Contenuto digitale, Zanichelli, 1º giugno 2016, ISBN 9788808737373. URL consultato il 3 marzo 2018.
  3. ^ mesh - Dizionario inglese-italiano WordReference, su www.wordreference.com. URL consultato il 3 marzo 2018.
  4. ^ a b c (EN) Mario Botsch, Leif Kobbelt e Mark Pauly, Polygon Mesh Processing, 1ª ed., A K Peters/CRC Press, 9 agosto 2010, ISBN 9781568814261. URL consultato il 3 marzo 2018.
  5. ^ a b c d e f g h i j (EN) Fabio Ganovelli, Massimiliano Corsini e Sumanta Pattanaik, Introduction to Computer Graphics: A Practical Learning Approach, 1ª ed., Chapman and Hall/CRC, 22 ottobre 2014, ISBN 9781439852798. URL consultato il 3 marzo 2018.
  6. ^ a b c d e (EN) John F. Hughes, Andries Van Dam e Morgan Mcguire, Computer Graphics: Principles and Practice, 3ª ed., Addison-Wesley Professional, 28 febbraio 2009, ISBN 9780321399526. URL consultato il 4 marzo 2018.
  7. ^ a b c d e f g (EN) Jakob Andreas Baerentzen, Jens Gravesen e Francois Anton, Guide to Computational Geometry Processing: Foundations, Algorithms, and Methods, Springer-Verlag New York Inc, 31 maggio 2012, ISBN 9781447140740. URL consultato il 4 marzo 2018.
  8. ^ (IT) Werner Stefano Villa, Autodesk AutoCad 2017. Guida completa per architettura, meccanica e design, Tecniche Nuove, 23 giugno 2016, ISBN 9788848131360. URL consultato il 3 marzo 2018.
  9. ^ Francesco Siddi, Grafica 3D con Blender.
  10. ^ (EN) Jakob Andreas Baerentzen, Jens Gravesen e Francois Anton, Guide to Computational Geometry Processing: Foundations, Algorithms, and Methods, Springer-Verlag New York Inc, 31 maggio 2012, ISBN 9781447140740. URL consultato il 4 marzo 2018.
    «A shape is a manifold if any sufficiently small patch is homeomorphic to a disk.»
  11. ^ Walter Maraschini e Mauro Palma, Enciclopedia della Matematica, M-Z, Edizione speciale per il Corriere della Sera, Garzanti, 2014.
    «La topologia consiste nello studio delle proprietà della figure e delle forme geometriche che rimangono invariate quando esse vengono sottoposte a deformazioni continue, che si verificano cioè senza "strappi", "sovrapposizioni", "incollamenti" e "duplicazioni". In termini meno intuitivi, è lo studio delle proprietà delle figure geometriche del piano e dello spazio che rimangono invarianti per trasformazioni biunivoche e bicontinue, dette omeomorfismi o trasformazioni topologiche, ossia trasformazioni che mantengono, anche inversamente, proprietà di "convergenza" e di "connessione"»
  12. ^ (EN) Mario Botsch, Leif Kobbelt e Mark Pauly, Polygon Mesh Processing, 1ª ed., A K Peters/CRC Press, 9 agosto 2010, ISBN 9781568814261. URL consultato il 4 marzo 2018.
    «Un vertice in una triangle mesh è detto regolare se la sua valenza (ovvero il suo numero di vertici vicini) è 6 per i vertici interni o 4 per i vertici ai confini. Nelle mesh quadrangolari, le valenze regolari sono 4 e 3, rispettivamente. [...] La struttura globale di una mesh può essere classificata come irregolare, semiregolare, altamente regolare, o regolare. [...] In una mesh regolare tutti i vertici sono regolari. Una mesh regolare può essere compattamente rappresentata come un array 2D che può essere usato per un rendering efficiente (una cosiddetta "immagine geometrica")»
  13. ^ Edge Loop - CGWiki, su wiki.cgsociety.org, 24 marzo 2011. URL consultato il 4 marzo 2018 (archiviato dall'url originale il 24 marzo 2011).
  14. ^ Bruce G. Baumgart, Winged Edge Polyhedron Representation, PN, 1972. URL consultato il 4 marzo 2018.

Voci correlate

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica