Corso di DirectX

Introduzione a Direct3D

 

Come ho accennato nella prima lezione, le librerie DirectX sono una serie di strati software che permettono l’accesso all’hardware più disparato. L’utilità delle librerie è di presentare al programmatore un modello uniforme su cui lavorare: voi sapete che con le DirectX alcune cose le potete fare sempre. Sicuramente. Qualunque cosa ci sia dentro il case. Altre cose invece sono esplicitamente dipendenti, e prima di azzardarvi ad usarle dovete chiamare le funzioni DirectX
apposite per scoprire se è possibile oppure no. Se alcune funzioni mancano nell’hardware, le DirectX possono sopperire con un emulazione software (molto più lenta), oppure rinunciare del tutto. I meccanismi possono essere a volte piuttosto complicati.

In particolare, il modello di programmazione in 3D è estremamente sofisticato. Non aspettatevi di poter capire tutto in qualche serata davanti al PC, perché c’è parecchia roba da digerire.

Al livello più alto si trova l’oggetto Direct3D. Potete pensare a questo oggetto come ad una specie di deità minore, al quale chiedete favori e miracoli. Più seriamente, l’oggetto Direct3D governa le funzioni di livello più alto: ad esempio, è a lui che chiedete come è fatto lo schermo su cui andrete a disegnare.

Attraverso l’oggetto Direct3D viene creato quello che si chiama il Direct3Ddevice. Il D3Ddevice fa la maggior parte del lavoro: disegna, muove, sposta, pulisce, tiene traccia degli oggetti presenti sullo schermo.

Gli oggetti da disegnare vengono espressi sotto forma di vertici. Il vertice è il mattone con cui tutto il mondo virtuale viene costruito. I vertici vengono riuniti in triangoli: tutti i poligoni più complicati vengono spezzati in triangoli, e le superfici curve vengono approssimate con strisce di triangoli. Il motivo è che è molto facile calcolare posizione, orientamento eccetera di un triangolo che di un poligono con un maggiore numero di vertici. Per una scheda grafica, disegnare un quadrato è più difficile che disegnare due triangoli uniti (che alla fine formano lo stesso quadrato).

Ogni vertice viene trasformato in modo indipendente: la trasformazione comprende varie rotazioni e traslazioni per riportarlo nel punto di vista giusto, la proiezione prospettica, il controllo di visibilità e di profondità, l’illuminazione da parte di una o più sorgenti, l’applicazione di una o più texture (fino ad 8), e finalmente il disegno sullo schermo. Forse non ho azzeccato l’ordine (però sono sicuro che il disegno sullo schermo sta per ultimo...), ma credo di avere reso l’idea.
Tutti i pixel che vanno a formare il triangolo vengono trattati allo stesso modo, sfruttando le informazioni di colore, posizione, illuminazione e texture dei vertici.
Oltre a tutto questo, la versione 8 di DirectX introduce i concetti di vertex shader e pixel shader, ossia di mini-programmi in linguaggio assembler che trattano i vertici lasciando totale libertà al programmatore. Per adesso li eviterò accuratamente, anche perché non esiste alcuna scheda grafica in commercio in grado di sfruttarli: la prima sarà la nVidia GeForce3.

Ognuno dei passi precedenti richiede linee di programma, calcoli e sudore della fronte. Non spaventatevi però :-) E’ possibile iniziare a piccoli passi, introducendo un argomento alla volta e lasciando il resto impostato su “default”, per così dire, in modo da iniziare a vedere qualcosa fin da (quasi) subito.

Le prossime lezioni saranno dedicate alla costruzione di un codice sorgente che potremo utilizzare come base per i nostri esperimenti. Inoltre, farò pesantemente uso delle funzioni “già pronte” che sono comprese nell’SDK. Se guardate da vicino, noterete che le prossime lezioni saranno molto simili ai tutorial forniti proprio lì. E non è un caso :-)

 

Torna all'indice Generale del corso di Corso di DirectX di Software Planet