INFORMATICA GRAFICA!
|
|
- Gianpaolo Vitali
- 7 anni fa
- Visualizzazioni
Transcript
1 Knowledge Aided Engineering Manufacturing and Related Technologies INFORMATICA GRAFICA 11 giugno Shaders OpenGL Shading Language Michele Antolini
2 Shaders Ombreggiatura Uno shader permette di definire come un materiale reagisce alla luce Necessario per ottenere effetti fotorealistici Si possono fare anche altre cose (es. bump mapping, effetti particellari, animazioni)
3 Shaders
4 Shaders Le textures non bastano E necessario un controllo maggiore sulle caratteristiche della scena I primi shaders erano programmati direttamente sulla scheda video (es. flat, smooth shaders) Prima di OpenGL 2.0, alcune schede grafiche erano programmabili in linguaggio assembler, il cui codice binario doveva essere copiato sulla scheda Con OpenGL 2.0 è stato definito un linguaggio di programmazione per shaders
5 Shaders Le schede grafiche diventano una logica programmabile Il consorzio OpenGL ARB (Architecture Review Board) detta le specifiche per il linguaggio di alto livello (C-like) con cui programmare le schede Il compilatore è integrato nei driver OpenGL (se compatibile 2.0) di ogni scheda, quindi ottimizzato a seconda dell hardware sottostante
6 Shaders Gli shaders seguono il paradigma di programmazione definito stream processing La GPU permette centinaia, migliaia di operazioni contemporanee su dati multipli: Single Instruction Multiple Data (SIMD) Uno shader è un vero e proprio programma che sfrutta le capacità di calcolo parallelo della GPU
7 Shaders Categorie di shaders Vertex shaders Fragment shaders Geometry shaders (OpenGL 3.2)
8 Vertex shaders Eseguiti per ogni vertice Es. rettangolo: vertex shader eseguito 4 volte, una per ogni vertice generato per disegnarlo Usi: trasformazioni di vertici normalizzazione di vettori normali generazione di texture coordinates illuminazione applicazione di attributi (es. il colore del materiale)
9 Fragment shaders Eseguiti per ogni pixel dell oggetto rasterizzato Es. rettangolo: fragment shader eseguito per ogni pixel visibile dell area del rettangolo Usi: operazioni su attributi interpolati (varying) accesso a textures applicazione di textures effetto nebbia calcolo e applicazione colore pixel bump mapping
10 Geometry shaders Eseguiti per ogni vertice Permettono di creare nuove primitive (vertici) a partire da quelli esistenti Utilizzo più comune è la tassellazione di curve o superfici
11 GLSL Il consorzio OpenGL ARB ha definito un linguaggio standard di alto livello per la programmazione di shaders Sono stati tenuti in considerazione molti requisiti: Buona integrazione con specifiche OpenGL Possibilità di sfruttamento di hardware futuro Indipendenza dall hardware sottostante Semplicità e longevità Compatibilità con calcolo parallelo massivo
12 Shaders execution Application Shader source code OpenGL API Shader source code OpenGL Driver Compiler Shader Object compiled code Linker rogram Object executable code Graphics hard are Provided by application developer rovided by graphics hardware vendor R. Rost, OpenGL Shading Language 2 nd Edition, Addison-Wesley
13 Shaders execution Il punto di partenza è quindi il sorgente dello shader Avviene una compilazione a run-time nel linguaggio assembly della scheda grafica Il compilatore prende come argomenti degli array di stringhe, è quindi possibile la manipolazione per il riutilizzo di frammenti di codice
14 GLSL Language Definition Il GLSL (OpenGL Shading Language) è stato creato intenzionalmente ispirandosi al C Un programma possiede tipicamente due shaders: vertex e fragment E possibile utilizzare tre tipi di variabili globali all interno di uno shader uniform: può essere modificata una volta per ogni chiamata allo shader attribute: varia solitamente per ogni vertice (es. colore) varying: serve a far comunicare vertex e fragment shader Esiste anche una serie di variabili built-in, aventi prefisso gl_
15 Variabili uniform: le variabili uniform vengono utilizzate per definire proprietà che cambiano al più ogni frame attribute: gli attribute si usano per definire proprietà che possono cambiare per ogni vertice Usiamo già attributi predefiniti come glnormal, glcolor, gltexcoord varying: le variabili di tipo varying servono a definire proprietà il cui valore verrà automaticamente interpolato durante l esecuzione del fragment shader (es. colore di un pixel dato il colore dei vertici adiacenti
16 GLSL Simple Example Semplice esempio di vertex e fragment shader che permettono l assegnazione di una temperatura ad ogni vertice e visualizzarla sotto forma di colore
17 GLSL Simple Example Vertex Shader // Global variables // uniform qualified variables are changed at most once per primitive uniform float CoolestTemp; uniform float TempRange; // attribute qualified variables are typically changed per vertex attribute float VertexTemp; // out qualified variables communicate from the vertex shader to // the fragment shader varying float Temperature; void main() { // compute a temperature to be interpolated per fragment, // in the range [0.0, 1.0] Temperature = (VertexTemp - CoolestTemp) / TempRange; gl_position = gl_modelviewprojectionmatrix * gl_vertex; }
18 GLSL Simple Example Vertex Shader Le variabili uniform CoolestTemp e TempRange definiscono parametri di tipo generale per lo shader L attribute VertexTemp viene assegnato per ogni vertice specificato La variabile varying Temperature viene automaticamente interpolata tra i valori dei vertici adiacenti quando verrà eseguito il fragment shader Notare l uso di tre variabili built-in: gl_position, gl_modelviewprojectionmatrix e gl_vertex
19 GLSL Simple Example Fragment Shader // Global variables // vec3 declares a vector of three floating-point numbers uniform vec3 CoolestColor; uniform vec3 HottestColor; // Temperature contains the now interpolated per-fragment // value of temperature set by the vertex shader varying float Temperature; void main() { // get a color between coolest and hottest colors, using // the mix() built-in function vec3 color = mix(coolestcolor, HottestColor, Temperature); } // make a vector of 4 floating-point numbers by appending an // alpha of 1.0, and set this fragment s color gl_fragcolor = vec4(color, 1.0);
20 GLSL Simple Example Fragment Shader Le variabili uniform sono diverse dal vertex shader. Si possono infatti impostare più variabili uniform nell applicazione, ed utilizzarne solo alcune all interno degli shader La variabile varying Temperature ha già un valore interpolato (0, 1) in base alla distanza dai vertici adiacenti Il colore del pixel viene calcolato con una semplice formula (built-in) di interpolazione tra due vettori di 3 elementi (la funzione mix) L esecuzione dei fragment shader è parallela
21 GLSL Data Types I tipi di dati utilizzabili per il GLSL sono raggruppati in: scalari vettori matrici samplers struct array
22 GLSL Data Types Scalari float: singola precisione, virgola mobile int: numero intero bool: flag booleano non supportati operatori sui bit come shift (<<, >>) o and bit a bit (&) gli interi hanno precisione di 16bit più il segno, quindi [-65535, 65535]
23 GLSL Data Types Vettori vec2, vec3, vec4: vettore di 2,3 o 4 float ivec2, ivec3, ivec3: vettore di 2,3 o 4 int bvec2, bvec3, bvec4: vettore di 2,3 o 4 bool
24 GLSL Data Types Vettori Le componenti di un vettore si possono richiamare con i suffissi:.x,.y,.z,.w: il vettore viene trattato come posizione o direzione.r,.g,.b,.a: il vettore viene trattato come un colore.s,.t,.p,.q: il vettore viene trattato come coordinate texture Oppure tramite l indice tra [] ( es. p[0] )
25 GLSL Data Types Matrici mat2, mat3, mat4: matrici 2x2, 3x3, 4x4 di float Le matrici vengono indicizzate per colonna, riga m[0] restituisce un vec* contenente gli elementi della colonna 0 della matrice m m[0][1] indica l elemento 1 della colonna 0 di m I prodotti con scalari, vettori matrici vengono trattati secondo le regole dell algebra (convenzione: le matrici premoltiplicano i vettori)
26 GLSL Data Types Samplers sampler1d, sampler2d, sampler3d: texture mono, bi o tridimensionale samplercube: texture cube-map sampler1dshadow, sampler2dshadow: depth texture mono o bidimensionale per shadow mapping I sampler possono essere solo variabili di tipo uniform
27 GLSL Data Types Samplers <vertex shader> uniform sampler2d my_texture;... void main( void ) { vec3 texcolor = texture2d( my_texture, gl_multitexcoord0.st )... }
28 GLSL Data Types Samplers (vertex shader) uniform sampler2d my_texture; varying vec2 my_texcoord0; void main( void ) { } //ricava il colore della texture 0 alle coordinate del vertice corrente vec3 texcolor = texture2d( my_texture, gl_multitexcoord0.st ) //manda al fragment shader le coordinate texture del vertice (verranno automaticamente interpolate dato che si tratta di una variabile varying my_texcoord0 = gl_multitexcoord0; gl_position = gl_modelviewprojectionmatrix*gl_vertex;
29 GLSL Data Types Samplers (fragment shader) uniform sampler2d my_texture; varying vec2 my_texcoord0; void main( void ) { } //ricava il colore del pixel corrente in base alle coordinate texture interpolate gl_fragcolor = texture2d(my_texture, my_texcoord0);
30 GLSL Data Types Struct E possibile definire struct come in C: struct light { } vec3 position; vec3 color; Non solo ammessi tipi union, enum, class
31 GLSL Data Types Array E possibile creare array di qualunque tipo vec4 points[10] Se gli array non sono parametri di una funzione, possono essere dichiarati senza dimensione. vec4 points[] Possono essere ridichiarati con la dimensione specificata, altrimenti viene calcolata la dimensione in base all indice più alto utilizzato
32 GLSL Inizializzazione/Costruttori vec4 v = vec4(1.0, 2.0, 3.0, 4.0); vec4 v2; v2 = vec4(1.0, 2.0, 3.0, 4.0); vec3 color = vec3(0.2, 0.5, 0.8); vec4 color4 = vec4(color, 1.0);
33 GLSL Inizializzazione/Costruttori struct light { vec4 position; struct tlightcolor { vec3 color; float intensity; } lightcolor; } light1 = light(v, tlightcolor(color, 0.9)); vec4 p = light1.position; float f = light1.lightcolor.intensity; float a[4] = float[4](1.0, 1.0, 0.0, 1.0 );
34 GLSL Inizializzazione/Costruttori mat2 Matrix0 = mat2( 1.0, 2.0, 3.0, 4.0 ); risulta: vec3 v = vec3(0.6); equivalente a " % $ ' # & vec3 v = vec3(0.6, 0.6, 0.6); mat2 m = mat2(1.0); //matrice identità 2x2
35 GLSL Type Matching Type Conversion In GLSL non c è il casting automatico dei tipi, ma ogni variabile deve essere utilizzata seguendo le intestazioni formali delle funzioni I passaggi da un tipo all altro devono essere esplicite float f = 2.3; bool b = bool(f); float f = float(3); // integer 3 to floating-point 3.0 float g = float(b); // Boolean b to floating point vec4 v = vec4(2); // set all components of v to 2.0
36 GLSL - Swizzling Utilizzando l operatore. è possible riarrangiare i componenti di una struttura elencandone i nomi Questa procedura si chiama swizzling vec4 v4; v4.rgba; // is a vec4 and the same as just using v4 v4.rgb; // is a vec3 v4.b; // is a float v4.xy; // is a vec2 v4.xgba; // is illegal - the component names do not come from the same set
37 GLSL - Swizzling vec4 pos = vec4(1.0, 2.0, 3.0, 4.0); vec4 swiz = pos.wzyx; // swiz = (4.0, 3.0, 2.0, 1.0) vec4 dup = pos.xxyy; // dup = (1.0, 1.0, 2.0, 2.0) vec4 pos = vec4(1.0, 2.0, 3.0, 4.0); pos.xw = vec2(5.0, 6.0); // pos = (5.0, 2.0, 3.0, 6.0) pos.wx = vec2(7.0, 8.0); // pos = (8.0, 2.0, 3.0, 7.0) pos.xx = vec2(3.0, 4.0); // illegal - 'x' used twice
38 GLGL Operazioni su componenti Vettore/Scalare: vec3 v, u; float f; v = u + f; Equivalente a: v.x = u.x + f; v.y = u.y + f; v.z = u.z + f;
39 GLGL Operazioni su componenti Vettore/Vettore: vec3 v, u, w; w = v + u; Equivalente a: w.x = v.x + u.x; w.y = v.y + u.y; w.z = v.z + u.z;
40 GLGL Operazioni su componenti Tutte le operazioni aritmetiche agiscono elemento per elemento, tranne il prodotto vettore/matrice, matrice/vettore e matrice/matrice (eseguito secondo le regole dell algebra lineare) vec4 v, u; mat4 m; v * u; // Prodotto componente per componente v * m; // Prodotto vettore riga con matrice m * v; // Prodotto matrice con vettore colonna m * m; // Prodotto matrice con matrice
41 GLSL Uso nell applicazione Per installare ed utilizzare uno shader è necessario: 1. Creare uno o più shader vuoti con glcreateshader 2. Fornire il codice sorgente (sotto forma di array di string) con glshadersource 3. Compilare gli shader con glcompileshader 4. Creare un oggetto program con glcreateprogram 5. Connettere gli shader al program con glattachshader 6. Link-are il program con gllinkprogram 7. Impostare il programma nello stato corrente con gluseprogram
42 GLSL Application Code #include <GLEW/glew.h> //includere GL Extensions Wrapper void setshaders() { char *vs,*fs; v = glcreateshader(gl_vertex_shader); f = glcreateshader(gl_fragment_shader); vs = textfileread( myshader.vert"); fs = textfileread( myshader.frag"); const char * vv = vs; const char * ff = fs; glshadersource(v, 1, &vv, NULL); glshadersource(f, 1, &ff, NULL); free(vs);free(fs); glcompileshader(v); glcompileshader(f); p = glcreateprogram(); glattachshader(p,v); glattachshader(p,f); } gllinkprogram(p); gluseprogram(p); // gluseprogram(0) per disattivare uno shader
43 GLSL Impostazione parametri Per impostare parametri uniform o attribute deve essere prima richiesta la location (un identificatore) in base al nome del parametro (formato stringa) Parametri uniform: Glint loc1 = glgetuniformlocation(program, CoolestTemp"); gluniform1f(loc1,mytemp); esistono le varianti gluniform 2f, 3f, 4f, v
44 GLSL Impostazione parametri Parametri attribute: Specificati tra glbegin() e glend() Glint loc2 = glgetattriblocation(program, "height"); glbegin(gl_triangle_strip); glvertexattrib1f(loc2,2.0); glvertex2f(-1,1);... glend(); esistono le varianti glvertexattrib 2f, 3f, 4f, v
45 GLSL - Particles Gli shaders possono essere utilizzati anche per produrre animazioni Primo tipo: modifica ad ogni frame delle caratteristiche della superficie dell oggetto su cui è applicato lo shader (utilizzando il fragment shader) Secondo tipo: modifica ad ogni frame (in funzione del tempo) della posizione di un particolare vertice (vertex shader) Quest ultima tecnica permette di sfruttare la potenza di calcolo parallelo della GPU per ricalcolare la posizione di una serie di punti
46 GLSL Toon Shader Example
47 GLSL Toon Shader Example Vertex shader: varying vec3 Normal; void main(void) { //passo al fragment shader il vettore normale Normal = normalize(gl_normalmatrix * gl_normal); gl_position = gl_modelviewprojectionmatrix * gl_vertex; }
48 GLSL Toon Shader Example Fragment shader: uniform vec3 DiffuseColor; //default (0.0, 0.25, 1.0) uniform vec3 PhongColor; //default (0.75, 0.75, 1.0) uniform float Edge; //default 0.5 uniform float Phong; //default 0.98 varying vec3 Normal; void main (void) { vec3 color = DiffuseColor; float f = dot(vec3(0,0,1),normal); if (abs(f) < Edge) color = vec3(0); if (f > Phong) color = PhongColor; gl_fragcolor = vec4(color, 1); }
49 GLSL Effetti particellari
50 GLSL Effetti particellari Vertex Shader uniform float time; //il tempo viene incrementato per ogni frame varying vec4 Color; const float radius = 0.3; void main(void) { vec4 vertex = gl_vertex; //coordinate non trasformate float t1 = mod(time, 5.0); vertex.x = radius * gl_color.y * t1 * sin(gl_color.x * 6.28); vertex.z = radius * gl_color.y * t1 * cos(gl_color.x * 6.28); } float h = gl_color.y * 1.25; float t2 = mod(t1, h*2.0); vertex.y = -(t2-h)*(t2-h)+h*h; vertex.y -= 1.0; gl_position = gl_modelviewprojectionmatrix * vertex; Color.r = 1.0; Color.g = gl_color.y; Color.b = 0.0; Color.a = t1 / 5.0;
51 GLSL Effetti particellari Fragment Shader varying vec4 Color; void main (void) { gl_fragcolor = Color; }
52 GLSL - Particles Animazioni: ridisegno ciclico della scena Due metodi per chiamare la glutpostredisplay(): al termine della funzione Display() all interno della gluttimerfunc impostando un framerate specifico Si aggiorna una variabile uniform per far ricalcolare agli shaders il nuovo frame
53 GLSL Utility function char *textfileread(char *fn) { FILE *fp; char *content = NULL; int count=0; if (fn = NULL) { fp = fopen(fn,"rt"); if (fp = NULL) { fseek(fp, 0, SEEK_END); count = ftell(fp); rewind(fp); } } } return content; if (count > 0) { content = (char *)malloc(sizeof(char) * (count+1)); count = fread(content,sizeof(char),count,fp); content[count] = '\0'; } fclose(fp);
54 GLSL Utility function int printoglerror() { // // Returns 1 if an OpenGL error occurred, 0 otherwise. // GLenum glerr; int retcode = 0; } glerr = glgeterror(); while (glerr = GL_NO_ERROR) { printf("glerror: %s\n", gluerrorstring(glerr)); fflush(stdout); retcode = 1; glerr = glgeterror(); } return retcode;
55 GLSL Tutorials - Libri Lighthouse 3D 3D Shaders (R. Rost, OpenGL Shading Language Orange Book)
INFORMATICA GRAFICA. 9 Giugno Shaders OpenGL Shading Language. Michele Antolini
Knowledge Aided Engineering Manufacturing and Related Technologies INFORMATICA GRAFICA 9 Giugno Shaders OpenGL Shading Language michele.antolini@mail.polimi.it Shaders Ombreggiatura Uno shader permette
DettagliComputer Graphics. Computer Graphics. Alcuni argomenti che non abbiamo trattato (o abbiamo trattato poco) Modelling: Rendering:
pillole varie di CG Alcuni argomenti che non abbiamo trattato (o abbiamo trattato poco) Modelling: superfici di suddivisione NURBS Rendering: HDR images Modelling and Rendering: HW programmabile bump-maps
DettagliCorso di Tecniche Avanzate per la Grafica
Corso di Tecniche Avanzate per la Grafica GLSL Docente: Massimiliano Corsini Laurea Specialistica in Informatica Università di Ferrara Cosa sono gli shaders? Gli shaders sono programmi che vengono eseguiti
DettagliCorso di GraficaComputazionale
Corso di GraficaComputazionale GLSL Docente: Massimiliano Corsini Laurea Specialistica in Ing. Informatica Università degli Studi di Siena Cosa sono gli shaders? Gli shaders sono programmi che vengono
DettagliDati due punti sul piano calcolare la loro distanza
Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12
DettagliUtilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:
1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente
DettagliAggiungiamo attributi (per vertice!)
Prossimo passo: Aggiungiamo attributi (per vertice!) Roadmap: 1. includiamoli nel buffer 2. facciamoli prendere dal vetex puller 3. usiamoli nel vertex shader 4. (verranno inteprolati autmaticamente nel
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliVideogame e rendering 3D. Enrico Colombini (Erix) µhackademy 1 Marzo 2019
Videogame e rendering 3D Enrico Colombini (Erix) µhackademy 1 Marzo 2019 Volete creare un videogame? Strumenti comodi: game engine Editor 3D, componenti Runtime engine (PC, console, mobile) Scripting,
DettagliIntroduzione al Real Time Shading
Introduzione al Real Time Shading Ing. Davide Vercelli, PERCRO davide.vercelli@sssup.it Sommario dal software all'hardware e ritorno cenni storici la pipeline grafica com'era: la pipeline fissa com'è:
DettagliIntroduzione a Java. Riferimenti
Introduzione a Java Si ringraziano Massimiliano Curcio e Matteo Giacalone 1: Introduction 1 Riferimenti! Java tutorial: http://java.sun.com/docs/books/tutorial/! Il Java tutorial è parte di una più ampia
DettagliCapitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.
1 Capitolo 6 - Array Array Array Gruppo di locazioni di memoria consecutive Stesso nome e tipo Per riferirsi a un elemento, specificare Nome dell array Posizione Formato: arrayname[ position number ] Primo
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
DettagliLe Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia
Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliFunzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento
DettagliIntroduzione al linguaggio C Primi programmi
Introduzione al linguaggio C Primi programmi Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliIntroduzione al Many/Multi-core Computing
Introduzione al Many/Multi-core Computing Sistemi Operativi e reti 6 giugno 2011 Outline del corso Introduzione Definizioni Motivazioni Storia Architettura Framework Algoritmica Parte I Introduzione Definizioni
DettagliInformatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
DettagliBreve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
DettagliIntroduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
DettagliVariabili e Funzioni. Informatica 1 / 19
Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliLinguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
DettagliGrafica Real-Time, Hardware Grafico e Linguaggi di Shading. Alessandro Martinelli
Grafica Real-Time, Hardware Grafico e Linguaggi di Shading Alessandro Martinelli Grafica Real Time Il concetto di 'Real Time' in ambito grafico ha una valenza molto particolare: Fino agli anni '80, solo
DettagliComputer Graphics. Digital representation of 3D objects. 3D Rendering. Scena 3D rendering image. Marco Tarini - univ insubria AA 2016/2017
Computer Graphics Digital representation of 3D objects Università dell Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2016/17 Marco Tarini 3D Rendering Scena 3D
DettagliLinguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi
DettagliIntroduzione al linguaggio C Funzioni
Introduzione al linguaggio C Funzioni Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliParte Input e output in linguaggio i C. 3. Programmazione strutturata 1 (if, switch, comunque segnalare dei warning
Obiettivi di questa esercitazione Fondamenti di Informatica T-1 Parte 2 Laboratorio 01 1. Input e output in linguaggio i C 2. Espressioni 3. Programmazione strutturata 1 (if, switch, do while) 1 2 Warning
DettagliERRORI DI PROGRAMMAZIONE INDICE
ERRORI DI PROGRAMMAZIONE INDICE 1 ERRORI FREQUENTI 2 1. 4 Parentesi graffe mancanti per i blocchi delle istruzioni di controllo 3 1.1 Punto e virgola mancante 2 1.2 Utilizzo di una variabile non dichiarata
Dettagliä t s r r ModelViewProjectionMatrix void main(void) { gl_position = gl_modelviewprojectionmatrix * gl_vertex; }
r r r r r ür t r r st ts ts ss s s r rt t r r rt 3 rs r t 3 r t r r ür3 s r s t s ä r s r rt 3 r ö r 3 ör rs r s t3t t tät t r 3 r t r r r t rt s t r rs t r t st s r r t t r rs r s r rs 3 rs st r t rs
DettagliINFORMATICA GRAFICA. 28 Aprile Trasformazioni - Illuminazione. Michele Antolini
Knowledge Aided Engineering Manufacturing and Related Technologies INFORMATICA GRAFICA 28 Aprile Trasformazioni - Illuminazione michele.antolini@mail.polimi.it Trasformazioni Durante il ridisegno della
DettagliC++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW
C++ funzioni Alberto Ferrari http://en.cppreference.com FUNZIONI le funzioni caratterizzate da nome, parametri (numero, ordine e tipo) e tipo di ritorno le funzioni hanno un prototipo il prototipo non
DettagliAlgoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal
Algoritmi, Strutture Dati e Programmi : Programmazione in Pascal Prof. Alberto Postiglione AA 2007-2008 Università degli Studi di Salerno Il Linguaggio di Programmazione Pascal Esistono molti linguaggi
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliConoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione
1 Conoscere l uso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali classi di Collection usare in casi specifici Conoscere
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017
DettagliTipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna
Tipi e Valori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Tipi e Valori 2 / 26 Ringraziamenti prof. Mirko Viroli, Università
DettagliUnità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
DettagliConcetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio
Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli
Dettagli#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()
Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine
Dettagli1
Manuali di C Linguaggio C B. W. Kernigan, D. M. Ritchie Jackson La guida completa al C H. Schildt McGraw-Hill Fondamenti di Informatica 1 Linguaggio C Creato nei primi anni 70 per sviluppare il S.O. Unix
DettagliAssembly. Linguaggio di programmazione corrispondente al linguaggio macchina P.H. Cap. 2.1, 2.2 e App. A. Linguaggio assembly (App.
Assembly Linguaggio di programmazione corrispondente al linguaggio macchina P.H. Cap. 2.1, 2.2 e App. A 1 Linguaggio assembly (App. A) Rappresentazione simbolica del linguaggio macchina Più comprensibile
DettagliStringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14
Stringhe in C Nicu Sebe Informatica Nicu Sebe 1 / 14 Stringhe in C Stringhe: tipo di dato strutturato Sequenze di caratteri Linguaggio C: progettato per la semplicità No supporto nativo per le stringhe
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliLinguaggi di Programmazione I Lezione 10
Linguaggi di Programmazione I Lezione 10 Prof. Marcello Sette mailto://marcello.sette@gmail.com http://sette.dnsalias.org 8 maggio 2008 Array 3 Dichiarazione...........................................................
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliFondamenti di Programmazione
Fondamenti di Programmazione (con linguaggio di riferimento C++) Gianfranco Rossi Università di Parma Dip. di Matematica e Informatica 43100 Parma (Italy) gianfranco.rossi@unipr.it Indice 1 Introduzione
DettagliIl corpo di tutte le funzioni deve essere contenuto tra parentesi graffe
Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine
DettagliOctave. Luca Abeni. Informatica Luca Abeni 1 / 21
Luca Abeni Informatica Luca Abeni 1 / 21 Linguaggi di Programmazione di Alto Livello Parole chiave: possibilmente con significato in inglese Ma agli informatici piacciono molto contrazioni e acronimi...
DettagliIl C nel C++: Funzioni
Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma
DettagliFunzioni (1) Il C nel C++: Funzioni. Funzione (2) Vantaggi delle Funzioni. Localizzazione della funzionalità correggibilità manutenibilità
Funzioni (1) Il C nel C++: Funzioni il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma
DettagliIntroduzione al linguaggio C
Linguaggio C Introduzione al linguaggio C Sistemi di sviluppo integrati Noti anche come IDE: Integrated Development Environment Un pacchetto software che permette di scrivere, preprocessare, compilare,
DettagliLezione 6 Introduzione al C++ Mauro Piccolo
Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,
DettagliStruttura di un programma C++
Struttura di un programma C++ // Programma semplice in C++ #include using namespace std; int main() { cout
DettagliINFORMATICA GRAFICA!
Knowledge Aided Engineering Manufacturing and Related Technologies INFORMATICA GRAFICA! 18 Maggio! Vertex array, VBO, Display lists! Michele Antolini michele.antolini@mail.polimi.it! Prestazioni! Abbiamo
DettagliFondamenti di Grafica Tridimensionale
Fondamenti di Grafica Tridimensionale La Pipeline Grafica Marco Di Benedetto marco.dibenedetto@isti.cnr.it Visualizzazione dell Informazione noi siamo qui Informazione mondo reale (es: scans) creazione
DettagliIl linguaggio C. Il preprocessore...
Il linguaggio C Il preprocessore... 1 Il preprocessore Viene invocato prima della compilazione vera e propria Esegue delle manipolazioni testuali sul file sostituisce nomi con testo elimina e inserisce
DettagliEsercizi Programmazione I
Esercizi Programmazione I 0 Ottobre 016 Esercizio 1 Funzione valore assoluto Il file.c di questo esercizio deve contenere nell ordine, il prototipo (dichiarazione) di una una funzione abs, che prende in
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 14 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Informatica Università degli Studi di Milano 23 Aprile 2013 Cosa servono i tipi durante l analisi
DettagliL oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto
Usare e costruire oggetti Variabili e Oggetti Lo spazio di memoria di Java Le API di Java Gli oggetti sono entità di un programma che si possono manipolare invocando i metodi System.out oggetto della classe
DettagliStringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10
Stringhe in C Luca Abeni Informatica Luca Abeni 1 / 10 Stringhe in C Stringhe: tipo di dato strutturato Sequenze di caratteri Linguaggio C: progettato per la semplicità No supporto nativo per le stringhe
DettagliStrutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
DettagliIL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma
DettagliCapitolo 5 - Funzioni
Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente
DettagliC funzioni à scope di variabili
C funzioni à scope di variabili Per questo motivo il parametro di una function può avere lo stesso nome del parametro effettivo del processo chiamante. Possiamo definire anche delle variabili globali e
DettagliQuestion 1: introduction to computer programming
Question 1: introduction to computer programming Question 1: introduction to computer programming What is a compiler? (4 points). Cos è un compilatore? (4 punti). c 2006 Marco Bernardo 1/14 Question 1:
DettagliIL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma
DettagliPrecisazione sui tipi in ANSi C
Precisazione sui tipi in ANSi C Tipi primitivi del C Un tipo è costituito da un insieme di valori ed un insieme di operazioni su questi valori. Classificazione dei tipi primitivi del C scalari aritmetici:
Dettagli24 aprile Qualche minuto di laboratorio
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente, piano terra. Speciale 1 o Esonero : soluzioni,
DettagliHigh Dynamic Range Rendering in OpenGL
Università degli Studi di Trieste Corso di Laurea Specialistica in Ingegneria Informatica Tesina per il corso di Elementi di Grafica Digitale a.a. 2006/2007 High Dynamic Range Rendering in OpenGL Studente
DettagliQualsiasi programma in C++ segue lo schema: Variabili
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
DettagliStruttura di un. Struttura dei programmi C
Parte 4 Struttura di un Programma Struttura dei programmi C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume in un file): 1. Una parte contenente direttive
DettagliCapitolo 2 GOCCE DI JAVA. Domande a risposte multiple
GOCCE D AVA Capitolo 2 Domande a risposte multiple Selezionando una risposta, il bottone corrispondente diventa verde se la risposta è giusta, altrimenti diventa rosso. 2 1. Quale dei seguenti non è un
DettagliBASI LINGUAGGIO. Programmazione Web 1
BASI LINGUAGGIO Programmazione Web 1 Commen0 Riga singola // This is a comment Riga mul8pla /* This is a sec8on of mul8line comments which will not be interpreted */ Programmazione Web 2 Istruzioni Un
DettagliAssegnazione di una variabile
Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile
DettagliPrimi programmi in C
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Uso del compilatore gcc Struttura di un programma
DettagliIl primo programma C++
Il primo programma C++ Un programma in qualsiasi linguaggio evoluto è una sequenza di istruzioni che la CPU dopo opportune conversioni esegue. La sintassi dei linguaggi di programmazione è molto piu rigida
DettagliLinguaggio C: Array Valeria Cardellini
Linguaggio C: Array Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Array in C q Dichiarazione
DettagliINTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere
Dettagli1 PANORAMICA SUL LINGUAGGIO C
1 PANORAMICA SUL LINGUAGGIO C 1.1 Le origini del linguaggio C Il C fu inventato e implementato da Dennis Ritchie negli anni 70 su una macchina che impiegava il sistema operativo Unix. Il C è il risultato
DettagliCapitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61
Capitolo 5 Array e collezioni c 2005 Pearson Education Italia Capitolo 5-1 / 61 Sommario: Array e collezioni 1 Array Array di oggetti Lunghezza di un array Accesso agli elementi di un array Array e cicli
DettagliFondamenti di Informatica e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A
Prima di cominciare: si scarichi il file StartKit4A.zip contenente i file di esempio. Avvertenze per la consegna: nominare i file sorgenti come richiesto nel testo del compito, apporre all inizio di ogni
DettagliIL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
DettagliBASI LINGUAGGIO. Programmazione Web 1
BASI LINGUAGGIO Programmazione Web 1 Commen0 Riga singola // This is a comment Riga mul8pla /* This is a sec8on of mul8line comments which will not be interpreted */ Programmazione Web 2 Istruzioni Un
DettagliLinguaggi di Programmazione
Linguaggi di Programmazione 1 C-Introduzione.tex: Versione 1.0, aa 2005-2006 Linguaggi di programmazione (1) Sono linguaggi che permettono la codifica di algoritmi in modo da renderli eseguibili, direttamente
DettagliTipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:
Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 3 Record G. Mecca M. Samela Università della Basilicata Tipi Strutturati: Record >> Sommario Sommario Introduzione Dichiarazione di Record
DettagliEsempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina
Il compilatore C Astrazione Linguaggio macchina implica la conoscenza dei metodi usati per la rappresentazione dell informazioni nella CPU Linguaggio Assembly è il linguaggio delle istruzioni che possono
DettagliLinguaggio C: Espressioni
Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 Ringraziamenti prof. Mirko Viroli, Università
DettagliUn esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)
Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore) Macchina astratta: un linguaggio di programmazione trasforma un calcolatore in una macchina
DettagliA.A. 2006/2007 Laurea di Ingegneria Informatica. Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio
A.A. 2006/2007 Laurea di Ingegneria Informatica Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio Obbiettivi Acquisire familiarità con la nozione di oggetto Apprendere le proprietà
Dettagli