Programmer sur Script (partie 9)
Page 1 sur 1 • Partagez
Programmer sur Script (partie 9)
Programmer sur Script (partie 9)
Les formes 3D
Les formes 3D
Maintenant que vous connaissez les quelques fonctions de camera 3D, je vous propose qu'on commence à les mettre en pratique.
Créez un nouveau projet Script vierge, et placez y ces codes:
- script0.script:
draw_3D();
light(false);
draw_set_color(c_white);
camera_3D_fps(true);
Vous pouvez personnaliser la camera en modifiant ces variables si vous le souhaitez:
- start.script:
x=0;
y=0;
z=10; // hauteur du joueur
direction=45; // angle horizontal de la camera
zdir=0; // angle vertical de la camera
Avant de vous apprendre les différentes formes 3D, je vais d'abord vous montrer comment réagissent les formes 2D lorsqu'elles sont utilisées en 3D.
Ajoutons quelques lignes à la fin de ce code pour y faire apparaitre une forme 2D:
- script0.script:
draw_3D();
light(false);
draw_set_color(c_white);
camera_3D_fps(true);
draw_set_color(c_blue);
draw_rectangle(10,10,20,20,true);
Voici le résultat que vous pourrez observer:
(Si vous ne voyez pas les lignes bleu au sol, bougez la souris afin de faire pivoter la camera. Vous finirez par voir la même chose que moi)
Comme vous pouvez le voir, la forme 2D a fonctionné en 3D, c'est parce que je n'ai pas utilisé la ligne draw_2D(); pour revenir en mode dessin 2D. Elle s'est donc dessinée à plat sur le sol en 3D. Elle ne prend pas en compte la hauteur z, elle a une hauteur z=0.
Ceci fonctionne avec toutes les fonctions de dessin 2D.
Nous reviendrons plus tard sur ces fonctions 2D utilisables en 3D pour les déplacer et les pivoter dans l'espace.
Le ciel que vous voyez sur cette illustration est tout blanc. Si vous souhaitez changez sa couleur, il suffit de modifier la couleur du background, car en 3D le background est aussi la couleur d'arrière plan de la fenêtre. Voici la ligne pour modifier cette couleur:
- start.script:
background_color=c_aqua;
Maintenant que j'ai abordé un peu les formes 2D dans un espace 3D, je vous invite à faire quelques tests de fonctions 2D en 3D.
Passons maintenant aux vraies formes 3D: les cubes, les sphères, les cylindres, les cônes et autres.
Commençons par la fonction d3d_draw_block(x1,y1,z1,x2,y2,z2,texture,hrepeat,vrepeat); qui comme son nom l'indique, dessine un cube en 3D.
Tout comme la fonction draw_rectangle(x1,y1,x2,y2,outline); , la fonction d3d_draw_block(...); dessine un cube définit par la position de ses 2 sommets opposés. x1, y1 et z1 sont dont les coordonnées du premier coin du cube, et x2, y2 et z2 les coordonnées du sommet opposé (Il est conseillé de respecter ceci: x1<x2, y1<y2, z1<z2 mais c'est facultatif).
La texture doit être un background, pas un sprite. Un sprite est une texture réservée pour la 2D. Un background est une texture réservée pour la 3D.
Vous savez importer un sprite mais vous ne savez pas encore importer un background dans le jeu. Ne vous inquiétez pas, ce n'est pas très différent.
Voici la fonction pour importer un sprite, suivie de la fonction pour importer un background, vous pourrez ainsi comparer les deux.
- Code:
spr_logo=import_sprite("res/spr/logo.png");
back_sol=import_background("res\spr\wood.png");
Revenons un peu à cette fonction d3d_draw_block(x1,y1,z1,x2,y2,z2,texture,hrepeat,vrepeat);
hrepeat est la répétition de la texture horizontalement, et vrepeat est la répétition de la texture verticalement. C'est à dire que sur une même face d'un cube, on peut répéter plusieurs fois la même texture.
Mettons cette fonction en pratique.
Pour cela, reprenons le code du mini jeu 3D que nous avons commencé au début de cette page:
- start.script:
z=10;
- script0.script:
draw_3D();
light(false);
draw_set_color(c_white);
camera_3D_fps(true);
draw_set_color(c_blue);
draw_rectangle(10,10,20,20,true);
- start.script:
z=10;
back_bois=import_background("res\spr\wood.png");
- script0.script:
draw_3D();
light(false);
draw_set_color(c_white);
camera_3D_fps(true);
draw_set_color(c_blue);
draw_rectangle(10,10,20,20,true);
d3d_draw_block(12,12,0,18,18,6,back_bois,1,1);
Mais que ce passe t'il? Le cube possède bien la bonne texture, mais semble teinté en bleu.
C'est une erreur classique que vous pourrez rencontrer et c'est pourquoi je vous en parle maintenant (et oui, j'ai fais exprès de provoquer cette erreur ).
Retournons dans le code qui dessine ce cube:
- script0.script:
draw_3D();
light(false);
draw_set_color(c_white);
camera_3D_fps(true);
draw_set_color(c_blue);
draw_rectangle(10,10,20,20,true);
d3d_draw_block(12,12,0,18,18,6,back_bois,1,1);
draw_set_color(c_blue); ---> Sélectionne la couleur bleu.
draw_rectangle(10,10,20,20,true); ---> Dessine un rectangle en 3D avec la couleur précédemment choisi.
d3d_draw_block(12,12,0,18,18,6,back_bois,1,1); ---> Dessine un cube avec la couleur précédemment choisi.
La fonction draw_set_color(c_blue); agit comme un filtre lumineux sur les textures, et ne laisse passer que la couleur bleu. Mettez une autre couleur et vous vous en apercevrez
Pour afficher une texture normale au cube, il faut donc sélectionner la couleur blanche laissant passer toutes les couleurs.
- script0.script:
draw_3D();
light(false);
draw_set_color(c_white);
camera_3D_fps(true);
draw_set_color(c_blue);
draw_rectangle(10,10,20,20,true);
draw_set_color(c_white);
d3d_draw_block(12,12,0,18,18,6,back_bois,1,1);
Mais les jeux ne sont pas fais uniquement avec des cubes, vous aurez besoin d'autres formes. En voici quelques unes qui pourraient vous satisfaire:
Cylindre: d3d_draw_cylinder(x1,y1,z1,x2,y2,z2,texture,hrepeat,vrepeat,closed,steps);
closed: true si on doit fermer le dessus et le dessous du cylindre. Sinon false.
steps: Le nombre d'étapes de rotations. Valeur typique: 24. Plus on augmente ce nombre, plus la qualité est élevée, mais le jeu commencera à laguer.
Cône: d3d_draw_cone(x1,y1,z1,x2,y2,z2,texture,hrepeat,vrepeat,closed,steps);
Sphère: d3d_draw_ellipsoid(x1,y1,z1,x2,y2,z2,texture,hrepeat,vrepeat,steps);
Mur vertical: d3d_draw_wall(x1,y1,z1,x2,y2,z2,texture,hrepeat,vrepeat);
Sol, plat ou incliné: d3d_draw_floor(x1,y1,z1,x2,y2,z2,texture,hrepeat,vrepeat);
Je vous donnerais d'autres formes plus complexes plus tard, mais pour le moment contentez-vous de celles-ci.
Astuce: Plusieurs formes les unes dans les autres peuvent donner une forme différente.
Sujets similaires
» Programmer sur Script (partie 3)
» Programmer sur Script (partie 8)
» Programmer sur Script (partie 10)
» Programmer sur Script (partie 11)
» Programmer sur Script (partie 12)
» Programmer sur Script (partie 8)
» Programmer sur Script (partie 10)
» Programmer sur Script (partie 11)
» Programmer sur Script (partie 12)
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|