I. Introduction

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.

II. 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:

  1. L'initialisation de directX est gérée dans la méthode FormCreate de la fiche.
  2. 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
  3. Le timer sera chargé de lancer le calcul de l'image et son affichage à intervalles réguliers en appelant la méthode rendu.
  4. Le clavier sera scruté et l'appui sur les touches géré dans la méthode FormKeyDown de la fiche
  5. 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:

III. 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.

IV. 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

 
Sélectionnez
  1. #define sqrtf (float)sqrt // ceci est indispensable car C++Builder ne connait pas sqrtf 
  2. #include <d3dx8.h> 

V. Liens:

Télécharger le projet, les sources et l'exe: (attention, il s'agit d'un projet pour C++Builder 6)

Télécharger ma version des bibliothèque du DX81 SDK pour borland (lib de M.Fötsch + implib des dll de DX81)