Incremental Simp Method. Fondamenti di Grafica Tridimensionale. The main simplification loop. The common framework: loop

Documenti analoghi
Fondamenti di Grafica Tridimensionale

Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione

Le coniche furono studiate già 2000 anni fa dagli antichi Greci in particolare da Apollonio (III secolo a.c) che ne scoprì numerose proprietà.

Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

REGISTRATION GUIDE TO RESHELL SOFTWARE

College Algebra. Logarithms: Denitions and Domains. Dr. Nguyen November 9, Department of Mathematics UK

Graphs: Cycles. Tecniche di Programmazione A.A. 2012/2013

Constant Propagation. A More Complex Semilattice A Nondistributive Framework

Quadrature. Emma Perracchione. Corso di Calcolo Numerico per Ingegneria Meccanica - Matr. PARI (Univ. PD)

Stringhe. Prof. Lorenzo Porcelli

UML: Aggregazione. class A { int s; public void sets(int){ }; public int gets() { }; class B {A ob; public void usea() { }; }

Gennaio

Corso di laurea triennale in Informatica Turno A

A.A. 2006/2007 Laurea di Ingegneria Informatica. Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio

Finite Model Theory / Descriptive Complexity: bin

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Informatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

Tipici tempi di esecuzione. Martedì 7 ottobre 2014

Algoritmi Priority-Driven RT. Corso di Sistemi RT Prof. Davide Brugali Università degli Studi di Bergamo

Esercitazione di lunedì - TUTTE LE MATRICOLE -

Esercizi (esercizi 1, 2, 3 e 4) Totale /6 /12 /6 /6 /30

Le Basi di Dati Attive

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

A review of some Java basics. Java pass-by-value and List<> references


Certificato Medico Per Patente Nautica2

Fiori di campo. Conoscere, riconoscere e osservare tutte le specie di fiori selvatici più note

Downloading and Installing Software Socio TIS

Template (1) Molte volte l operato di una funzione o le proprietà di una classe non dipendono dal tipo dei dati coinvolti

Scheduling. Scheduler. Class 1 Class 2 Class 3 Class 4. Scheduler. Class 1 Class 2 Class 3 Class 4. Scheduler. Class 1 Class 2 Class 3 Class 4

update Intro Stato Pallina che sembri tale Stato

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza

Geometric Mesh Processing

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda

Programmazione Caratteri, stringhe, tipo unit ed ennuple

La Pila in Java - 1. package strutture; public class Pila { int size; int defaultgrowthsize; int marker; int contenuto[];

AVVISO n Giugno Mittente del comunicato : Borsa Italiana. Societa' oggetto dell'avviso

Network. Marco Piastra. Laboratorio di Visione Artificiale Università degli Studi di Pavia. A Growing. Self-Organizing

Programmazione 2 - Marco Ronchetti. Fondamenti di Java. Fac.Scienze Università di Trento. Static

Allocazione dinamica della memoria

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Eserciziario Di Microeconomia Esercizi Svolti E Commentati Per Il Corso Di Economia Politica I Microeconomia

Pila.h. #define DEFAULTGROWTHSIZE 5 struct Pila { int size; int marker; int * contenuto; } ;

Programmazione Funzionale

AVVISO n Giugno Mittente del comunicato : BORSA ITALIANA. Societa' oggetto dell'avviso

SRT064 BTH SRT051 BTH SRT052 BTH

Computer Graphics. Digital representation of 3D objects. 3D Rendering. Scena 3D rendering image. Marco Tarini - univ insubria AA 2016/2017

Informatica 3. Informatica 3. LEZIONE 22: Politiche di risoluzione delle collisioni. Lezione 23 - Modulo 1. Politiche di risoluzione delle collisioni

NATIONAL SPORT SCHOOL

Libri Di Matematica Quinta Elementare

AVVISO n AIM -Italia/Mercato Alternativo del Capitale. 23 Giugno Mittente del comunicato : BORSA ITALIANA. Societa' oggetto dell'avviso

Write Event 10 in Metrology Event Log

Programmazione C. Funzioni e procedure: Activation record. passaggio per indirizzo

Resources and Tools for Bibliographic Research. Search & Find Using Library Catalogues

Introduzione a Matlab

SAP UniEmens 2.3. Rollout

Uguaglianza e Identità. (no, non avete sbagliato corso )

Laboratorio di Algoritmi e Strutture Dati

Le Basi di Dati Attive

Informatica I Facoltà di Ingegneria

AVVISO n Maggio 2018 Bit Equity MTF. Mittente del comunicato : BORSA ITALIANA. Societa' oggetto dell'avviso

SUPPLIER TECHNICAL DRAWING MANAGEMEMENT GESTIONE DEI DISEGNI TECNICI DA PARTE DEL FORNITORE 1. INTRODUZIONE 1. INTRODUCTION 2. DOCUMENTI APPLICABILI

Classi di memorizzazione

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.

Struttura di un programma C++

DICHIARAZIONE DI RESPONSABILITÀ

Data structures for 3D Meshes

PROGRAMMAZIONE 2 15bisbis. OCaML: un veloce ripasso

WEB OF SCIENCE. COVERAGE: multidisciplinary TIME RANGE: DOCUMENT TYPES: articles, proceedings papers, books

Informatica 3. Informatica 3. LEZIONE 12: Liste. Lezione 12 - Modulo 1. Posizione corrente. Introduzione

Il sistema dei tipi in ML. cenni

Serie 9000 RACCORDI A COMPRESSIONE - Serie Aggiornamento: 16 Maggio 2014 Updated May 16, 2014

Customer Centric/Inquiry/E-bill. Tanya Enzminger

INFORMATICA 3 Prof.ssa Sara Comai

Programmazione in Rete

Optmization Methods for Machine Learning. Gradient method for multilayer perceptron

BREVE INTRODUZIONE ALLA PROGRAMMAZIONE IN C++ E MATHEMATICA

MODIFICA AL REGOLAMENTO DEL MERCATO AIM ITALIA/MERCATO ALTERNATIVO DEL CAPITALE REGOLAMENTO DEGLI OPERATORI E DELLE NEGOZIAZIONI

Si faccia riferimento all Allegato A - OPS 2016, problema ricorrente REGOLE E DEDUZIONI, pagina 2.

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

CATALOGO PARTI DI RICAMBIO SPARE PARTS CATALOGUE CATALOGUE DES PIECES DE RECHANGE ERSATZTEILKATALOG N..92. IT Modulo RICHIESTA DI GARANZIA

Map<K,V> ESERCITAZIONE. Dalla documentazione Java 02/04/15

DESIGN - LAUREE MAGISTRALI MASTER DEGREE COURSES ESITO VALUTAZIONI PER LE AMMISSIONI AL CORSO DI LAUREA MAGISTRALE

Attraversamento di un albero (binario)

User Manual. Rev Date: 31/05/2018

M/S AMARU' GIOVANNI VIA S. ERASMO snc VASCHE DI CASTEL S. ANGELO (RI) ITALY

M/S CERAMICA SCARABEO Località Pian del Trullo Fabrica di Roma (VT)

Introduzione a Matlab

M/S AMARU' GIOVANNI VIA S. ERASMO snc VASCHE DI CASTEL S. ANGELO (RI) ITALY

FISE Federazione Italiana Sport Equestri

ORIGINEPIETRA Contemporary Mood collection. D+_interno_ORIGINEPIETRA_contemporary.indd 1 27/02/

Informatica e Laboratorio di Programmazione C++ Object Oriented Programming Alberto Ferrari

Blocchi funzione: FbModbusAsciiMs

DESIGN - LAUREE MAGISTRALI MASTER DEGREE COURSES ESITO VALUTAZIONI PER LE AMMISSIONI AL CORSO DI LAUREA MAGISTRALE

Grammatica di base. Si chiama: main Non prende nessun argomento Non fa niente Ritorna un intero al sistema

Data structures for 3D Meshes

Transcript:

Incremental Simp Method The common framework: Fondamenti di Grafica Tridimensionale Paolo Cignoni p.cignoni@isti.cnr.it http://vcg.isti.cnr.it/~cignoni loop select the element to be deleted/collapsed; evaluate approximation introduced; update the mesh after deletion/collapse; until mesh size/precision is satisfactory; 1 EG99 Tutorial 2 Simplification using Quadric Error Metrics [Garland et al. Sig 97] Based on incremental edge-collapsing Quadric Error Metrics The main simplification loop vcg::localoptimization<mymesh> DeciSession(mesh); DeciSession.Init<MyTriEdgeCollapse >(); DeciSession.SetTargetSimplices(FinalSize); DeciSession.SetTimeBudget(0.5f); while(decisession.dooptimization() && mesh.fn>finalsize) printf("current Mesh size %7i heap sz %9i err %9g \r", mesh.fn,decisession.h.size(),decisession.currmetric); printf("mesh %d %d Error %g \n", mesh.vn,mesh.fn,decisession.currmetric); but can also collapse vertex couples which are not connected (topology is not preserved) EG99 Tutorial 3 4 1

LocalOptimization Classi in gioco Classe astratta per il loop di ottimizzazione LocalModification Classe astratta per una generica operazione che modifica la mesh localmente con un certo costo EdgeCollapse TriEdgeCollapse Particolare local modification TriEdgeCollapse Quadric 5 6 Local Modification template <class MeshType> class LocalModification public: typedef typename LocalOptimization<MeshType>::HeapType HeapType; typedef typename MeshType::ScalarType ScalarType; inline LocalModification()}; virtual ~LocalModification()}; virtual ModifierType IsOfType() = 0 ; /// return the type of operation /// return true if the data have not changed since it was created virtual bool IsUpToDate() = 0 ; /// return true if no constraint disallow this operation to be performed (ex: change of topology in edge collapses) virtual bool IsFeasible() = 0; /// Compute the priority to be used in the heap virtual ScalarType ComputePriority()=0; /// Return the priority to be used in the heap (implement static priority) virtual ScalarType Priority() const =0; /// Perform the operation and return the variation in the number of simplicies (>0 is refinement, <0 is simplification) virtual void Execute(MeshType &m)=0; /// perform initialization static void Init(MeshType &m, HeapType&); virtual const char *Info(MeshType &) return 0;} /// Update the heap as a consequence of this operation virtual void UpdateHeap(HeapType&)=0; }; //end class local modification 7 Local Modification Classe astratta generica Potrebbe essere un edge collapse Uno swap Un vertex deletion ecc. Astrarre una generica operazione di modifica locale alla mesh Adatta ad essere prioritizzata Deve saper dare una priorita' Sapersi applicare alla mesh Sapere se e' sempre valida 8 2

EdgeCollapse e TriEdgeCollapse EdgeCollapse Classe astratta per rappresentare un collasso di un edge su una generica mesh Non sa nulla di priorita' quadriche ecc TriEdgeCollapse Generica local op basata su collasso Sa aggiornare lo heap Eseguirsi, sapere se e' valida ecc. Da questa si deriva quella con le quadriche template <class TRI_MESH_TYPE> class EdgeCollapse typedef typename vcg::face::vfiterator<facetype> VFI; typedef typename std::vector<vcg::face::vfiterator<facetype> > VFIVec; static VFIVec & AV0()static VFIVec av0; return av0;} static VFIVec & AV1()static VFIVec av1; return av1;} static VFIVec & AV01()static VFIVec av01; return av01;} bool LinkConditions(EdgeType pos); void FindSets(EdgeType &p)bool LinkConditions(EdgeType pos); int DoCollapse(EdgeType & c, const Point3<ScalarType> &p); } 9 10 2-Manifold A surface Σ in R 2 such that any point on Σ has an open neighborhood homeomorphic to an open disc or to half an open disc in R 2 A edge collapse can create non manifold situations Let Σ be a 2 simplicial complex without boundary Σ is obtained by collapsing the edge e = (ab) Let Lk (σ) be the set of all the faces of the co-faces of σ disjoint from σ a ab 11 Σ and Σ are homeomorphic iff Lk (a) Lk (b) = Lk (ab) [Dey 99] 12 3

Lk(a) Lk(b)= x,y }=Lk(ab) a x b Mesh with boundary can be managed by considering a dummy vertex v d and, for each boundary edge e a tetrahedron connecting e with v d Lk(a) Lk(b) =x,y,z,zx} y,z}= Lk(ab) y Think it wrapped on the surface of a sphere x a z b y 13 14 docollapse for(i=av01().begin();i!=av01().end();++i) FaceType & f = *((*i).f); assert(f.v((*i).z) == c.v(0)); vcg::face::vfdetach(f,((*i).z+1)%3); vcg::face::vfdetach(f,((*i).z+2)%3); f.setd(); n_face_del++; } //set Vertex Face topology for(i=av0().begin();i!=av0().end();++i) (*i).f->v((*i).z) = c.v(1); // In tutte le facce incidenti in v0, si sostituisce v0 con v1 (*i).f->vfp((*i).z) = (*i).f->v((*i).z)->vfp(); // e appendo la lista di facce incidenti in v1 a questa faccia (*i).f->vfi((*i).z) = (*i).f->v((*i).z)->vfi(); (*i).f->v((*i).z)->vfp() = (*i).f; (*i).f->v((*i).z)->vfi() = (*i).z; } Lazy heap Si suppone di avere uno heap con tutte le operazioni Estraggo da heap e aggiorno la mesh tali operazioni invalidano/modificano la mesh e quindi le priorità/validità di parte delle azioni già presenti nello Heap c.v(0)->setd(); c.v(1)->p()=p; return n_face_del; 15 16 4

Due Soluzioni Lazy Heap Link espliciti elementi mesh->heap e aggiornamento dello stesso Lazy update Si mettono nello heap tutte le nuove operazioni con la nuova priorità Quando si estrae un'op dall heap si controlla che sia sempre valida Di tanto in tanto garbage collection sullo heap Marche incrementali Strumento generico per marcare oggetti in una collezione con C(mark elem) = O(1) C(unmark elem) = O(1) C(unmark All Elem) = O(1) Memorizza per ogni elem un intero mark invece di un bit Esiste una marca globale a livello della collezione di elementi 17 18 Marche incrementali Un oggetto è marcato se Dati Validità collasso elem.mark==global.mark Marcatura di un elem elem.mark := global.mark Smarcatura globale global.mark++ Spesso le marche vengono dette anche marche temporali per indicare che dicono quando un certo elem è valido Ogni vertice ha una marca temporale: quando e' stato modificato l'ultima volta Ogni collasso (coppia di vertici) ha una marca temporale quando è stato inserito nello heap Un collasso è valido se I due vertici non sono stati cancellati Il collasso e' stato messo nello heap piu recentemente della data di ultima modifica dei vertici 19 20 5

Error Heuristics Quadric Error for Surfaces Let nt v +d =0 be the equation representing a plane The squared distance of a point x from the plane is D(x) = x(nn T )x + 2dn T x + d 2 This distance can be represented as a quadric Q = (A,b,c) = (nn T,dn,d 2 ) Q(x)= xax + 2b T x + c Quadric The boundary error is estimated by providing for each boundary vertex v a quadric Q v representing the sum of the all the squared distances from the faces incident in v The error of collapsing an edge e=(v,w) can be evaluated as Q w (v). After the collapse the quadric of v is updated as follow Q v = Q v + Q w 21 22 6