[ Home | Capitolo 1 | Capitolo 2 | Capitolo 3 | Capitolo 4 | Capitolo 5 ]

Guida di David Joffe alla Programmazione di Giochi con le DirectX

Capitolo 1: Introduzione alle DirectX

1.1 Poche informazioni veloci su questi articoli

Gli esempi in questo documento sono sviluppati per le applicazioni Visual C/C++ MFC, ma la maggior parte del materiale trattato è abbastanza slegato da MFC; quindi non preoccupatevi più di tanto se non conoscete MFC.

La pagina di apertura di questo tutorial contiene una lista delle Frequently Asked Questions. Guardatela prima se avete dei problemi; la risposta alle vostre domande potrebbe essere lì..

1.2 Che cosa sono le DirectX?

Prima del rilascio di Windows 95, molti giochi erano realizzati per la piattaforma DOS, di solito utilizzavano qualcosa come DOS4GW o qualche altro 32-bit DOS extender per ottenere l'accesso alla modalità protetta a 32-bit. Windows 95, comunque, sembrò segnare l'inizio della fine del prompt del DOS. Gli sviluppatori di giochi iniziarono a chiedersi come potevano fare per scrivere dei giochi ottimizzati per girare sotto Windows 95 - i giochi di solito richiedono la modalità full screen e hanno bisogno di avvicinarsi il più possibile al vostro hardware. Windows 95 sembrò essere "infastidito" da ciò. Il DOS aveva permesso agli sviluppatori di programmare il più "vicino alla macchina" possibile, cioè, andare diritti all'hardware, senza passare per strati di strazione ed incapsulamento. In questo periodo, le informazioni extra di una API generica avrebbero reso i giochi troppo lenti.

Così la risposta di Microsoft a questo problema fu un Software Development Kit (SDK) chiamato DirectX. Le DirectX sono un orribile, progettato stupidamente e superficialmente, voluminoso, brutto e confuso bestione (*) di una API (Application Programming Interface) che ha portato molti programmatori all'alcolismo. All'inizio furono comprate da una società londinese, la RenderMorphics, e semplicemente rilasciate col nome di DirectX 2. Le DirectX 3 furono probabilmente la prima release "seria" della Microsoft, che le spinse attivamente verso l'obiettivo di diventare le API per la programmazione di giochi del futuro. Essere la più grande software company del pianeta e essere gli sviluppatori del sistema operativo che equipaggia circa il 90% dei pc esistenti servì allo scopo. I produttori di hardware si resero conto rapidamente che la cosa più prudente da fare era seguire la Microsoft, ed ognuno cominciò a produrre i driver DirectX per il loro hardware. Sotto molti aspetti fu una cosa positiva per gli sviluppatori di giochi.

La versione corrente (al momento della scrittura di questo paragrafo) è DirectX 6.1. Dalle DirectX originali sono stati introdotti un sacco di miglioramenti. Per esempio, la documentazione, che all'inizio faceva schifo, non è più così schifosa.

Uno degli scopi principali delle DirectX è di fornire uno standard per accedere alle periferiche hardware di marche e tipi differenti. Per esempio, le Direct3D forniscono un'interfaccia di programmazione "standard" che può essere usata per accedere alle caratteristiche di accelerazione hardware 3D di quasi tutte le schede 3D presenti sul mercato, che hanno un driver Direct3D scritto per esse. In teoria si ritiene di rendere possibile, per una applicazione, di girare in maniera ottimale su tutte le svariate configurazioni hardware presenti allo stesso modo. In pratica, di solito non è così semplice.

le API DirectX sono progettate principalmente per scrivere giochi, ma possono essere usate anche in altri tipi di applicazioni. Le API al momento sono suddivise in cinque sezioni principali:

1.2.1 Componenti DirectX

DirectDraw Capacità grafiche a 2 dimensioni, superfici, double buffering, etc
Direct3D API relative alla programmazione 3D enormemente pratiche.
DirectSound Suono; suono 3D
DirectPlay Sempifica lo sviluppo di giochi di rete
DirectInput Accesso a varie periferiche di input

Inoltre, le DirectX 6(? controllatelo) introducono qualcosa chiamato DirectMusic, che si suppone di rendere ai programmatori più facile introdurre la musica nei loro giochi in modo che lo stile musicale cambi a seconda del tipo di azione che si sta svolgendo nel gioco.

1.3 Prestazioni delle DirectX e accelerazione hardware

Sebbene le prestazioni delle Direct3D in modalità software non siano così scadenti, non colpiscono abbastanza in giochi seri. Le DirectX sono state progettate avendo l'accelerazione hardware in mente. Cercano di fornire un accesso all'hardware del livello più basso possibile, rimannedo nel contempo ancora una interfaccia generica. Fornire funzioni come il disegno di triangoli 3D da far eseguire alla scheda grafica, libera la CPU (Central Processing Unit) per lo svolgimento di altri compiti. Gli acceleratori hardware Direct3D tipici, hanno almeno 4 o preferibilmente 16 o più Megabytes di memoria RAM per memorizzare le texture maps (immagini bitmapped fatte di piccoli punti chiamati "pixels"), textures, sprites, overlays e altro.

Le DirectDraw e le Direct3D sono costruite come uno strato relativamente sottile sull'hardware, utilizzando quello che vienen chiamato "hardware abstraction layer" (HAL) delle DirectDraw. Per funzionalità non fornite da alcune schede, viene fornita una implementazione software equivalente attraverso l'"hardware emulation layer" (HEL).


Diagramma che illustra dove si adatta l'architettura DirectDraw/Direct3D, fiduciosamente in maniera accurata.

1.4 DirectX e COM

Il set di moduli delle DirectX sono costruiti come oggetti COM (Component Object Model). COM è ancora un'altra brutta interfaccia della Microsoft - sebbene le versioni più nuove di COM non facciano schifo come le prime. Non capitemi male, non sono contro l'esistenza di qualcosa che faccia quello che fa il COM - ma l'implementazione lascia molto a desiderare. Ad ogni modo,un oggetto COM è un po' come una classe C++, in quanto incapsula una serie di metodi e attributi in un singolo modulo, e poiché fornisce una sorta di modello di ereditarietà, allora un oggetto COM può essere costruito per supportare tutti i metodi dei suoi oggetti di origine e aggiungerne altri.

Non avete bisogno di conoscere molto sul COM per usare le DirectX, quindi non preoccupatevene molto. Utilizzerete un po' il COM quando inizializzerete oggetti e li cancellerete, e quando controllerete i valori restituiti da chiamate a funzione, ma è più o meno solo questo.


(*) E' la mia opinione personale. La vostra può essere diversa.


Articolo di David Joffe (http://www.geocities.com/SoHo/Lofts/2018/); Ulitmo aggiornamente: 17 Aprile 1999

---
Traduzione: Papero - IPG 1999
Eng?Ita! Team
http://www.ItaProGaming.com