Avant de pouvoir commencer à utiliser Ultimate 3D, vous avez besoin des fichiers Game Maker sur lesquels travailler. Il est évident que vous ne pourrez pas le faire avec un projet vide. Vous avez besoin des scripts et des objets de base d'Ultimate 3D. Si vous avez vu la démo qui accompagne Ultimate 3D, vous pouvez l'utiliser comme une base pour vos jeux. Mais je ne le recommande pas. Si vous voulez vraiment faire votre propre jeu, vous devrez commencer à partir de zéro, dans ce cas les éléments de la démo ne seront pas d'une grande utilité pour vous. Si vous voulez juste modifier la démo d'une certaine manière, vous pouvez l'utiliser. Mais les gens le remarqueront et cela risque d'être mal perçu lorsque vous publierez votre jeu.
Vous devriez commencer à faire vos premiers projets Ultimate 3D en créant un nouveau dossier et en copiant le fichier BasicGM5.gmd (cf. BasicGM6.gm6 ou BasicGM7.gmk). Ce fichier est présent dans le Ultimate 3D Software Development Kit (U3D SDK) qui peut être téléchargé sur Ultimate3D.org, sur FKTECH ou sur Le CBNA. Ce fichier Game Maker contient tout ce dont vous avez besoin pour démarrer avec Ultimate 3D (à l'exception des connaissances de base qui se trouve dans la documentation que vous lisez actuellement). Il y a par exemple, un exemple de chaque type d'objet 3D Ultimate, ainsi que l'objet control qui est nécessaire pour utiliser Ultimate 3D. Une seule room contient une combinaison indéfinie de ces objets. Lorsque vous commencez à faire un jeu, vous devez supprimer tous les objets, sauf l'objet de contrôle et l'objet caméra.
Il y a un certain nombre de choses que vous allez remarquer au sujet de cette room. Si vous
créez une nouvelle room qui est destinée à être utilisé avec Ultimate 3D, elle
doit satisfaire à ces exigences:
- La room utilise les vues (views) et la première vue (view) doit être activée.
- La couleur de fond (background) est désactivée. Ce n'est pas
nécessaire mais c'est une perte de temps de calcul, si vous laissez Game Maker afficher la couleur du background.
- La room ne doit pas contenir plus d'un objet de contrôle et plus d'un objet de caméra.
Je vous recommande de créer deux sous-dossiers dans le dossier de votre projet. Appelez le premier "gfx" et utilisez le pour stocker les textures de votre jeu. Appelez le second "models", j'imagine que ce qu'il est censé contenir vous paraît évident. Mais c'est à vous de décider.
Il y a une chose
au sujet de l'utilisation
d'une extension 3D pour Game Maker que vous n'apprécierez
pas. Lorsque
vous utilisez Ultimate 3D, le résultat des traitements, s'affichera
dans la première view de Game
Maker. Tant qu'Ultimate 3D utilise la view, vous ne pourrez plus
utiliser Game Maker pour
dessiner sur cette même view. En effet, il
n'est tout simplement pas possible pour deux programmes totalement
différents, d'afficher leur rendu sur la même partie de l'écran
simultanément. C'est pour cette raison qu'Ultimate 3D ne possède pas
que des fonctions pour dessiner des scènes 3D, il y a aussi des
fonctions de dessin 2D et de texte. Toutefois,
la première view ne doit pas couvrir l'ensemble de la
fenêtre de jeu. Vous pouvez utiliser plusieurs views, et aussi
longtemps
qu'elles ne couvriront pas la view d'Ultimate 3D, il n'y aura aucun
problème pour les utiliser avec les fonctions de Game Maker. Une autre
chose à savoir est que
vous ne pourrez pas passer en mode plein écran en utilisant
Ultimate 3D. Si vous désirez passer en mode plein écran, il vous
faudra l'activer dans les options de GameMaker, ou dans le script Ultimate3DOptions ().
Bon, passons au premier élément du côté pratique : l'objet caméra. Par défaut, l'objet caméra possède un morceau de code pour le contrôle de la vue par la souris et fait plusieurs appels à la fonction move d'Ultimate 3D dans les évènements du clavier (keyboard events). Si vous ne les aimez pas, vous êtes libres de les enlever. Mais comme un impoli je ne vous ai pas présenté la fonction move. Jetez-y un coup d'oeil:
Cette fonction déplace dans un environnement en 3d l'objet qui l'appelle.
Move(
Longitude,
Latitude,
Speed
)
|
---|
Longitude, Latitude
Ces deux paramètres décrivent la direction que l'objet
doit emprunter. Cela fonctionne de la même façon que sur un globe. Longitude
décrit de quelle façon l'objet se déplace vers le haut ou vers le bas. 0 signifie que cela
ne change pas sa hauteur, 90 signifie qu'il se déplace en ligne droite vers le
bas et -90 signifie qu'il se déplace en ligne droite vers le haut. Latitude
donne la direction horizontale à l'objet de la même façon. Notez que celle-ci diffère de la variable
direction
de Game Maker. Pour convertir une valeur de direction Game Maker en une
valeur de latitude Ultimate 3D, sans en changer le sens, il vous suffit d'utiliser
cette petite formule: Latitude
=direction
+90.
Vitesse
Ce
paramètre définit la vitesse de l'objet que vous souhaitez déplacer.
Notez que vous devez appeler la fonction à chaque step afin que l'objet se déplace à cette vitesse.
A partir de
maintenant, toutes les fonctions avec des paramètres seront décrites
comme ceci. Si vous voulez seulement une information rapide tout en
programmant, vous pouvez également ouvrir le script du même nom. Chaque script
contient une brève description de la fonction et de ses paramètres.
Cette fonction déplace un objet appellé dans un espace 3D.
Move(
Longitude,
Latitude,
Speed
)
|
---|
Ces deux paramètres décrivent la direction de l'objet
devrait emprunter. Il fonctionne de la même façon que sur un globe. Longitude
décrit comment l'objet se déplace vers le haut ou vers le bas. 0 signifie que cela
ne change pas sa hauteur, 90 signifie qu'il se déplace en ligne droite vers le
bas et -90 signifie qu'il se déplace en ligne droite vers le haut. Latitude
donne la direction hrizontale à l'objet de la même façon. Notez que celle-ci diffère de la variable
direction
de Game Maker. Pour convertir une valeur de direction Game Maker en une
valeur de latitude Ultimate 3D sans en changer le sens, vous avez juste à utiliser cette petite formule:Latitude
=direction
+90.
Ce paramètre donne la vitesse de l'objet que vous souhaitez déplacer. Notez que vous devez appeler cette fonction à chaque étape (step) pour faire se déplacer l'objet à cette vitesse.
A partir de maintenant, toutes les fonctions avec ces paramètres seront décrites comme ceci. Si vous voulez juste une information rapide tout en programmant, vous pouvez également ouvrir un script. Chaque script contient une brève description de la fonction et ses paramètres.
En passant, vous avez peut-être remarqué que Move(...) est écrit avec une majuscule toutes les autres fonctions d'Ultimate 3D. Cela a deux raisons. La première, je suis habitué à appeler mes fonctions comme ça en C++. La seconde, cela vous aide à voir si une fonction appartient à Game Maker ou à Ultimate 3D; c'est plus facile de cette façon. S'il n'y avait pas cette différence là, il y aurait eu un préfixe. Donc Move ne serait pas appelé Move mais u3d_move. À mon avis, il est beaucoup plus facile d'appuyer sur la touche Shift parfois que d'écrire u3d_blablabla... tout le temps. En plus, c'est mieux visuellement.
Mais revenons-en à notre sujet... l'objet caméra. Dans Ultimate 3D, tout objet 3D dans une scène doit être représenté par une instance d'objet de Game Maker. Vous pouvez alors modifier les propriétés des objets de la scène en changeant simplement les variables de leurs objets Game Maker. Une fonction Ultimate 3D telle que MoveCamera() les transmettra à Ultimate 3D automatiquement. Les objets caméras possèdent les variables suivantes:
x, y, z
Ces variables donnent la position de la caméra.
Puisque nous sommes dans un espace 3D désormais, il n'y a plus que x et y seulement.
Ils ont maintenant un nouvel ami qui s'appelle z. Il définit la hauteur de l'objet.
Donc, si vous augmentez z
, l'objet se déplacera vers le haut, si vous
diminuez z
,
l'objet se déplacera vers le bas. On appelle coordonnée la combinaison
de x, y et z. Vous devez retenir cette expression. Elle apparaîtra à nouveau.
height
Dans un jeu à la première personne, la caméra a habituellement une
hauteur particulière au-dessus du sol. Cette hauteur peut être implémentée
en utilisant cette variable. La coordonnée z de la caméra (celle
avec laquelle travaille Ultimate 3D) n'est pas z
, mais z
+height
.
rotx, roty, rotz
Ces variables définissent l'angle de rotation de la caméra. En bref, rotx
décrit le "pitch" de l'objet, roty
décrit le "yaw" et rotz
décrit le "roll". Une description plus détaillée de ce que signifient ces variables est
donnée dans la seconde partie du tutoriel "Utilisation des objets primitifs».
view
Cette variable définit le double angle de vue
vertical de la caméra. Comme avec n'importe quel angle dans Ultimate 3D, il doit
être en degré.
min_range, max_range
La caméra affichera uniquement les objets qui sont plus loin que min_range
et
plus proche que max_range
. Tous les autres objets seront invisibles. Vous
devrez utiliser des valeurs raisonnables pour ces variables. Si min_range
est
trop petit ou max_range
trop grand, vous obtiendrez d'étranges erreurs d'affichage, telles que
des objets se mettant à couvrir d'autres objets qui sont normalement
devant eux.
falling, falling_speed (optionnel)
Si falling
est égale à true, la coordonnée z de la caméra, sera augmentée par falling_speed
à chaque step et falling_speed
sera diminué par global.gravitation
(en diminuant, je veux dire qu'à chaque step falling_speed
deviendra plus petit. Les nombres négatifs baissent la vitesse et ceux positifs augmente la
vitesse). Ces variables sont destinées à être utilisées en combinaison
avec les fonctions de collisions prédéfinies: CollisionH(), CollisionV(),
CollisionZ() et CollisionTerrainModel().
follow, perspective, rotatex, rotatey, distance (optionnel)
follow
peut prendre
l'ID d'une instance d'un objet GameMaker, afin que la caméra suive cet
objet. L'objet suivi peut avoir une variable height, dans l'idée que la
caméra suive un point au dessus ou en dessous de la position réelle de
l'objet. perspective
définit la façon dont la caméra suit l'objet. Cela peut être 0 pour une
caméra à la première personne, 1 pour une caméra fixe à la troisième
personne, 2 pour une caméra flexible à la troisième personne. Si perspective
est égale à 1 ou 2, vous pouvez changer rotatex
et rotatey
pour compenser le centre de rotation. distance
définit à quelle distance de l'objet doit se trouver la caméra pour le suivre.
Pour le moment, c'est tout ce que vous avez besoin de savoir sur l'objet caméra. En fait, il y a un peu plus de variables et de fonctions pour les caméras, mais ces dernières sont décrites dans les chapitres pour les utilisateurs avancés.
Maintenant vous savez comment créer un objet caméra. Malheureusement, il n'y a rien qui s'affichera pour le moment (du moins si vous avez nettoyé la room). Mais ne vous inquiétez pas, cela va changer très bientôt.
Avant de créer les premiers objets visibles, il y a une chose que vous devez savoir à propos du chargement des textures. Pour ceux qui ne connaissent pas, voici une courte explication de ce qu'est une texture: Une texture est (généralement) une image en deux dimensions qui est créé par une application utilisant des graphismes 3d. Ensuite, cette image peut être appliquée à un objet. Sans textures, tous les objets graphiques 3D seraient constitués d'une seule couleur, ce serait vraiment ennuyeux. Pour cette raison, il est très important d'avoir de bonnes et de belles textures. Cela rend vos jeux beaucoup plus réalistes.
Pour charger une texture en mémoire vous avez seulement besoin d'une fonction très simple:
LoadTexture(
TextureFile,
TextureIndex,
Width, Height
)
|
---|
TextureFile
Etant donné que depuis Ultimate 3D on ne peut pas accéder aux
ressources de Game Maker, la texture doit être sauvegardé dans un fichier
externe. Ce fichier peut être un bmp, jpg, tga, png, dds, ppm ou fichier dib
(PAS .gif). Je vous recommande d'enregistrer les textures dans un sous dossier
appelé "gfx". Mais si vous voulez cacher vos textures aux gens qui jouent à votre
jeu, vous pouvez aussi les joindre à votre exécutable en utilisant les data file de Game Maker, et les charger à partir de son
répertoire temporaire (Variable GameMaker: temp_directory).
TextureIndex
L'indice de la texture, que vous souhaitez associer à cette dernière. Cela peut
être un nombre arbitraire dans la fourchette de 0 à 998. Un indice est semblable
à un id. Si vous voulez utiliser la texture plus tard, vous devez connaître
l'indice associé avec celle-ci.
Width, Height
D'usage,
vous pourrez tout simplement ignorer ces deux paramètres. Si vous
entrez 0 ou rien pour chacun d'eux, Ultimate 3D obtiendra la hauteur et
la largeur des dimensions de la texture. Mais si vous entrez des
valeurs qui diffèrent de la taille réelle de la texture, elle sera
réduite à cette taille. Notez que seules les puissances de deux ou zéro
peuvent être passées pour ces paramètres. Pour plus d'informations, lisez ce
qui suit.
Il y a encore une chose importante que vous devez savoir à propos des textures. La plupart des périphériques graphiques fonctionnent uniquement avec des textures qui ont des dimensions composées de puissances de deux. En outre, certains périphériques graphiques ne peuvent fonctionner qu'avec des textures du second degré, mais c'est un cas rare. Quoi qu'il en soit, vos textures seront étendues si elles n'ont pas les dimensions composées de puissances de deux, afin de leur donner des dimensions valides. Pour éviter cette perte inutile de qualité, vous devez utiliser ces dimensions pour toutes vos textures. Quelques exemples valables pour les dimensions sont 256*256, 128*512 et 1024*64. Une texture d'une taille de 257*257 qui serait étendue jusqu'à 512*512 serait un véritable gaspillage de mémoire.
Une autre chose que vous avez besoin de savoir c'est comment faire des textures transparentes. Il y a deux façons de le faire. Le mieux est d'utiliser un format de fichier qui est favorable à la transparence, tels que le tga ou png. The Gimp (GNU Image Manipulation Program) accepte ces formats de fichier. C'est un superbe programme d'édition d'image Open Source. Si vous préférez utiliser d'autres formats de fichiers, vous pouvez obtenir la transparence de toutes façon. Il suffit d'utiliser la couleur de transparence qui est (r = 0, g = 128, b = 64). Tous les pixels qui auront exactement cette couleur seront définis comme transparents par Ultimate 3D.
Je vous conseille de charger toutes les textures dans l'évènement "create" de l'objet control. De cette façon, vous pouvez obtenir une liste de toutes les textures chargées et de leurs indices. Mais ça, c'est encore à vous de décider.
Voici un tout petit exemple de code qui montre comment utiliser cette fonction correctement :
LoadTexture("gfx/WallTexture.png",1); |
---|
© Christoph Peters. Certains droits réservés. (Traduction FR 04/2008, Franck Vernel / Damien Buhl).