Fondamenti di Grafica Tridimensionale

Documenti analoghi
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à.

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

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

Constant Propagation. A More Complex Semilattice A Nondistributive Framework

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

Gennaio

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

Stringhe. Prof. Lorenzo Porcelli

Finite Model Theory / Descriptive Complexity: bin

Corso di laurea triennale in Informatica Turno A

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

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

Esercitazione di lunedì - TUTTE LE MATRICOLE -

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

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

Tipici tempi di esecuzione. Martedì 7 ottobre 2014

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


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

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

Le Basi di Dati Attive

update Intro Stato Pallina che sembri tale Stato

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

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

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

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

Certificato Medico Per Patente Nautica2

Struttura di un programma C++

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

Downloading and Installing Software Socio TIS

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

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

Programmazione Funzionale

SRT064 BTH SRT051 BTH SRT052 BTH

Geometric Mesh Processing

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

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

SAP UniEmens 2.3. Rollout

Introduzione a Matlab

Data structures for 3D Meshes

FISE Federazione Italiana Sport Equestri

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

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

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

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

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

Allocazione dinamica della memoria

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

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

Write Event 10 in Metrology Event Log

NATIONAL SPORT SCHOOL

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

Libri Di Matematica Quinta Elementare

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

Introduzione a Matlab

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

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

DICHIARAZIONE DI RESPONSABILITÀ

Informatica I Facoltà di Ingegneria

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

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

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

Corso di Algoritmi e Strutture Dati con Laboratorio. The JCF(continua): L interfaccia Map

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

You can visualize the free space percentage in Compact Flash memory from the MENU/INFO C.F. UTILITY-FREE SPACE page.

Customer Centric/Inquiry/E-bill. Tanya Enzminger

Il sistema dei tipi in ML. cenni

Puntatori, array, incrementi Array come parametri Array di puntatori. Programmazione 1. Lezione 12. Vincenzo Marra.

Optmization Methods for Machine Learning. Gradient method for multilayer perceptron

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

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

Attraversamento di un albero (binario)

strutturare dati e codice

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Le piccole cose che fanno dimagrire: Tutte le mosse vincenti per perdere peso senza dieta (Italian Edition)

Data structures for 3D Meshes

Collezioni, mappe e iteratori (a cura del Prof. Marco Patella)

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06

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

Capitolo 7 I puntatori in C

Convegno Qualità Microbiologica dei Cosmetici: Aspetti Tecnici e Normativi Milano, 15 maggio Lucia Bonadonna Istituto Superiore di Sanità

User Manual. Rev Date: 31/05/2018

19 touchscreen display

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

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

Exam of ELECTRONIC SYSTEMS June 15 th, 2012 Prof. Marco Sampietro

F. Fusi, A. Fumagalli

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)

//=============================== class String { // VARIABILI DI ISTANZA char * base; int length;

Lezione 9: Strutture e allocazione dinamica della memoria

Transcript:

Fondamenti di Grafica Tridimensionale Paolo Cignoni p.cignoni@isti.cnr.it http://vcg.isti.cnr.it/~cignoni

Incremental Simp Method The common framework: loop select the element to be deleted/collapsed; evaluate approximation introduced; update the mesh after deletion/collapse; until mesh size/precision is satisfactory; EG99 Tutorial 2

Quadric Error Metrics Simplification using Quadric Error Metrics [Garland et al. Sig 97] Based on incremental edge-collapsing but can also collapse vertex couples which are not connected (topology is not preserved) EG99 Tutorial 3

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); 4

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

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 9

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); } 10

Topology Preservation 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 11

Topology Preservation 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 Σ and Σ are homeomorphic iff Lk (a) Lk (b) = Lk (ab) [Dey 99] 12

Topology Preservation Lk(a) Lk(b)= {x,y }=Lk(ab) x a b Lk(a) Lk(b) ={x,y,z,zx} {y,z}= Lk(ab) y x a z b y 13

Topology Preservation 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 Think it wrapped on the surface of a sphere 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; } c.v(0)->setd(); c.v(1)->p()=p; return n_face_del;

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 16

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 18

Marche incrementali Un oggetto è marcato se 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

Validità collasso Dati 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

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 21

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