Création de jeux avec Game Maker
Dessin de polygônes en 3D
Le problème lorsque l'on dessine de façon traditionnelle fait qu'un sprite ou un polygône se situe toujours dans un plan xy, c'est à dire que tous ses coins présentent la même profondeur. Pour une vraie 3D, vous désirerez avoir des vertices de différentes profondeurs. A partir de cet instant, nous ne parlerons plus que de coordonnées en z et non plus de profondeur. Nous indiquerons les coordonnées sous forme de triplet (x,y,z). Pour cela, il existe un jeu spécial de fonctions avancées de dessin :
d3d_primitive_begin(kind) Débute une primitive 3D de type kind : pr_pointlist, pr_linelist, pr_linestrip,pr_trianglelist,pr_trianglestrip ou pr_trianglefan.
d3d_vertex(x, y, z) Ajoute un vertex (x,y,z) à la primitive, en utilisant la couleur et la valeur alpha définies au préalable.
d3d_vertex_color(x, y, z, col, alpha) Ajoute un vertex (x,y,z) à la primitive avec sa propre couleur et valeur alpha. Cela vous permet de créer des primitives avec des changements progressifs de couleur et de valeur alpha.
d3d_primitive_end() Termine la description de la primitive. Cette fonction dessine aussi la primitive.
Par exemple, pour dessiner un tétrahédron (pyramide à trois côtés) se situant sur plan z=0 avec son sommet en z = 200, vous pourrez utiliser le code suivant :
{ d3d_primitive_begin(pr_trianglelist); d3d_vertex(100,100,0); d3d_vertex(100,200,0); d3d_vertex(150,150,200); d3d_vertex(100,200,0); d3d_vertex(200,200,0); d3d_vertex(150,150,200); d3d_vertex(200,200,0); d3d_vertex(100,100,0); d3d_vertex(150,150,200); d3d_vertex(100,100,0); d3d_vertex(100,200,0); d3d_vertex(200,200,0); d3d_primitive_end(); }
Maintenant, si vous utilisez ce code tel qu'il se présente, vous verrez juste la plupart du temps un triangle à l'écran parce que le dessus du tétrahédron se trouvera derrière lui à cause de l'angle de vue. Aussi, en utilisant seulement une couleur, il sera difficile de voir les différentes faces. Ci-dessous, vous verrez les façons de modifier l'angle de vue de la caméra. L'assignation de couleurs peut être réalisée comme cela a été vu auparavant en ajoutant des appels de fonctions draw_set_color(col) entre les vertices.
Il est possible également d'utiliser des polygônes texturés en 3D. Cela fonctionne exactement de la même façon que les fonctions avancées de dessin décrites dans cette documentation. Mais cette fois-ci, vous aurez besoin de fonctions 3D quelques peu différentes des fonctions de base. Une chose que vous devez comprendre. Dans une texture, la position (0,0) correspond au coin supérieur gauche. Mais souvent, lorsque l'on utilise des projections (comme indiqué ci-dessous), le coin inférieur gauche sera la position (0,0). Dans ce cas, il sera peut-être nécessaire de renverser verticalement la texture.
d3d_primitive_begin_texture(kind, texid) Débute une primitive 3D de type kind et de texture texid.
d3d_vertex_texture(x, y, z, xtex, ytex) Ajoute un vertex (x,y,z) à la primitive à la position (xtex,ytex) de la texture, avec mélange de la couleur et de la valeur alpha définies préalablement.
d3d_vertex_texture_color(x, y, z, xtex, ytex, col, alpha) Ajoute un vertex (x,y,z) à la primitive à la position (xtex,ytex) de la texture, avec mélange de sa propre couleur et de la valeur alpha.
d3d_primitive_end() Termine la description de la primitive. Cette fonction affiche aussi la primitive.
Ainsi, par exemple, vous pourrez utiliser le code suivant afin d'afficher une image de fond qui disparaîtra dans le lointain.
{ var ttt; ttt = background_get_texture(back); d3d_primitive_begin_texture(pr_trianglefan,ttt); d3d_vertex_texture(0,480,0,0,0); d3d_vertex_texture(640,480,0,1,0); d3d_vertex_texture(640,480,1000,1,1); d3d_vertex_texture(0,480,1000,0,1); d3d_primitive_end(); }
Un triangle posséde une face de devant et une de derrière. La face de devant est destinée à être le côté où les vertices seront définis dans le sens contraire des aiguilles d'une montre. Habituellement, les deux faces seront affichées. Mais si vous réalisez une forme fermée, ce sera du gaspillage car la face de derrière du triangle ne pourra jamais être aperçue. Dans ce cas, vous pourrez sélectionner le mode face arrière cachée. Cela permettra d'économiser environ la moitié du temps d'affichage mais cela vous obligera à définir vos polygônes en utilisant la bonne manière. La fonction suivante existe :
d3d_set_culling(cull) Indique de se placer en mode face arrière cachée (backface culling) (true) ou au contraire de l'arrêter (false).
<< Traduction française par Philippe Ragni - (2005) >>
Alternative versions
Also available in:
Download helpfile