ARTICOLO01: Presentazione del WEBGL e prima parte dell

Transcript

ARTICOLO01: Presentazione del WEBGL e prima parte dell
ARTICOLO01: Presentazione del WEBGL e prima parte dell'esempio 01
Intro
Salve! Tale materiale non ha la pretesa di essere esaustivo su tale argomento ne di farvi apprendere
tutti i concetti che ci stanno dietro: tramite piccoli esempi invece cercheremo di darvi un
infarinatura e di darvi qualche concetto per interfacciarvi in un successivo momento su questo
ambiente in costante evoluzione.
Premetto che tale documento non sarà esente da imprecisazioni o da dichiarazioni passibili di critica
o parzialmente errate ma l'obbiettivo rimane quello di far apprendere una certa dimestichezza anche
ad utenti con pochie nozioni, indi sarò costretto a passarci sopra.
Premessa:Tutto il materiale relativo all'articolo corrente e a quelli che seguiranno sono e saranno poi disponibili
in questo link.
Prima di iniziare, controlliamo di possedere i requisiti minimi:
Prerequisiti
1)Software: per quanto riguarda lo sviluppo di applicazioni grafiche web ci serviranno poche cose:
− un web browser con webgl abilitato, tipo Chromium.
− Notepad o un altro editor per creare le nostri pagine html e js ( per il momento sto usando Notepad++ e mi
trovo più che bene).
−Librerie:per il nostro progetto basterà scaricare alcuni file .js ( più precisamente glUtils.js ,Sylvester.js e
MatriUtilityFunc.js ) che potrete trovare direttamente su questolink.
2)Conoscenze:non sono richieste grandi conoscenze nell'ambito della programmazione ; sono gradite skill
riguardanti l'uso di Javascript ed i fondamenti della Grafica ( soprattutto Opengl), ma cercheremo di rimanere il
più generali possibili, adottando anche un registro piuttosto basso.
Cosa è WEBGL?
Praticamente è un contesto che permette di utilizzare funzionalità di grafica 3D senza utilizzo di altri
programmi o plug-in se non il web browser. Se dovessimo schematizzare molto banalmente il nostro progetto
grafico, non è nient'altro che una serie di pezzi di codice in Javascript dove descriviamo al browser cosa
disegnare e come l'azione deve svolgersi, queste informazioni ( utilizzando matrici , strutture dati e buffer)
vengono poi convertire in informazioni grafiche e rappresentate dentro un'area html della nostra pagina.
La struttura perciò si basa su quattro tipologie di file:
1)HTML:pagine dove rappresentiamo la scena
2)Javascript: dove risiede il codice che descrive la logica dell'applicazione
3)XML o TXT: sorgenti dove troviamo alcune informazioni riguardanti certi oggetti della scena od
informazioni su alcune configurazioni
4)Texture: immagini con cui “tappezzeremo ” i nostri oggetti grafici
Dopo aver configurato il nostro browser,possiamo partire con il nostro primo esempio.
ESEMPIO UNO: DISEGNARE UN TRIANGOLO
Il nostro obiettivo è ottenere una "finestrella" dentro la pagina dove al centro disegniamo un triangolo dalle
dimensioni date, come nell'immagine seguente:
Prima di tutto creiamo un nuovo file con il nostro notepad e inseriamo il seguente codice HTML:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
//qua carico I file javascript che mi servono
</head> <body onload="start()">
<canvas id="Mycanvas" width="320" height="240"></canvas>
</body>
</html>
Salviamo il documento come pagina HTML, per esempio index.html.
Analizziamo ora il codice che abbiamo inserito:
Subito notiamo l'oggetto canvas, che è un elemento appartenente all'HTML5, il nuovo standard. Cosa fa questo
codice?Crea una sorta di pannello di dimensioni prefissate ( width ed height in pixel); questo oggetto gode di
alcune proprietà interessanti, tra cui quello di semplificarci la vita durante la creazione del gioco. Noi infatti
disegneremo dentro di esso ed alcune problematiche riguardanti il Rendering ( cioè la resa grafica) saranno
demandati a lui.
Notiamo anche onload=”start()”. Questo codice non fa altro che obbligare il browser ad invocare ad ogni refresh
della pagina una funziona Javascript chiamata start().
Cosa farà questa funzione? Praticamente tutto, da esso infatti noi partiremo a disegnare ogni cosa! Tale
funzione rappresentail core di ogni progetto e noi la introdurremo schematizzando quali sono le operazioni base
che esegue:
function: start()
{
1. ricavo informazioni dal canvas
2. Faccio una prima inizializzazione di tutto il progetto.
3. Inizializzo gli Shader( pezzi di codice molto utili, dopo spieghiamo)
4. Inizializziamo i buffer( strutture dove salviati i dati importanti)
5. Inizializziamo le texture( importiamo e prepariamo le immagini per essere applicate!)
6. Definizione degli input( definisco i modi con cui l'utente si interfaccia all'applicazione).
Queste prime 6 operazioni fanno parte dell' INIZIALIZZAZIONE di WEBGL, nel senso che vengono eseguite
solo una volta..
Le altre azioni fondamentali per progettare un gioco sono:
7. Modifico scena per colpa di eventi
8. Modifico scena per colpa di input dell'utente
9. Disegno della scena
Queste operazioni fanno parte della ROUTINE di WEBGL, nel senso che vengono eseguite
CONTINUAMENTE ,magari dopo intervallo di tempo predefinito!
}
Iniziamo ora a preparare la funzione start, implementando una sua versione semplificata tanto per
capire:
<script type="text/javascript">
Function start()
var canvas= document.getElementById('Mycanvas');
initGL(canvas);
initShaders();
initBuffers();
setInterval(tick, 15);
}
function tick()
{
drawScene();
}
</script>
la prima istruzione della funzione(document.getElementById("Mycanvas") ) ha il compito di recuperare un
riferimento al canvas, dando come argomento il suo identificativo definito nel omonimo tag HTML nel codice
della pagina ( id="Mycanvas") ; successivamente inizializziamo il canvas tramite l'apposita funzione initGL,
inizializziamo gli shader con initShader e i buffer usandoinitBuffer. Il setInterval è una funzione Javascript
assai utile ai nostri scopi: praticamente chiama ogni 15 millisecondi la funzionetick,che rappresenta la routine
del WEBGL, cioè le funzioni che noi dovremmo chiamare ogni tot tempo. Per il momento dentro tick mettiamo
solo DrawScene che disegna una scena statica, dopo inseriremo animazioni e quant'altro....
Il prossimo argomento sarà gli Shader, una parte piuttosto importante e delicata, per tale ragione è preferibile
affrontarli nella prossimo articolo, onde evitare di mettere troppa carne sul fuoco. Se non riuscite a resistere e
volete vedere in anteprima il risultato del nostro lavoro, cliccare sul link sottostante.
Lezione 1