INFORMATICA GRAFICA. 20 Aprile Introduzione a OpenGL. Michele Antolini michele.antolini@mail.polimi.it



Documenti analoghi
INFORMATICA GRAFICA. 25 Marzo Introduzione a OpenGL. Michele Antolini

INFORMATICA GRAFICA. 27 Aprile Introduzione a OpenGL parte 2. Michele Antolini

RIEPILOGO DRAWING INTRODUZIONE DRAWING EVENT MANAGEMENT VIEWING DOUBLE BUFFERING Z-BUFFERING LIGHTING

Introduzione. Costruzione di Interfacce Primi passi in OpenGL. Sierpinski Gasket. Sierpinski gasket. Event driven programming. Stuttura del programma

OpenGL: visualizzazione 3D

Introduzione SOMMARIO

Lezione1. Cos è la computer grafica. Lezione del 10 Marzo Michele Antolini Dipartimento di Ingegneria Meccanica Politecnico di Milano

Informatica Grafica. (III anno Laurea Triennale - Corso di Laurea in Informatica) Donato D Ambrosio

DOUBLE BUFFERING. serve a nascondere la fase di drawing utilizzato soprattutto nelle animazioni INTRODUZIONE DRAWING EVENT MANAGEMENT VIEWING

Corso di grafica 3D con C++ e OpenGL. Alessandro Bugatti ITIS B. Castelli

Grafica Computazionale

Open Source 3D Engine. OpenGL Rendering System. Il Framework

INFORMATICA GRAFICA. 5 Maggio Interattività. Michele Antolini

Introduzione Computer Graphics

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

GLUI: GLUT-based User Interface

INFORMATICA GRAFICA!

Realizzazione di un semplice programma di Painting

Introduzione a OpenGL e alle GLUT

Grafica 3D Interattiva

Informatica Grafica. (III anno Laurea Triennale e I anno Laurea Magistrale del Corso di Laurea in Informatica) Donato D Ambrosio

Guida all utilizzo del compilatore lcc-win32 per creare una applicazione console

Corso di INFORMATICA GRAFICA. Modulo 2 (CAD) Stefano Cinti Luciani. Introduzione ad AutoCAD

OpenGL effects. Texture Mapping. La fase di texture mapping serve a conferire maggiore realismo agli oggetti della scena 3D.

Le ombre in OpenGl. Daniele Varin LS Ing. Informatica Corso di Elementi di Grafica Digitale

Il compilatore Dev-C++

SOMMARIO. Introduzione - OpenInventor. Introduzione - OpenInventor. OpenInventor

BMSO1001. Orchestrator. Istruzioni d uso 02/10-01 PC

Introduzione. Costruzione di Interfacce Primi passi in OpenGL. Sierpinski Gasket. Sierpinski gasket. Event driven programming. Stuttura del programma

Introduzione. Costruzione di Interfacce Primi passi in OpenGL. Sierpinski Gasket. Sierpinski gasket. Event driven programming. Stuttura del programma

ANALISI E SVILUPPO DI SHADER GRAFICI IN LINGUAGGIO GLSL ANALYSIS AND DEVELOPMENT OF GRAPHICS SHADERS USING GLSL

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

Computer Graphics. Immagine sul Raster Display. Grafica 3D: analogia con fotocamera. La matrice di Pixel è memorizzata nel FRAME BUFFER

Computer Graphics. Realtà Virtuale: il presente, il passato, 3D il Graphics futuro

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Allocazione dinamica della memoria - riepilogo

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

WebGL. Lezione 18: 15 Maggio 2014

Fondamenti di Grafica Tridimensionale

Grafica al calcolatore - Computer Graphics

Computer Graphics. La disciplina fornisce metodi per creare elaborare memorizzare visualizzare. immagini di oggetti o scene mediante un computer

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Introduzione a Dev-C++

UNIVERSITÀ DEGLI STUDI DI SIENA

Presentation Draw. Guida dell utilizzatore

Manuale di utilizzo del sito ASUWEB

IRSplit. Istruzioni d uso 07/10-01 PC

Grafica Computerizzata

Il controllo della visualizzazione

Linguaggio C. Fondamenti. Struttura di un programma.

Processo di rendering

Manuale per l utilizzo dell applicazione Client per il controllo remoto di apparecchiature da laboratorio

Introduzione alla GPGPU Corso di sviluppo Nvidia CUDATM. Davide Barbieri

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

Gestione Risorse Umane Web

Guida introduttiva alle librerie grafiche GTK+

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Funzioni in C. Violetta Lonati

Capitolo V : Il colore nelle immagini digitali

PG5 Starter Training PG5 Core e WebEditor 8 Daniel Ernst EN Stefano Peracchi IT

Cos'é Code::Blocks? Come Creare un progetto Come eseguire un programma Risoluzione problemi istallazione Code::Blocks Che cos è il Debug e come si usa

Libreria grafica: OpenGL. Come realizzare semplici simulazioni video in C con OpenGL

Registratori di Cassa

Introduzione a GCC: GNU Compiler Collection

3DSMAX 6. Una panoramica su l interfaccia e gli strumenti a disposizione

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

Introduzione al Linguaggio C

TRASMISSIONE RAPPORTO ARBITRALE IN FORMATO PDF

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Capitolo Silberschatz

DeltaLog5 - ShortForm Introduzione

ALL FOR SCAN Versione Twain Manuale Utente. Versione 2.0A00. Luccarelli Srl

STRUMENTI DI PRESENTAZIONE MODULO 6

CAD 2D/3D E RENDERING

Mini Guida per Apple XCode. Maurizio Martinelli

Installazione e caratteristiche generali 1

ArcView strumenti di editing

Raffaello. Licenza e requisiti. Trattamento dei dati personali. Installazione

Il web server Apache Lezione n. 3. Introduzione

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

3.2. Passo 2: Navigazione per individuare l articolo richiesto

Setup e installazione

TachyCAD 8.0 Anno 2010

INTERAZIONE CON L UTENTEL

Grafica al calcolatore - Computer Graphics

Capitolo 11. Il disegno in 3D

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

2015 PERIODO D IMPOSTA

Università degli Studi di Catania Corso di Laurea Magistrale in Informatica Multimedia 2013/14. Cantarella Danilo. OpenCV Android

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Grafica Real-Time, Hardware Grafico e Linguaggi di Shading. Alessandro Martinelli

Laboratorio Informatico di base A.A. 2013/2014 Dipartimento di Scienze Aziendali e Giuridiche Università della Calabria Dott.

Esame di Informatica CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO. Facoltà di Scienze Motorie

Fratini Service di G. Fratini

Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012. Introduzione a Visual Studio 2005/2008/2010

Tale attività non è descritta in questa dispensa

Transcript:

Knowledge Aided Engineering Manufacturing and Related Technologies INFORMATICA GRAFICA 20 Aprile Introduzione a OpenGL michele.antolini@mail.polimi.it

Computer graphics I programmi di grafica (non solo 3D) hanno una struttura molto simile Fasi: Definizione geometrie (vertici, vettori, linee, poligoni, curve, superfici) Definizione punto di vista, FOV, proiezione Rasterizzazione, shading (+ eventuali texture) Sono coinvolti vettori, matrici, equazioni matematiche

OpenGL Astrazione rispetto all hardware sottostante Implementazioni software di funzioni non supportate dall hardware Sfruttamento delle capacità dei diversi acceleratori 3D

OpenGL L interfaccia OpenGL ha portato nel tempo ad una convergenza nell architettura hardware delle schede grafiche punti, linee, poligoni come primitive base pipeline per trasformazioni e illuminazione Z-buffering Texture mapping Alpha blending Retrocompatibilità con versioni precedenti

OpenGL - Date 1992: OpenGL 1.0 1997 (gennaio): OpenGL 1.1, texture su GPU 1998-2003 OpenGL viene aggiornato più o meno annualmente 2004: OpenGL 2.0, shaders programmabili (GLSL, OpenGL Shading Language) 2008: OpenGL 3.0, geometry shader, vertex array (tra le altre cose) 2010 (11 marzo) OpenGL 4.0: tassellazione virgola mobile a 64bit (doppia precisione) per gli shader supporto OpenCL (GPGPU) per lo sfruttamento della GPU per General Purpose computing

OpenGL OpenGL non si occupa di: event management input management (tastiera/mouse) window management L ambiente di sviluppo per OpenGL e` normalmente costituito da alcune librerie: gl OpenGL glu GL Utilities gl<ws> Estensione per <ws> (window system) glut Interfaccia a <ws>

OpenGL Libreria gl rendering 3D lighting z-buffering alpha blending texture mapping antialiasing fog

OpenGL Libreria glu gestione parametri viewing gestione texture mapping polygon tessellation (decompositore generico di poligoni concavi) curve e superfici parametriche gestione errori

OpenGL Libreria glut interfaccia con il window system gestione eventi gestione input keyboard/mouse primitive 3D realizza trasparenza rispetto al window system sottostante

OpenGL Configurazione In laboratorio utilizzeremo l editor CodeBlocks Compilatore: gcc Windows: MinGW (porting di gcc sotto Windows) OSX: necessario pacchetto XCode L interfaccia OpenGL non cambia a seconda del sistema operativo Cambiano le opzioni di compilazione e, spesso, dettagli nelle direttive #include GL Utility Toolkit Windows: freeglut http://freeglut.sourceforge.net

OpenGL Configurazione Creazione nuovo progetto vuoto Project->New->Empty Project Scegliere nome e directory Compilatore: GNU GCC Compiler Project->Build Options Include directories: Search directories Lib directories: Linker settings

OpenGL Configurazione Windows: Compiler: <freeglut dir>\include Linker: <freeglut dir>\lib Linker settings: -lfreeglut, -lopengl32, -lglu32 OSX (Codeblocks 10) Compiler: System/Library/Frameworks/OpenGL.framework/Headers System/Library/Frameworks/GLUT.framework/Headers Linker settings->other linker options: -framework OpenGL -framework GLUT Linux Compiler: /usr/local/include Linker glut, GLU, GL

OpenGL Prima compilazione main.c #include <stdlib.h> //Win32 / Linux #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> //OSX #include <OpenGL/gl.h> #include <OpenGL/glu.h> #include <GLUT/glut.h> int main(int argc, char** argv) { } return 0;

OpenGL - comandi Formato generale: <lib_name><command_name><signature> dove <signature>: [[<arg_number>]<arg_type>]... ] Esempi: glcolor3f libreria gl, Colore, 3 dati, float glvertex2i libreria gl, Vertice, 2 dati, int glutcreatewindow libreria glut, crea la window

OpenGL tipi di dati tipo abbrev. lungh. ------------------------------- GLbyte b 8 bit GLubyte ub 8 bit GLshort s 16 bit GLushort us 16 bit GLint i 32 bit GLuint ui 32 bit GLfloat f 32 bit GLdouble d 64 bit

OpenGL - comandi Nel main() è necessario impostare la configurazione iniziale utilizzando chiamate alla libreria GLUT glutinit( int argc, char** argv): inizializzazione GLUT glutinitdisplaymode( unsigned int mode ): combinazione tramite operatore (OR) di parametri relativi alla modalità di visualizzazione GLUT_RGBA, GLUT_RGB, GLUT_ALPHA, GLUT_INDEX: selezione colori in RGB o tramite indexing con eventuale trasparenza (ALPHA) GLUT_SINGLE, GLUT_DOUBLE, GLUT_ACCUM, GLUT_DEPTH, GLUT_STENCIL: bufferizzazione dei frame GLUT_STEREO: abilita la visualizzazione stereoscopica

OpenGL - comandi Creazione finestra di visualizzazione glutinitwindowsize( int width, int height ) glutinitwindowposition( int x, int y ) glutcreatewindow ( char *name )

OpenGL - comandi Gestione della finestra Vengono utilizzati puntatori a funzione per implementare callback glutdisplayfunc(void (*func)(void)) Viene chiamata quando il contenuto della finestra deve essere ridisegnato glutreshapefunc(void (*func)(int width, int height)) Viene chiamata quando la finestra viene spostata o ridimensionata glutpostredisplay(void) Forza la chiamata alla Display Function

OpenGL - comandi Eventi di input glutkeyboardfunc( void (*func)(unsigned int key, int x, int y) Quando viene premuto un tasto (ASCII) restituisce il codice (key) e le coordinate (x,y) del mouse glutmousefunc(void (*func)(int button, int state, int x, int y)) Pressione di un tasto del mouse. button può valere GLUT_LEFT_BUTTON, GLUT_RIGHT_BUTTON o GLUT_MIDDLE_BUTTON state può valere GLUT_UP o GLUT_DOWN

OpenGL - comandi Eventi di input glutmotionfunc( void (*func)(int x, int y) ) Questa callback viene attivata quando il mouse si muove con uno o più tasti premuti Primitive oggetti 3D glutwire<name>, glutsolid<name> (es. glutwirecube(int size)...cube( GLDouble size)...sphere( GLdouble radius, GLint slices, GLint stacks)...torus( GLdouble innerradius, GLdouble outerradius, GLint nsides, GLint rings )...Cone( GLdouble radius, GLdouble height, GLint slices, GLint stacks )...Teapot( GLdouble size )

OpenGL - comandi Impostazione del punto di vista void glulookat( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz );

OpenGL Viewing volume Proiezione prospettica void glfrustum(left,right,bottom,top,near,far) y near x left right far z

OpenGL Viewing volume Proiezione prospettica void gluperspective(fovy,aspect,near,far) fovy near far fovy = Field Of View Y aspect = w/h

OpenGL Viewing volume Proiezione ortogonale parallela void glortho(left,right,bottom,top,near,far) left near right far Proiezione ortogonale parallela 2D void glortho2d(left,right,bottom,top)

OpenGL - Matrici OpenGL gestisce le sue impostazioni principali tramite una pila (stack) di matrici Projection, Modelview, Texture Si imposta la modalità corrente tramite glsetmatrixmode ( GLenum mode ) mode: GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE

OpenGL - Viewport void glviewport(x,y,width,height) scala l immagine su una viewport che ha origine in (x,y) e ha dimensioni (width,height) i parametri sono in window coordinates width e height possono essere inferiori alla dimensione della finestra una finestra può contenere diversi viewport

OpenGL - Viewport void glviewport(x,y,width,height) dopo aver definito una ulteriore viewport, chiamare glloadidentity() glulookat(... )

OpenGL - Colore due modalità: indicizzata RGB modalità indicizzata: selezione modalità glutinitdisplaymode( GLUT_INDEX ); entry della Look-up Table glutsetcolor( index, r, g, b ); selezione del colore corrente glindexi( index );

OpenGL - Colore modalità rgb: selezione la modalità glutinitdisplaymode( GLUT_RGB ); selezione colore corrente glcolor3f( r, g, b );

OpenGL - Primitive le primitive di OpenGL (punti, linee, triangoli, poligoni) sono descritte in termini di vertici i vertici sono descritti in coordinate omogenee (x, y, z, w) = (x/w, y/w, z/w, 1) glvertex4f( x, y, z, w ) (x, y, z, w ) glvertex3f( x, y, z ) (x, y, z, 1.0) glvertex2f( x, y ) (x, y, 0.0,1.0) il formato generale per il drawing e`: glbegin( tipo_di_primitiva ); <sequenza di vertici> glend();

OpenGL - Primitive V 2 V 1 V 4 V 3 GL_POINTS V 5 V 6 V 2 V 1 V 4 V 3 GL_LINES V 5 V 6 V 2 V 1 V 4 V 3 GL_LINE_STRIP V 5 V 6

OpenGL - Primitive V 2 V 1 V 4 V 3 GL_LINE_LOOP V 5 V 6 V 5 V 1 V 2 V 3 GL_TRIANGLES V 6 V 4 V 3 V 1 V 2 V 5 GL_TRIANGLE_STRIP V6 V 4

OpenGL - Primitive V 1 V 2 V 3 GL_TRIANGLE_FAN V 6 V5 V 4 V 2 V3 V 1 V 4 V 5 V 6 V 8 V 7 GL_QUADS V 1 V 3 V 5 V 7 GL_QUAD_STRIP V 2 V 4 V 6 V 8

OpenGL - Primitive esempio: glbegin( GL_LINES ); glcolor3f( 1.0, 1.0, 1.0 ); glvertex2f( -0.8, -0.8 ); glcolor3f( 1.0, 0.0, 0.0 ); glvertex2f( 0.5, 0.2 ); glvertex2f( -0.5, 0.4 ); glcolor3f( 0.0, 1.0, 0.0 ); glvertex2f( -0.2, 0.1 ); glend(); vertici differenti possono avere colore differente; in tal caso il colore viene interpolato da un vertice all altro

OpenGL Punti, Linee e Poligoni Si può impostare la dimensione di un punto con il comando glpointsize( GLfloat size ) default: 1.0) lo spessore di una linea con il comando gllinewidth( GLfloat size ) default: 1.0 pattern tratteggio void gllinestipple( GLint factor, GLushort pattern);

OpenGL Punti, Linee e Poligoni gllinestipple(4, 0xAAAA ); glenable(gl_line_stipple); glutwirecube(1); //dotted wireframe cube

ESEMPI

Esercizio Illustrate la costruzione grafica di una curva di Beziér di almeno secondo grado in 3 dimensioni Visualizzazione proiettata sul piano 2D Seconda viewport con visualizzazione prospettica o ortogonale Animazione

Esercizio Inviare via email i sorgenti dell esercizio michele.antolini@mail.polimi.it Oggetto: [Infografica] Lab01 Nome e numero di matricola all interno del main.cpp Usate la vostra email @studenti.unibg.it