interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf ·...

11
Informatica Grafica ][ Marco Gribaudo [email protected] Grafica 3D Interattiva Introduzione La grafica 3D viene utilizzata in prodotti interattivi e non interattivi. Esempi di prodotti non interattivi sono i filmati di animazione e gli effetti speciali. Esempi di prodotti interattivi sono i video giochi e la realta' virtuale. Introduzione In questo corso tratteremo la grafica tridimensionale nei prodotti interattivi. In particolare verrano presentate le piu' comuni tecniche per integrare la grafica 3D nei linguaggi di programmazione e l'utilizzo dei software di authoring più diffusi per produrre contenuti destinati a tale scopo. Introduzione Per poter seguire con profitto questo corso, occorre avere acquisito nozioni fondamentali di: Variabili Procedure Algoritmi Array Cicli Condizioni Eventi Spazi di coordinate Poligoni Trasformazioni Matrici e vettori Modellazione 3D Luci e cineprese Texture e rendering Motori di rendering La quantita' di codice necessaria per visualizzare oggetti tridimensionali in tempo reale e' enorme! Per questo si ricorre solitamente a librerie di funzioni già realizzate. Tali librerie vengono designate con il termine Motori di Rendering . Motori di rendering Il lavoro necessario per creare un'immagine tridimensionale puo' essere suddiviso in livelli di funzionalita' ordinati gerarchicamente. Ogni livello utilizza le funzionalita' definite nei livelli precedenti per crearne delle nuove, piu' sofisticate.

Transcript of interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf ·...

Page 1: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Informatica Grafica][

Marco [email protected]

Grafica 3DInterattiva

IntroduzioneLa grafica 3D viene utilizzata in prodotti interattivi e non interattivi.

Esempi di prodotti non interattivi sono i filmati di animazione e gli effetti speciali.

Esempi di prodotti interattivi sono i video giochi e la realta' virtuale.

IntroduzioneIn questo corso tratteremo la grafica tridimensionale nei prodotti interattivi.

In particolare verrano presentate le piu' comuni tecniche per integrare la grafica 3D nei linguaggi di programmazione e l'utilizzo dei software di authoring più diffusi per produrre contenuti destinati a tale scopo.

IntroduzionePer poter seguire con profitto questo corso, occorre avere acquisito nozioni fondamentali di:

VariabiliProcedureAlgoritmiArrayCicliCondizioniEventi

Spazi di coordinatePoligoniTrasformazioniMatrici e vettoriModellazione 3DLuci e cinepreseTexture e rendering

Motori di renderingLa quantita' di codice necessaria per visualizzare oggetti tridimensionali in tempo reale e' enorme!

Per questo si ricorre solitamente a librerie di funzioni già realizzate.

Tali librerie vengono designate con il termine Motori di Rendering.

Motori di renderingIl lavoro necessario per creare un'immagine tridimensionale puo' essere suddiviso in livelli di funzionalita' ordinati gerarchicamente.

Ogni livello utilizza le funzionalita' definite nei livelli precedenti per crearne delle nuove, piu' sofisticate.

Page 2: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Motori di renderingI principali livelli di funzionalita' (che possono variare in funzione del particolare motore considerato) sono:

Disegno dei triangoliProiezione e clippingVisualizzazione di modelli 3DVisualizzazione di mondi 3DSimulazione delle leggi fisicheInterfaccia utente ed Intelligenza artificiale

Motori di renderingIl livello di Disegno dei triangoli, si occupa di disegnare velocemente sullo schermo triangoli bidimensionali.

Motori di renderingOgni triangolo puo' venire disegnato anche con una texture ed un modello di illuminazione.

Motori di renderingIl livello di Proiezione e clipping, si occupa di proiettare triangoli (definiti in uno spazio tridimensionale) sullo schermo del calcolatore, così come apparirebbero agli occhi di un osservatore posizionato in un dato luogo.

Motori di renderingIl livello di Proiezione e clipping identifica gli oggetti che non sono visibili (clipping), calcola le coordinate dei triangoli in due dimensioni (corrispondenti alle proiezioni dei triangoli 3D) ed infine utilizza le primitive del livello precedente per visualizzarli sullo schermo.

Motori di renderingIl livello di Visualizzazione dei modelli 3D scompone ogni oggetto tridimensionale in un insieme di triangoli, calcolandone opportunamente le posizione dei vertici nello spazio, ed utilizza le primitive del livello precedente per rappresentarli sullo schermo.

Page 3: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Motori di renderingIl livello di Visualizzazione dei mondi 3D gestisce la presenza contemporanea di piu' oggetti tridimensionali. Ottimizza la visualizzazione scartando quelli troppo lontani o comunque non visibili, e gestisce semplici animazioni degli elementi coinvolti.

Motori di renderingIl livello di Simulazione delle leggi fisiche, come dice il termine stesso, si occupa di spostare gli elementi che compongono un mondo 3D, utilizzando le comuni leggi della fisica. Esso si occupa anche di identificare collisioni ed urti, evitando, laddove necessario, la compenetrazione di oggetti tridimensionali.

Motori di renderingIl livello di Interfaccia utente ed intelligenza artificiale peremtte di applicare agli oggetti della scena le leggi fisiche rese disponibili dal livello sottostante, in base alle scelte effettuate da un operatore umano, o da un agente artificiale.

Motori di renderingIn questo corso ci occuperemo unicamente degli ultimi 4 livelli:

Disegno dei triangoliProiezione e clippingVisualizzazione di modelli 3DVisualizzazione di mondi 3DSimulazione delle leggi fisicheInterfaccia utente ed Intelligenza artificiale

Motori di renderingPer primi due livelli si utilizzeranno librerie standard di programmazione grafica in ambiente Windows:

DirectX 8.1

Motori di renderingPer ottenere livelli di prestazione accettabile, senza complicare troppo le operazioni di scrittura del codice si utilizzera' come linguaggio di programmazione:

Visual Basic 6

Page 4: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Utilizzo delle DirectXAffinche' un programma possa utilizzare le procedure di un motore di rendering o di una libreria di supporto, come appunto le DirectX, deve rispettare un'architettura precisa.

In particolare deve eseguire un insieme di operazioni in un determinato ordine.

Utilizzo delle DirectXLe fasi da rispettare sono le seguenti:

Inizializzazione della libreriaInizializzazione dell'applicazioneCiclo di renderingRilascio delle risorse

Utilizzo delle DirectXNella fase di Inizializzazione della libreria si richiamano un insieme di procedure appartenenti alla libreria grafica o al motore di rendering (e.s. le DirectX) per definire i requisiti grafici richiesti dall'applicazione.

Ad esempio si stabiliscono la risoluzione dell'applicazione, il tipo di grafica adottata (2D, 3D, presenza di illuminazione, texture, etc...).

Utilizzo delle DirectXNella fase di Inizializzazione dell'applicazione si creano tutte le struttre dati necessarie a realizzare l'applicazione.

Ad esempio si caricano le geometrie degli oggetti, le texture, le definizioni dei mondi virtuali, si azzerano i punteggi, i timer e cosi' via...

Utilizzo delle DirectXIl Ciclo di Rendering, rappresenta invece il cuore dell'applicazione.

Esso si ripete fino a quando il programma non termina.

Il suo scopo e' quello di ridisegnare continuamente la grafica dell'applicazione, secondo i cambiamenti avvenuti nel frattempo.

Utilizzo delle DirectXIl ciclo di rendering si occupa solamente di ridisegnare la grafica sullo schermo.

Qualsiasi modifica o interazione deve avvenrie in risposta ad eventi esterni quali timer o input provenienti da periferiche collegate al sistema.

Page 5: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Utilizzo delle DirectXL'usica dal ciclo di rendering, si verifica solamente quando un evento esterno stabilisce la fine del programma, ad esempio impostando una particolare variabile.

Bisogna quindi sempre ricordarsi di inserire qualche meccanismo per consentire l'uscita dal ciclo.

Utilizzo delle DirectXLa fase di Rilascio delle risorse conclude l'applicazione liberando le risorse occupate dalle strutture dati allocate durante le fasi precedenti.

Vengono utilizzate a tal scopo sia funzioni specifiche dell'applicazione sia funzioni generiche della libreria.

Modi di visualizzazioneUn'applicazione basata sulle DirectX puo' essere visualizzata in due modalita':

FinestraSchermo intero

Modi di visualizzazioneNella modalita' in Finestra, l'applicazione viene visualizzata in una finestra creata dal sistema operativo.

Modi di visualizzazioneNella modalita' a Schermo intero invece l'applicazione si estende su tutto lo schermo (diventando di fatto l'unico oggetto visualizzato).

Una prima applicazioneInizieremo a creare una semplice applicazione che visualizza un triangolo sullo schermo utilizzando le DirectX.

Piu' avanti vedremo come raggruppare le parti comuni in modo da arrivare a creare un nostro motore di rendering.

Page 6: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Una prima applicazioneCreata una nuova applicazione in Visual Basic, occorre specificare che questa intende utilizzare le librerie DirectX. Dal menu References.... :

Una prima applicazioneSelezionare la voce "DirectX 8 for Visual Basic Type Library".

Una prima applicazioneLa fase di Inizializzazione della libreria deve essere eseguita come prima operazione alla partenza dell'applicativo. Per questo si inserisce nell'evento Form_Load().

Una prima applicazioneIl codice di Inizializzazione della libreria DirectX e' abbastanza lungo e piuttosto complesso.

Una prima applicazione

Definisce le strutture dati necessarie per contenere le DirectX

Una prima applicazioneRicava un riferimento alla libreria per le funzionalita' di grafica 3D

Page 7: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Una prima applicazione

Imposta l'applicazione in modalita' finestra

Una prima applicazione

hWnd identifica la finestra creata da Visual Basic e la associa alle DirectX

Una prima applicazioneLa fase di Rilascio delle risorse invece, distrugge semplicemente gli oggetti creati e chiude l'applicazione (Unload Me)

Una prima applicazionePrima di inserire il Ciclo di Rendering occorre aggiungere una variabile globale per gestire la condizione di uscita...

Una prima applicazione... ed anche un evento che la imposti. In questo caso si e' scelto il click del Mouse sopra la finestra dell'applicazione Form_Click(). Impostando la varibile a False si otterra' l'uscita dal ciclo di rendering.

Una prima applicazioneIl ciclo di rendering si inserisce esattamente tra l'inizializzazione della libreria ed il rilascio delle risorse.

Page 8: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Una prima applicazioneAnche il ciclo di rendering e' abbastanza lungo e piuttosto complesso.

Una prima applicazione

Me.Show mostra la finestra dell'applicazione. Potrebbe essere considerato come parte della fase di Inizializzazione dell'applicazione.

Una prima applicazione

Imposta la varibile di uscita a True, in modo che il ciclo si ripeta fino a quando l'utente non fa click sulla finestra

Una prima applicazione

Do While e Loop racchiudono il ciclo vero e proprio

Una prima applicazione

Cancella lo schermo, impostandolo al colore HTML #CCCCFF

Una prima applicazione

In questa posizione vengono inserite le istruzioni che effettuano il rendering.

Page 9: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Una prima applicazione

Quindi l'immagine generata dev'essere trasferita sullo schermo

Una prima applicazione

come ultima istruzione occorre lasciare al sistema operativo la possibilita' di gestire gli altri eventi

Una prima applicazioneA questo punto si puo' far partire l'applicazione!

Una prima applicazioneIn questo caso essa si limita a mostrare una finestra vuota con fondo violetto (#CCCCFF)

In questo momento non sono ancora state inserite, nel ciclo di rendering, istruzioni per visualizzare oggetti sullo schermo.

Per poter visualizzare qualche cosa sullo schermo bisognera' modificare opportunamente le varie fasi dell'applicazione.

Una prima applicazione

Inannzi tutto bisogna definire quali caratteristiche s'intende adoperare per specificare i vertici dei triangoli

Una prima applicazione

Quindi si sincronizzano le DirectX, in modo da utilizzare i tipi di vertici definiti.In questo caso si disabilita anche l'illuminazione(si agisce nella fase di inizializzazione della libreria)

Page 10: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

Una prima applicazione

Si aggiunge un Array per contenere i vertici della figura che s'intende disegnare.

Una prima applicazioneQuindi si modifica la fase di inizializzazione dell'applicazione definendo le coordinate di un triangolo sullo schermo, specificando il colore desiderato

Una prima applicazione

Infine si modifica il ciclo di rendering in modo da includere il comando per il diesgno del triangolo.

Una prima applicazioneA questo punto si puo' nuovamente provare l'applicazione. In questo caso si vedra' un triangolino rosso a sinistra in alto della finestra!

ConsiderazioniPur impiegando funzioni di libreria, il semplice disegno di un triangolo sullo schermo è un'operazione tutt'altro che banale.

Bisogna pero' sottolineare che le difficolta' piu' significative risiedono nella fase di inizializzazione della libreria.

Per fortuna tale fase risulta identica tanto per il disegno di un triangolo quanto per la realizzazione di un complesso videogioco in grafica 3D.

ConsiderazioniInoltre le DirectX sono una libreria di basso livello:Forniscono un insieme di procedure standard, adoperabili in ogni tipo di applicazione: dal videogioco 2D, al videogioco 3D, alla creazione di un'applicazione di realta' virtuale, fino ad un software complesso come Maya o 3D studio.

Page 11: interattivi non interattivi Grafica 3D Interattiva - Dipartimento di …marcog/IG2/2005/L01.pdf · 2005. 3. 7. · Motori di rendering Il livello di Visualizzazione dei mondi 3D gestisce

ConsiderazioniIn questo corso costruiremo una nostra libreria di livello superiore.Cosi alla fine, per realizzare un'applicazione 3D, si adopereranno primitive, definite da noi, molto piu' semplici ed intuitive.

Applicazioni a Schermo interoL'applicazione prima realizzata, era un'applicazione in finestra.

Per trasformarla in un'applicazione a schermo intero e' sufficiente modificare opportunamente la fase di inizializzazione della libreria.

Applicazioni a Schermo interoE' sufficiente sostituire le seguenti linee di codice...

Applicazioni a Schermo intero...con le seguenti istruzioni:

Applicazioni a Schermo intero640 e 480 indicano la risoluzione.