Création de jeux avec Game Maker
Visualisation du Monde
Par défaut, vous regardez le long d'un axe négatif en z vers le milieu de la room. Souvent dans les jeux en 3D, vous souhaiterez modifier la façon de voir le monde. Par exemple, dans les jeux à la première personne, vous souhaiterez probablement disposer la caméra à une position légérement au dessus et le long du plan xy. En terme de graphiques, vous devrez paramétrer la projection de manière correcte. Pour modifier la façon de regarder le monde, il existe les deux fonctions suivantes.
d3d_set_projection(xfrom, yfrom, zfrom, xto, yto, zto, xup, yup, zup) Définit la manière de regarder le monde. Vous indiquerez le point de vue de départ, le point de vue de la direction à suivre et le vecteur haut.
Cette fonction nécessite des explications. Pour paramétrer la projection, vous avez besoin en premier lieu de connaître la position à partir de laquelle vous effectuez l'observation. Cela est indiqué par les paramètres (xfrom,yfrom,zfrom). Ensuite, vous devrez préciser la direction vers laquelle vous regardez. Cela se fait en donnant un second point de chute. Cela correspond au point (xto,yto,zto). Enfin, vous pouvez diriger la caméra autour de la ligne du point de vue jusqu'au point de fuite du regard. Pour indiquer ceci, nous devons donner un vecteur haut, qui est la direction au dessus de la caméra. Cela est précisé par les trois derniers paramètres (xup,yup,zup). Prenons un exemple. Pour regarder le long d'un plan xy dans un jeu à la première personne, vous pouvez utiliser ceci
Dans cet exemple, vous regardez à partir du point (100,100), de 10 au dessus du plan et dans la direction (200,100). Les points du vecteur haut sont dans la direction en z comme requis. Pour rendre tout ceci légérement plus compliqué, supposez que vous ayez une instance dans votre room qui indique la position de la caméra. Elle aura une position courante en (x,y) et une direction (et peut-être aussi une vitesse). Vous pouvez maintenant indiquer ceci à la caméra en utilisant le code suivant :{ d3d_set_projection(100,100,10,200,100,10,0,0,1); }
{ with (obj_camera) d3d_set_projection(x,y,10, x+cos(direction*pi/180),y-sin(direction*pi/180),10, 0,0,1); }
Tout cela doit vous sembler quelque peu compliqué ! Nous observons à partir de la position de la caméra en (x,y), 10 au-dessus du sol. Afin de déterminer un point dans la bonne direction, nous avons besoin d'effectuer un peu de calcul arithmétique. Ce point est indiqué par les trois prochains paramétres. Enfin, nous utilisons le vecteur haut comme vu ci-dessus.
Faisons ici une remarque importante ! Lorsque Game Maker commence à afficher une room, il fixe le point de vue de nouveau à la position par défaut. Aussi, la première chose à faire quand la scène est placée à l'écran, est de préciser la projection souhaitée. Ceci doit obligatoirement être fait dans un événement d'affichage (drawing event) !
Il existe également une version plus évoluée de la fonction vue ci-dessus :
d3d_set_projection_ext(xfrom, yfrom, zfrom, xto, yto, zto, xup, yup, zup, angle, aspect, znear, zfar) Une version améliorée de la fonction dans laquelle vous préciserez aussi l'angle définissant le champ visuel, le ratio d'aspect entre la taille horizontale et verticale de la vue et les plans de coupures proches et lointains.
Les paramètres additionnels fonctionnent comme suit. Si vous avez déjà indiqué la position de la caméra, le point à regarder et le vecteur haut, vous pouvez encore modifier la largeur de champ de l'objectif de la caméra. C'est ce que l'on appelle le champ visuel. Une valeur raisonnable est de 45 degrés et cette valeur est celle prise par défaut. Mais il vous est possible de modifier cette valeur si vous le souhaitez. Ensuite, vous préciserez le ratio d'aspect entre la projection horizontale et verticale. Normalement, vous souhaiterez utiliser la même valeur que le ratio d'aspect de la room ou de la vue, par exemple 640/480. Enfin, vous devrez indiquer les plans de coupures. Les objets qui sont plus proches que znear par rapport à la caméra ne seront pas dessinés. Idem pour les objets plus loin que zfar. Il peut être important de bien régler ces paramètres à des valeurs raisonnables car ils auront également une influence sur la précision des comparaisons en z. Si vous créez une plage de valeurs trop grandes, la précision sera mauvaise. Par défaut, nous utiliserons 1 et 32000. znear doit être plus grand que 0 !
Parfois, vous aurez besoin temporairement d'une projection normale orthonormée comme c'est le cas quand nous n'employons pas de 3D. Ou bien vous souhaiterez revenir à la projection en perspective par défaut. Vous utiliserez alors les fonctions suivantes :
d3d_set_projection_ortho(x, y, w, h, angle) Paramétre une projection normale orthonormée du secteur indiqué de la room, orientée selon l'angle indiqué.
d3d_set_projection_perspective(x, y, w, h, angle) Paramétre une projection normale en perspective du secteur indiqué de la room, orientée selon l'angle indiqué.
Une utilisation courante de tout ceci est l'affichage d'un recouvrement pour par exemple montrer le score ou d'autres aspects du jeu. Pour réaliser cela, nous définirons une projection orthonormée. Nous devrons également temporairement déconnecter la suppression de face cachée (hidden surface removal) parce que nous voulons que l'information soit affichée indépendamment de la valeur courante de profondeur. L'exemple suivant montre comment créer un recouvrement pour afficher le score.
{ draw_set_color(c_black); d3d_set_projection_ortho(0,0,room_width,room_height,0); d3d_set_hidden(false); draw_text(10,10,'Score: ' + string(score)); d3d_set_hidden(true); }
<< Traduction française par Philippe Ragni - (2005) >>
Alternative versions
Also available in:
Download helpfile