Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 27 Estensioni Opengl, Multitexturing,

Slides:



Advertisements
Presentazioni simili
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Advertisements

Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Introduzione al linguaggio C
DLL: Dynamic Linking Library
Calcolatori Elettronici III
Texture Mapping.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Costruzione di Interfacce Lezione 11 Dal Java al C++ parte 2
11 Dicembre 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 27 Xml for dummies Parte 2
Costruzione di Interfacce Lezione 6 Esercitazione Trasformazioni
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Costruzione di Interfacce Lezione 4 Sistemi di riferimento e trasformazioni
25 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 22 Estensioni Opengl, Multitexturing,
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Costruzione di Interfacce Lezione 5 Trasformazioni Affini
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 26 XML read e write / Gl Selection e picking
Costruzione di Interfacce Lezione 7 Shading
Costruzione di Interfacce Lezione 4 Nozioni di geometria per la grafica
Costruzione di Interfacce Lezione 4 Geometria per la grafica
Costruzione di Interfacce Lezione 18 Qt Tutorial 2
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Costruzione di Interfacce Lezione 19 Qt Tutorial Designer
Costruzione di Interfacce Lezione 5 Trasformazioni Affini
Costruzione di Interfacce Lezione 20 Qt + Opengl
Costruzione di Interfacce Lezione 12 C++STL
22 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 22 Texturing
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 24 Scene Graphs e Xml for dummies
6 Dicembre 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 25 anatomia di uno screen saver
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 25 Xml for dummies Parte 2
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 30 MMeditor e collision detection
Costruzione di Interfacce Lezione 15 Rendering Locale e Globale
25 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 21 Trackball
Costruzione di Interfacce Lezione 16 Qt
1 Costruzione di Interfacce Primi passi in OpenGL
2 Dicembre 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 23 Scene Graphs, Object Loading
Costruzione di Interfacce Lezione 8 Rasterizzazione
Bump Mapping & Under-Water Effects
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Progettare siti con ASP.net
Texturing - Tessiture Daniele Marini.
Infomatica Grafica a.a DICGIM – University of Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica e Meccanica Environment Mapping.
Programmazione di Calcolatori
Unità Didattica 3 Linguaggio C
Corso di Programmazione Grafica e Laboratorio Introduzione a OpenGL Prof. Daniele Marini.
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 29 ancora MMeditor,
Il Sistema Operativo Il Sistema Operativo è costituito dall’insieme dei programmi necessari per far funzionare tutto l’hardware del calcolatore e per nascondere.
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
CORSO Di WEB DESIGN prof. Leonardo Moriello
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
25 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 21 Trackball, Generazione TexCoords
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 25 Xml for dummies Parte 2
22 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 19 Texturing
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Esercitazione sull’ ordinamento 20 maggio 2003
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
XVRC2 Emanuele Ruffaldi Giugno Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.
Introduzione alle Classi e agli Oggetti in Java 1.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 27 Estensioni Opengl, Multitexturing,

Costruzione di Interfacce - Paolo Cignoni2 Estensioni Opengl Opengl è guidato dal consorzio Opengl ARB (Architecture Review Board) formato dalle principali ditte coinvolte nel 3d e che si accorda su come opengl deve evolvere. Due meccanismi principali Release ufficiali delle specifiche 1.1, 1.2… ecc. Allincirca ongi anno o due. Adesso siamo a 1.4 (questestate) e la maggior parte dei driver implementano 1.3. Estensioni

Costruzione di Interfacce - Paolo Cignoni3 Estensioni Opengl Gli implementatori dei driver possono aggiungere funzionalità proprie (cubemaps, vertex shaders ecc) e non standard, sotto forma di estensioni. Alcune estensioni possono poi diventare standard e essere incluse nelle specifiche ufficiali (gli implementatori solo liberi di implementarle o meno)

Costruzione di Interfacce - Paolo Cignoni4 I nomi delle funzioni e token che fanno parte delle estensioni contengono prefissi o suffissi che identificano lorigine e la diffusione dellestensione glVertexArrayRangeNV() dove nv indica che è unestensione proposta dallNVidia. TEXTURE_CUBE_MAP_ARB, arb indica che è una estensione approvata dall ARB

Costruzione di Interfacce - Paolo Cignoni5 Come si usano Quali estensioni supporta il nostro driver? glGetString(GL_EXTENSIONS); Come si fa a usare un token? Bisogna avere un.h con le definizioni di tutti I token aggiornate alle ultime estensioni dichiarate. Come si fa ad usare una funzione? wglGetProcAddress(nome funzione);

Costruzione di Interfacce - Paolo Cignoni6 Opengl 1.2 e 1.3 Purtroppo gli include e le lib inclusi con.net sono relativi a Opengl 1.1. Come si accede alle feature di opengl1.3 che sono ormai supportate dai driver delle schede grafiche? Occorrono: glext.h e wglext.h Che contengono tutti i token e I tipi delle funzioni di fino a opengl1.4 e tutte le estensioni esistenti.

Costruzione di Interfacce - Paolo Cignoni7 Strada semplice Poichè è noioso e poco portabile controllare e inizializzare tutte le funzioni che servono si usa glew che fornisce un interfaccia protabile a tutto il problema (glew.sourceforge.net) Sostituire #include con #include Ricordarsi di non includere mai gl.h prima di glew

Costruzione di Interfacce - Paolo Cignoni8 GLEW linkare con glew32.lib e aggiungere la dll di glew nel path chiamare non appena si ha un contesto opengl glewInit E tutte le funzioni appaiono magicamente (quelle che ci sono…) Per controllare che ci sia una funzione if (GL_TRUE == glewGetExtension("GL_ARB_fragment_program")) { /* ARB_fragment_program is supported. */ } ricordarsi di fare qualcosa anche se non ci sono le ext…

Costruzione di Interfacce - Paolo Cignoni9 Sphere Environment Mapping Funziona ma ha dei limiti Le coordinate texture vengono calcolate solo ai vertici e interpolate nel mezzo Sul bordo di un oggetto puo capitare che coordinate calcolate per I vertici di un triangolo corrispondano a punti molto distanti nella texture Interpolando linearmente si riattraversa erroneamente tutta la texture la soluzione corretta avrebbe dovuto interpolare in maniera non lineare b a ab

Costruzione di Interfacce - Paolo Cignoni10 Cube Maps Una soluzione più corretta viene dalluso delle cube maps Lo spazio intorno alloggetto viene mappato, invece che su una sfera, sulle sei facce di un cubo View independent Distorsione minima Robusto È un estensione di opengl… Si indicizzano con TRE tex coord invece che due (il punto del cubo colpito dal vettore (s,t,r)

Costruzione di Interfacce - Paolo Cignoni11 CubeMap Occorre caricare 6 texture, ognuna con un target differente, eg: glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, 0,3,w,h,0,GL_RGB,GL_UNSIGNED_BYTE,ilGetData()); La modalità di generazione delle texcoord è su s,t,r e si chiama GL_REFLECTION_MAP

Costruzione di Interfacce - Paolo Cignoni12 Classe CICubeMap Incapsula un po delle cose noiose riguardo alle cubemaps Loading di 6 texture con un basename comune appoggiandosi a QT CICubeMap.Load(uffizi.jpg) carica 6 immagini chiamate: Uffizi_negx.jpg Uffizi_negy.jpg Uffizi_posx.jpg …

Costruzione di Interfacce - Paolo Cignoni13 Background Esiste anche unaltra modalità di generazione tex che riguarda le normal map glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB); Assegna come tex coord di un vertice la normale del vertice interpretata come (r,s,t). Puo essere usato per creare uno sfondo convincente

Costruzione di Interfacce - Paolo Cignoni14 CubeMapped Background piazzando un cubo abbastanza grande centrato rispetto allosservatore (con le normali mediate ai vertici. In realtà non importa che il cubo sia grande, basta buttare via tutte le trasf di modellazione e disabilitare la scrittura sul depth buffer. Le rotazioni della camera/trackball basta metterle dentro la matrice di texture. CICubeMap ha una chiamata per far tutto ciò…

Costruzione di Interfacce - Paolo Cignoni15 MultiTexture In opengl è possibile usare più di una texture contemporaneamente Tramite estensione Ogni Texture unit ha un proprio stato (environment, parameters, texture coords)

Costruzione di Interfacce - Paolo Cignoni16 Multiple Texture glActiveTexture(GL_TEXTURE0); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glBindTexture(GL_TEXTURE_2D,tiBall); glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_CUBE_MAP); glBindTexture(GL_TEXTURE_CUBE_MAP,cm.ti); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_GEN_R); glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_REFLECTION_MAP); glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_REFLECTION_MAP); glTexGeni(GL_R,GL_TEXTURE_GEN_MODE,GL_REFLECTION_MAP);

Costruzione di Interfacce - Paolo Cignoni17 MultiTexture Le coordinate di texture possono essere diverse per ogni texture unit glMultiTexCoord2f(GL_TEXTURE0, s,t) glMultiTexCoord2f(GL_TEXTURE1, s,t)

Costruzione di Interfacce - Paolo Cignoni18 Ripartiamo da zero Copio da una vecchia versione (Moebius3ds) i seguenti file main.cpp CIGLWidget.h CIGLWidget.cpp mainform.h mainform.cpp mainform.ui mainform.ui.h QTMoebius.pro la dir images con le icone copio il.pro e la dir vcg ultima

Costruzione di Interfacce - Paolo Cignoni19 rinomino il pro, lo apro da designer e lo importo in.net Aggiungo la parte dello scene graph base senza moebius Sposto tutti i file che inziavano con ci in una subdir CI Aggiungo la trackball Aggiungo qualcosa da disegnare nella glwidget, il solito scenegraph base

Costruzione di Interfacce - Paolo Cignoni20 Classe Grid e Cell class CICell { public: bool selected; Point3f V[4]; Point3f n; void ComputeNormal(); void glDraw(); };

Costruzione di Interfacce - Paolo Cignoni21 Classe Grid e Cell class CIGrid { public: CIGrid() :ti(0){resize(10,10);} CIGrid(const int _sx, const int _sy) {resize(_sx,_sy);} GLuint ti; void setTexture(QString t) {texFileName=t;}; void loadTexture(); void resize(const int sx, const int sy) ; inline CICell &G(const int i, const int j){return g[j*sx+i];} void glDraw(); private: std::vector g; int sx,sy; QString texFileName; };

Costruzione di Interfacce - Paolo Cignoni22 MMSG Solito subclassing di CISG ci aggiungo il nodo Grid e (da fare come esercizio) quello CIMd2 Aggiungere il nodo significa solo fare una classe wrapper derivata da grid e da CINode e implementare i metodi glDraw ecc.

Costruzione di Interfacce - Paolo Cignoni23 MMSG class CIGridNode : public CIGrid, public CISGNode { public: virtual void XMLWrite(QTextStream &xstrm) virtual bool XMLRead(QDomElement en, CISG *Base) {return true;}; virtual void glDraw(const float ){ CIGrid::glDraw(); }; }; // Scene Graph specializzato per tenere anche un unico Grid; class MMSG : public CISG { public : virtual CISGNode *Allocate(const QString &classname) { CISGNode *ret=CISG::Allocate(classname); if(classname=="CIGrid") ret=new CIGridNode(); return ret; } CIGridNode *g; };

Costruzione di Interfacce - Paolo Cignoni24 Aggiungo un bottone licona la disegno con il.net aggiungo lazione trascino lazione sulle parti dellinterfaccia sulla toolbar sul menu

Costruzione di Interfacce - Paolo Cignoni25 Aggiungere un dialogo modale Disegnare il dialogo da aggiungere nel designer includere il.h nel mainform istanziare un oggetto del tipo appena creato fare partire il dialogo quando serve con la exec. I valori stanno nei widget del dialogo secondo la solita filosofia qt.