Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-03-24 11:10:06 sens porte2

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

sens porte2



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.


Code (P5) :

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

 

#2 2014-03-24 12:43:01 Re : sens porte2

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: sens porte2



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

 

#3 2014-03-25 04:05:30 Re : sens porte2

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: sens porte2



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

 

#4 2014-03-25 14:45:00 Re : sens porte2

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: sens porte2



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

 

#5 2014-03-26 02:57:45 Re : sens porte2

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: sens porte2



Bonjour

Remerciements pour tes explications;

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025