Un exemple DX8 avec C++Builder6

 

18 avril 2002 mis à jour le 1 mai 2003

Par Olivier Constans

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:

  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:

 

 

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

 

 
 
 
 
Partenaires

Hébergement Web