Aggiungiamo attributi (per vertice!)

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

I Modelli 3D più comuni: Mesh poligonali

Grafica al calcolatore - Computer Graphics

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

WebGL. Lezione 18: 15 Maggio 2014

Computer Graphics. 3D Rendering. Digital representation of 3D objects. Scena 3D rendering image. Geometry of a 3D object. 3D Model

Modelli per i materiali

Introduzione alla GPGPU Corso di sviluppo Nvidia CUDATM. Davide Barbieri

High Dynamic Range Rendering in OpenGL

Grafica 3D per i beni culturali: 3D and rendering. Lezione 2: 23 Febbraio 2011

Pipeline di rendering. Pipeline di rendering. Outline. Grafica off-line vs Grafica real-time

Pipeline di rendering

Fondamenti di Grafica Tridimensionale

1.1 Modello di un Processo di Rendering. Gestore delle Geometrie (Ricostruzione delle Geoemtrie e Clipping)

Texture maps come assets

Tipi di animazioni scripted

Livello di approfondimento della lezione. Texture mapping di solito spiegato in corsi di CG di base

Modelli: formati, strutture dati, processing della mesh

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

SVILUPPO DI UN GEOBROWSER 3D BASATO SU SHADER PER DISPOSITIVI IOS

Computer Graphics. v 1. Rasterizer: lines (segmenti) la rasterizzazione from vertex to pixels. Rasterizzazione: lines (segmenti)

La Pipeline Grafica. Vediamo come avviene il rendering, ovvero la visualizzazione di oggetti. Introduzione. La Pipeline Grafica.

Linguaggio C. Fondamenti. Struttura di un programma.

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

VRay Map: VRayEdgesTex

Informatica Teorica. Macchine a registri

Grafica e Geometria Computazionale

Rendering. Visione Artificiale - 11 dicembre Agenda (1 di 2) - Rendering Real-Time e non Real Time. - Ambienti di moodellazione non Real Time

Elaborazione e Visualizzazione di Modelli di Grandi Dimensioni di Terreni

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

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Procedure di Basic Design. La logica della programmazione applicata alla didattica. IUAV Facoltà di Design e Arti Treviso, 09-10/12/2010

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Il calcolatore. Architettura di un calcolatore (Hardware)

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

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

Processo di rendering

Grafica Computazionale

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Nuove Hyundai Go! Brasil Limited Edition STANDARD POSE 4 fuoriclasse per la Coppa del Mondo.

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

UNIVERSITÀ DEGLI STUDI DI SIENA

Capitolo 6 Interazione luce-materia

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

L ambiente di simulazione SPIM

Concetto di Funzione e Procedura METODI in Java

Introduzione al GPU Compu4ng con CUDA. Francesco Caruso

Modellazione 3D della Via Lattea. in Unity

Grafica al calcolatore - Computer Graphics

Introduzione Computer Graphics

CWindow White Paper. Paolo Medici Dipartimento di Ingegneria dell Informazione dell Università di Parma 10 dicembre 2010

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

PARTE III MACCHINE A REGISTRI

Esonero del corso di Programmazione a Oggetti

Introduzione a API e game engine per la programmazione grafica

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

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

Modelli 3D: come ottenerli

Grafica 3D Interattiva

Fasi di creazione di un programma

Sistemi Web per il turismo - lezione 3 -

Assembler di Spim. Assembler di SPIM. Struttura di un programma assembler. Direttive

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

Nonostante lo implementeremo in D3D10, l algoritmo è completamente indipendente dall API grafica usata. Per funzionare, questo richiede

8 Microcontrollori PIC

6^ parte : Acquisizione della temperatura con LM35. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

3. La sintassi di Java

10 - Programmare con gli Array

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Profondità di Campo in Tempo Reale Stefano Maraspin

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

CLOUD AWS. #cloudaws. Community - Cloud AWS su Google+ Amazon Web Services. Servizio Amazon Elastic Transcoder

Elementi di programmazione Algoritmi Flow Chart, Fasi della programmazione Linguaggi Elementi di programmazione ad oggetti

Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, Dipartimento di Informatica Università degli Studi di Bari

Rappresentazione di oggetti 3D

Elementi di grafica raster

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Programma Corso Game Design

Struttura di un programma Java

Introduzione alla programmazione in C

PAES. Laurea Specialistica in Informatica. Analisi e sviluppo di un implementazione parallela dell AES per. architetture eterogenee multi/many-core

Modelli di illuminazione avanzati

IL LASER SCANNER E IL TERRITORIO: applicazioni, metodologie operative, potenzialità del rilevamento con laser-scanner terrestre


Architettura di un Elaboratore

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Uniamo VM e CACHE. Physically addressed. Physically Addressed. Prestazioni. Ci sono varie alternative architetturali. Sono quelle piu semplici

Il software e la programmazione

CORSO DI LAUREA IN INGEGNERIA.

Ingegneria del Software

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso di Grafica Computazionale

Introduzione al package ARENA

(1) - - (4) R4 = R7 * R7 (4) (2) (3) 5 - (4) rinviata perché in WAW con (3) 6 (3) e (4) ritirabili ma attendono il completamento di (2) (2) (3) (4)

ESERCIZIO 1 Riferimento: PROCESSORE PIPELINE e CAMPI REGISTRI INTER-STADIO

Von Neumann. John Von Neumann ( )

VOLVO. Gearbox Models G7 - G8. Date 5/2012 File VOLC007.PDF

Grafica computazionale

Transcript:

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 rast.) 5. usiamo la loro interpolaz nel fragment shader ES: attributo COLORE Se abbiamo, per ogni vertice: X,Y,Z (geometria = attributo di indice 0) R,G,B (attributo colore = attributo di indice 1) Vari modi per formattare dati: in un buffer interleaved: X0,Y0,Z0,R0,G0,B0, X1,Y1,Z1,R1,G1,B1, in buffer separati: X0,Y0,Z0, X1,Y1,Z1, R0,G0,B0, R1,G1,B1, oppure anche: X0,X1, Y0,Y1, Z0,Z1, R0,R1, G0,G1 etc segliamo questo Grafica computazionale - Es 01 1

Attributo colore Un secondo indice, per un altro attributo const positionattribindex = 0; const rgbattributeindex = 1; (globali, costanti) Aggiungiamo i dati es: un vertice blu, uno verde, uno rosso: var positions = [ 0.0, 0.0, 0.0,0.0,1.0, // 1st vertex 1.0, 0.0, 0.0,1.0,0.0, // 2nd vertex 0.0, 1.0, 1.0,0.0,0.0, // 3rd vertex ]; X0 Y0 R0 G0 B0 X1 Y1 R1 G1 B1 X2 Spieghiamo il formato dei buffer al Vertex Puller Attributo Posizione: n. elem = 2 (float) Buffer: X0 Y0 R0 G0 B0 X1 Y1 R1 G1 B1 X2 stride = 5 x 4 bytes stride gl.vertexattribpointer( positionattributeindex, 2, gl.float, false, 5*4, 0); Grafica computazionale - Es 01 2

Spieghiamo il formato dei buffer al Vertex Puller Attributo Colore: n. elem = 3 (floats) Buffer: X0 Y0 R0 G0 B0 X1 Y1 R1 G1 B1 X2 offset = 2 x 4 bytes stride = 5 x 4 bytes stride gl.vertexattribpointer( colorattributeindex, 3, gl.float, false, 5*4, 2*4); Negli shaders: prima attribute vec2 aposition; void main(void) { gl_position = vec4( aposition, 0.0, 1.0 ); } VERTEX Shader void main(void) { gl_fragcolor = vec4(0.0, 0.0, 1.0, 1.0); } FRAG Shad. Grafica computazionale - Es 01 3

Negli shaders: dopo L I N K attribute vec2 position; attribute vec3 basecolor; varying vec3 color; void main(void) { gl_position = vec4( position, 0.0, 1.0 ); color = basecolor ; } precision highp float; varying vec3 color; void main(void) { gl_fragcolor = vec4( color, 1.0); } VERTEX Shader FRAGMENT Shader Linguaggio GLSL: classi di allocazione attribute vec3 basecolor; varying vec3 color; attribute valore definito su ogni vertice nel vertex shader: INPUT (sola lettura) nel fragment shader: non usato varying valore che varia dentro la primitiva nel vertex shader: OUTPUT (sola scrittura) interpolato dal rasterizzatore nel fragment shader: INPUT (sola lettura) Grafica computazionale - Es 01 4

Linking di vertex e fragment shader Vertex Shader: input: gli attributes output: i varyings gl_position (vec4) LINK Fragment Shader: input: i varyings output: gl_fragcolor (vec4) gl_depth (float) (opzionale) Linguaggio GLSL: (per completezza) altre classi di allocazione const vec3 PINK_COLOR = vec3( 1.0, 0.5, 0.5 ); niente vec3 tmp ; const valore costante, noto a compilazione definito quando dichiarato (obbligatoriamente) risolto direttamente dal compilatore temporanea valore usa e getta, di lavoro var locale o globale lettura / scrittura nota: non sopravvive mai allo shader! (neanche se globale) Grafica computazionale - Es 01 5

Prossimo passo: Usiamo struttura mesh indexed Due tipi di buffer, detti: ARRAY_BUFFER array di vertici geometria + attributi, per vertice ELEMENT_ARRAY_BUFFER array di indici indici di vertice, per primitiva (element) connettività della mesh (l unico che usavamo prima) Prima mesh indicizzata: Un quad con diagonal split (4 vertici, 2 tris) V2 V3 var indices = [ 0,1,2, // 1st triangle 1,3,2, // 2nd triangle ]; V0 V1 Grafica computazionale - Es 01 6

Prepariamo il buffer di indici Un buffer ulteriore per la connettività della mesh Similmente agli altri buffer: var elbufferid = gl.createbuffer(); gl.bindbuffer(gl.element_array_buffer, elbufferid ); var indices = [ 0,1,2, // 1st triangle 1,3,2, // 2nd triangle ]; var indexdata = new Uint16Array( indices ); gl.bufferdata( gl.element_array_buffer, indexdata, gl.static_draw ); Dopo la bind, tutte le op su Element Array Buffer (rendering compreso) si riferiranno a questo buffer Disegnamo la mesh indicizzata gl.drawarrays( gl.triangles, 0, 3 ); mesh non indicizzata, quanti vertici (ogni 3 = un tri) gl.drawelements( gl.triangles, 6, gl.unsigned_short, 0 ); mesh indicizzata quanti indici di vertice (ogni 3 = un tri) tipo di ogni indice (short = 16 bit = 64K vertici max) da quale indice partire Grafica computazionale - Es 01 7

Piccole domande Come fai ad eseguire l altro diagonal split? (a dividere il quadrilatero diversamente nei due triangoli)? Vengono prodotti più o meno frammenti? Il risultato a schermo è indentico o differente? (pensa agli attributi nel punto in mezzo alla diagonale) Per una visione d insieme del codice, vedere l implementazione sul sito: Esercitaz 01 Consiglio: invece che utilizzare l implementazione fornita, scrivere la propria implementando uno ad uno tutti i passi come descritto qui, a partire dall esercitaz 00 Grafica computazionale - Es 01 8

WebGL pipeline con attributi e indexed Mesh: vertex buffer index buffer GPU-RAM vertex puller Input Vertex: XYZ (object space) + input attributes vertex shader Transformed Vertex: XYZW (clip space) + computed varying primitive assembler (& setup) Primitive: point (1xV) line (2xV) triangle (3xV) r r WebGL pipeline : rasterizer punti rasterizer lines rasterizer triangles Fragments: buffer pos (fixed, XY) + interpolated varying fragment shader Pixels: RGBa output combiner RGBa buffer to screen GPU-RAM Grafica computazionale - Es 01 9