|
Bonjour,
aujourd'hui, nous allons aborder la programmation de directX
8 à l'aide de C++Builder6 , et pour illustrer le sujet,
nous utiliserons un des tutoriaux livré avec le SDK directX8.1.
Bien sûr, prendre le tutoriel de microsoft tel quel
pour le compiler avec cbuilder6 ne présente pas beaucoup d'intérêt.
Vous pouvez comparer le programme original du SDK DX81 avec
celui pour cbuilder, cela vous donnera une petite idée de comment
transformer un programme style API window en programme style VCL.
Le programme en quelques mots :
Le programme original dessine un triangle coloré
dans une fenêtre et ce triangle est en rotation autour d'un axe.
Afin d'apporter une petite touche personnelle, j'ai changé
un peu l'ordre des choses en faisant tourner le triangle autour des 3
axes et j'ai en plus fait varier le champ de vision lorsque l'on appuie
sur les touche "flèche haute" et "flèche
basse".
Le programme s'articule comme suit:
-
L'initialisation de directX est gérée
dans la méthode FormCreate de la fiche.
-
Le démarrage de dessin est effectuée
lors de l'activation de la fiche dans FormActivate où est initialisé
le triangle à afficher et où l'on active le timer
-
Le timer sera chargé de lancer le calcul de
l'image et son affichage à intervalles réguliers en
appelant la méthode rendu.
-
Le clavier sera scruté et l'appui sur les touches
géré dans la méthode FormKeyDown de la fiche
-
La méthode rendu est chargée de calculer
le dessin en appliquant les transformations codées dans la
méthode SetupMatrice, puis dessine dans le buffer mémoire
en arrière plan et enfin envoie le contenu de ce buffer à
l'écran une fois le calcul fini.
Pour l'essentiel, le programme est largement commenté
et je vous invite à lire le source:
Compilation:
Pour pouvoir compiler ce programme, il vous faut avoir installé
le SDK Dx81 de microsoft.
Pour pouvoir utiliser directX 8.1 ,étant donné
que microsoft ne livre plus les bibliothèques borland avec son
SDK, j'ai utilisé un mélange entre le sdk DX8 pour Borland
fabriqué par M.Fötsch et une extraction des bibliothèques
d'importation à partir des dll de DX8.1. Vous trouverez pour vous
aider ma version des .lib pour Borland dans le zip du dossier Borlandlib.
Installez le dans le répertoire du SDK dx81. Ou alors, installez
la version du SDK DX8 de M.Fötsch .
Vous aurez sans doute besoin de modifier les options du
projet afin de faire correspondre l'emplacement du fichier include et
des bibliothèque d'importation du sdk dx81 avec leur emplacement
sur votre disque.
De la même façon, mon projet utilise les bibliothèques
suivantes:
ddraw.lib
d3d8.lib
d3dx8.lib
référencées dans le projet à
partir du répertoire Borlandlib cité plus haut.
Les particularités:
Pour pouvoir utiliser le SDK directX8 , il existe quelques
subtilités à savoir.
La 1ère est qu'il faut impérativement écrire
#define INITGUID tout au début du programme ou alors ajouter la
version Borland du fichier dxguid.lib (bibliothèque statique) au
projet . Si cela n'est pas fait, attendez vous à avoir une longue
liste d'erreurs lors de la liaison.
Dans le programme exemple, cette déclaration est
effectuée dans Dx8_mod.cpp
Ensuite, il faut savoir que microsoft utilise des fonctions
très spécifiques qui n'existent pas en cbuilder, il s'agit
des fonctions sqrtf, cosf,sinf, tangf..que l'on trouve dans certains include
de directx et qui sont des version float des fonctions sin,cos,tan...
La solution est d'écrire les définitions suivantes
avant la déclaration des include file
Voici un extrait du Dx8Sq.cpp illustrant cela
|
#define sqrtf (float)sqrt // ceci est indispensable car C++Builder
ne connait pas sqrtf
#include <d3dx8.h>
|
Liens:
DirectX8
Sdk version Borland La version de DirectX8 pour les compilateurs Borland
de M.Föstch
BCB DX library
Un projet open source de composants DirectX8 pour C++Builder
Télécharger le projet,
les sources et l'exe: (attention, il s'agit d'un projet pour C++Builder
6)
Exemple directx8 avec
C++Builder6
Télécharger ma version
des bibliothèque du DX81 SDK pour borland (lib de M.Fötsch
+ implib des dll de DX81)
Borlandlib.zip
|