bonjour.
je ne comprend pas comment faire fonctionner dans le bon sens la porte n°2 .Car avec la fonction translate je décale bien la porte sur la gauche mais cela devient son axe de rotation or je voudrais que l'axe de rotation sois
par exemple à 100,100, mais en partant du haut à droite de la feuille et non à gauche.Mais je ne sais pas comment faire.
Merci.
float a,b; void setup() { size(500, 500, P3D); a=0; b=0; } void draw() { background(200); fill(100); rotate(b); translate(100,0,-100); box(200,10,150); if (a<PI/2) { b=b+0.01; } //porte 2 pushMatrix(); rotate(-a); translate(400,0,-100); box(200,10,150); popMatrix(); if (a<PI/2) { a=a+0.01; } }
Hors ligne
Attention, les transformations telles que translate(), scale() et rotate() sont cumulatives. donc tu te retrouves rapidement avec des objets qui vont n'importe où.
Il faut utiliser les fonctions pushMatrix() et popMatrix() pour bien gérer cela :
float a, b; void setup() { size(500, 500, P3D); a=0; b=0; } void draw() { background(200); fill(100); // Porte 1 pushMatrix(); translate(50, height / 2, 0); rotate(b); translate(100, 0, 0); box(200, 10, 150); popMatrix(); //porte 2 pushMatrix(); translate(450, height / 2, 0); rotate(a); translate(-100, 0, 0); box(200, 10, 150); popMatrix(); if (b < PI/2) { b += 0.01; a -= 0.01; } }
Hors ligne
Bonjour.
Je te remercie pour ta réponse;Mais à quoi sert le deuxième translate exactement," translate(100, 0, 0); "je me suis aperçu que le rapport entre la dimension de la porte (ici 200) et le rapport dans le translate (ici 100)devais être
de deux pour que l'axe soit fixe; si le rapport change l'axe décrit un arc de cercle..D'après ce que je comprend si j'avais un portail de 300 de longueur je devrais mettre 150 ou -150 pour que l'axe tourne sur lui même?.
merci.
Hors ligne
Quand une box() est construite elle se construit avec le point (0, 0, 0) comme centre.
rotationZ se fait autour de l'axe Z, donc il faut décaler si on souhaite que la rotation se fasse sur un côté, donc de la moitié de la largeur.
float angle; int largeurPorte; void setup() { size(500, 500, P3D); angle = 0; largeurPorte = 200; } void draw() { background(200); fill(100); // Porte 1 pushMatrix(); translate(50, height / 2, 0); rotateZ(angle); translate(largeurPorte / 2, 0, 0); box(largeurPorte, 10, 150); popMatrix(); //porte 2 pushMatrix(); translate(450, height / 2, 0); rotateZ(- angle); translate(-largeurPorte / 2, 0, 0); box(largeurPorte, 10, 150); popMatrix(); if (angle < PI/2) { angle += 0.01; } }
Hors ligne
Bonjour
Remerciements pour tes explications;
Hors ligne