Tutoriels,  Cours, Forums, Download, Exemples de code, Scripts, Gratuit et Freeware, Tests, Comparatifs, etc.


Le site du SDK GENESIS3D pour les compilateurs C++Builder et Bcc55
 G3DBuilder  Présentation G3D11 Borland SDK   Tutoriels  Astuces Images   Télécharger  Liens



Tutoriel 1

Flipping Book


Construire une mini application en Cbuilder5

par Olivier Constans

Mini application G3d - tutor 01

Ceci est mon 1er tutoriel et en conséquence, il n'est peut être pas ce qui se fait de mieux en la matière, mais j'espère qu'il saura vous guider un petit peu dans la prise en main de genesis avec Cbuilder.

Je tiens aussi à remercier ici les gens de la sympathique communauté genesis 3d qui sont toujours prêt à répondre aux questions et m'ont apporté une aide précieuse dans la compréhension et l'utilisation de l'api genesis3d.

Le programme qui sert de support à ce tutoriel est vraiment très, très sommaire et se limite à gérer le déplacement d'une camera dans un tout petit monde 3d.

Il n'est pas non plus optimisé et peu grandement être amélioré tant dans l'écriture que dans la structure.

Prérequisit

Pour pouvoir suivre le tutoriel qui suit et utiliser le programme qui va avec, il vous faudra auparavant avoir installer genesis3d et le sdk genesis3d pour le c++ de borland.

Mise en place des répertoires

Nous allons créer notre petite application et pour cela nous allons structurer notre environement.

Nous allons définir un répertoire MiniApp et à l'intérieur de celui ci nous définirons un répertoire niveau qui contiendra notre monde. Un répertoire source dans lequel nous placerons notre projet Cbuilder et nos sources. L'executable sera placé dans le répertoire minapp.

Construire le Monde

Tout d'abord, il nous faut construire le monde que nous allons représenter et dans lequel nous allons évoluer grâce à genesis3d.

Pour cela , il faut utiliser l'éditeur de niveau Genedit Classic build 0.57 (que vous irez télécharger depuis le site www.genesis3d.com section download) ou celui livré de base avec le sdk genesis3d 1.1 original .

Je ne vais pas ici faire un cours sur l'éditeur de niveau étant donné qu'il existe déjà d'excellents tutoriels traitant de la question sur le site "World of Genesis". Vous pouvez aussi vous référer au tutoriel de Jean Louis Clément qui vous présente l'éditeur de niveau de genesis3d 1.1.

Disons que pour notre petite application il nous faut une boîte vide (HolloW Box) de dimension assez correcte pour nous déplacer à l'intérieur et nous y placerons une sphére solide. Vous n'oublierez pas de placer une entité deathmatchstart à l'intérieur de notre cube sans quoi la compilation de niveau échouera.

Ce niveau est livré préconstruit dans les sources accompagnant ce tutoriel et s'appelle MAP01.

Le source du niveau est MAP01.3dt et l'objet compilé que nous utiliserons dans notre projet est MAP01.BSP.

Le projet Cbuilder


Pour offrir un support à notre application genesis, nous allons définir une fiche dans Cbuilder.
Dans la classe associée à cette fiche, nous définirons les variables et les méthodes nescessaire à la mise en oeuvre de genesis .

Les variables principales de l'application:
geEngine *Engine ;  Le pointeur vers la structure du moteur
 geDriver_System *DrvSys ;  Pointeur vers le driver système
  geDriver *Driver ;  Pointeur vers le driver video (d3d , glide , opengl...)
  geSound_System *SoundSys ;  Pointeur vers driver son (non utilisé ici)
 geDriver_Mode *Mode ;  Mode video à utiliser
 geWorld *World ;  Pointeur vers la structure représentant le monde
 geCamera *Camera ;  Pointeur vers l'objet camera
 GE_Rect Rect ;  Rectangle de clipping de la camera (champ)
 geXForm3d XForm;  Matrice de transformation
  HWND hWND ;  handle de la fiche principale
char ourdriver ; // driver a utilise   Driver à utiliser G = glide, ( = D3d , O =Opengl


Les méthodes principales :
geBoolean __fastcall InitEngine(HWND hWnd) ;    initialisation du moteur
 bool __fastcall FindDriver();  trouver le driver demandé
  void __fastcall LoadPrefs(char *drv ,int *width , int *height);  Charger les préférences
 bool __fastcall LoadLevel(char *Filename) ;  Charger le niveau
  void __fastcall ShutDown();  Libérer la mémoire
 void __fastcall MoveCamera() ;  Déplacer la camera


Les fichier include:
Dans la déclaration de la classe fiche, nous indiquerons le fichier genesis.h , ce fichier devra toujours être indiqué après la directive d'inclusion de windows.h.

Les options du projet:
Nous indiquerons le chemin des fichier include de genesis \G3D11_BorlandSdk\Include

Si nous souhaitons utiliser notre programme avec la dll genesis.dll, nous incluerons au projet la bibliothèque d'importation genesis.lib soit directement en ajouttant se fichier au projet, soit en indiquant son chemin dans les options de projets : \G3D11_BorlandSdk\Importlib
Dans ce cas, il faudra placer genesis.dll dans le même répertoire que l'executable obtenu.

Si par contre nous souhaitons générer un executable plus gros mais autonome, nous ajouterons au projet la bibliothèque statique genesis.lib situé dans \G3D11_BorlandSdk\lib .

Enfin, il convient de définir les constantes conditionnelles suivantes:
_BCB pour prendre en compte les spécificités borland dans les include de genesis
GENESISDLLBUILD si nous souhaitons utiliser genesis.dll seulement
c'est la solution retenue dans notre exemple.
Nous décocherons aussi la case "construire avec les paquets d'execution" dans l'onglet paquets et la case "utiliser la RTL dynamique" dans l'onglet Lieur. Cela aura pour effet de générer un exe un peu plus gros, mais indépendant de toute dll.

Le programme:

Nous enregistrerons notre projet sous le nom de AppMini.bpr et le fichier unité sous MiniApp.cpp.

AppMini.cpp contient la fonction winMain de notre applicatin Cbuilder et rien de spécifique à genesis.


La manipulation de genesis 3d a lieu dans le source se rapportant à la fiche principale. C'est cette fiche qui servira de support à genesis pour effectuer l'affichage du rendu 3d.

L'initialisation du moteur va avoir lieu dans lévènement OnCreate de la fiche.
Cette initialisation est constituée des étapes suivantes:


Charger les préférences : LoadPrefs();
lecture d'un petit fichier texte (pref.ini) contenant le driver et la résolution écran à utiliser. Pour le driver il s'agit de la 1ère lettre du descriptif du driver, G pour glide, ( pour DirectX car le texte commence par un parenthèse et O pour l'opengl.

Récupérer le handle de la fiche et créer le moteur, en retour si tout c'est bien passé, on récupère un pointeur vers l'objet moteur.
Form1->hWND = Form1->Handle ;
Form1->Engine = geEngine_Create(Form1->hWND ,"Miniapp Genesis 3D",".");

Obtenir le driver système associé au moteur
Form1->DrvSys = geEngine_GetDriverSystem(Form1->Engine) ;


Maintenant, la suite se passe lors de l'activation de la fiche dans l'évènement OnActivate
La méthode InitEngine est appelée et va dans l'ordre

  • charger le driver a utiliser (d3d, glide ou opengl) et initialiser la résolution graphique
  • créer l'objet camera
  • appeler la méthode LoadLevel qui va charger le niveau et créer l'objet World et lui affecter l'objet camera.
  • orienter la camera et l'initialiser à sa position de départ dans le niveau


Si maintenant tout s'est bien passé, alors nous pouvons démarrer la boucle de rendu qui tant que l'on n'aura pas appuyé sur esc, va lire la souris et faire avancer la camera ou l'orienter selon que vous aurez ou non cliqué sur le bouton gauche.Au départ, la caméra est en mode avance.

C'est dans le traitement du déplacement de la caméra que nous trouverons aussi l'appel aux fonctions de détection de collision qui permettent de ne pas passer au travers des murs et des objets.

Le calcul du déplacement ainsi que toutes les actions qui affecteront la nouvelle scène à afficher (déplacement de personnage, ojets ,explosions,affichage de texte, etc...) auront toujours lieu entre les appels de fonctions geEngine_BeginFrame qui prépare le buffer de rendu et geEngine_EndFrame qui affiche le contenu du buffer de rendu et avant geEngine_RenderWorld qui lance le calcul du rendu de la nouvelle image 3d .
Le but de cela étant comme dans toutes les applications 3d, d'effectuer les calculs pendant que le moteur affiche l'image calculée précédement .

Lorsque l'on aura appuyé sur esc, signifiant au programme de s'arrêter, on appelera la méthode Shutdown qui se chargera de libérer la mémoire des objets engine, world, camera...

Voilà a très grand traits esquissés les principes de base d'un programme pour genesis.
Dans le cadre d'un programme plus complexe, il faudrait envisager l'initialisation d'un driver pour les sons, la gestions de joysticks, la gestion des acteurs (les objets animés qui interragissent avec l'utilisateur) , le changement de niveau, la gestion des portes ( chagenement de pièces avec portes qui s'ouvre quand on arrive) , les effets spéciaux, lumières, effets miroirs, la partie intelligence artificielles pour les personnages non joueur d'un jeu etc....

Mais à présent, à vous ! Je vous invite à télécharger la mini application fournie avec ce tutoriel et à vous amuser avec afin de vous familiariser avec l'utilisation relativement simple de genesis 3d.
Vous ferez ainsi vos premiers pas dans le monde formidable de la programmation de scènes en 3d.

Le programme est commenté de manière à bien expliquer les étapes importantes, aussi n'hésitez pas à en lire le source qui fait aussi parti du tutoriel.


Téléchargement de l'exemple et installation
Téléchargez le programme projet pour Cbuilder5 ICI et dézippez le tout dans la racine de votre disque. Un répertoire g3d_tutor sera créé dans lequel vous trouverez le répertoire MiniApp qui contient le sujet de notre tutoriel.

NB: Vous pouvez utiliser les sources pour une version inférieure de cbuilder. Il vous faudra seulement reconstruire le projet en y ajoutant le source MiniApp.cpp , la bibliothèque d'importation genesis.lib situé dans le répertoire implib du Sdk pour borland.



















Hit-Parade




Vos questions techniques :Le Forum C/C++ - Publiez vos avis, liens, cours & articles : Publication
et rejoignez-nous dans l'équipe de rédaction de l'Association d'entraide des développeurs Francophones
Copyright 2000, 2001 www.developpez.com
Hit-Parade