Annonce

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


#1 2014-03-19 12:28:29 Rotation 3D processing

nono9212
nouveau membre
Date d'inscription: 2014-03-19
Messages: 3

Rotation 3D processing



Bonjour à tous, je suis nouveau dans ce forum et j'ai deja un probleme... roll
   En fait j'essaye de réaliser  un algorythme de resolution de rubik's cubes, mais je n'arrive pas à bien orienter chacun de mes cubes...
   En effet, lorsque par exemple je met

rotateX(radians(90));

Le repere change et l'axe Z devient l'axe Y... Ce qui veut dire que je ne peux plus faire

rotateY(radians(90));

Pour faire une rotation de 90 degrés sur l'axe Y de départ. sad
   Peut avez vous des astuces a me donner pour contourner ce probleme?
Merci d'avance et a bientot wink

Hors ligne

 

#2 2014-03-19 13:05:12 Re : Rotation 3D processing

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

Re: Rotation 3D processing



Je ne suis pas sûr d'avoir bien compris ton problème, mais il ne faut pas oublier que les transformations rotate(), translate(), scale() sont cumulatives.

translate(50, 0);
rect(0, 0, 10, 10);
translate(20, 0);
rect(0, 0, 10, 10);

placera le deuxième rectangle à 70 sur l'axe des x.

Pour contrôler cela tu as des fonctions :
pushMatrix() et popMatrix()

http://processing.org/reference/pushMatrix_.html

Hors ligne

 

#3 2014-03-19 13:20:04 Re : Rotation 3D processing

nono9212
nouveau membre
Date d'inscription: 2014-03-19
Messages: 3

Re: Rotation 3D processing



Salut, merci pour ta réponse! En fait, ce qui me gène c'est justement que les transformations soient cumulative, un bout de mon code pour mieux comprendre :

    pushMatrix();
    translate((posX*53)-25,(posY*53)-25,-((posZ*53)-25)); // on place le cube a la bonne place
    rotateX(radians(angleX)); // on l'oriente, et c'est la que ca coince
    rotateY(radians(angleY)); 
    rotateZ(radians(angleZ));
    fill(0); // et la on dessine un petit cube du rubik's cube
    box(50);
    fill(face1);
    translate(0,25,0);
    box(45,1,45); // ainsi que sa premiere face
    fill(face2);
    translate(0,-25,25);
    box(45,45,1); // et sa deuxieme
    popMatrix();

C'est au niveau des trois rotate que ça bloque, car en fait après avoir fait une rotation sur l'axe X, le repère se trouve changé et ça a bougé l'axe Y et l'axe Z, ce qui veut dire que les deux autres rotations ne se font plus par rapport au repère d'origine mais par rapport au nouveau repère.
   J'espere que tu as compris wink

Hors ligne

 

#4 2014-03-19 15:10:42 Re : Rotation 3D processing

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

Re: Rotation 3D processing



Pourquoi ne fais-tu pas :
rotate(radians(angleX), radians(angleY), radians(angleZ));

Hors ligne

 

#5 2014-03-19 16:42:24 Re : Rotation 3D processing

nono9212
nouveau membre
Date d'inscription: 2014-03-19
Messages: 3

Re: Rotation 3D processing



Merci a vous deux, j'ai enfin trouver, en fait la fonction rotate s'utilise avec l'angle que le vont faire et les trois autres parametres sont l'axe, ce qui donne par exemple :

rotate(radians(angleX),1,0,0);

pour tourner sur un l'axe des X. Tout marche.
  Mais comme ca serait trop beau, il y a un probleme : lorsque je tourne les differentes faces du cube individuellement, le cube marche bien, les faces s'orientent et tout, mais des que je combine plusieurs rotation, comme par exemple une rotation de la face droite et une rotation de la face haute, tout s'emele, les cubes ne so'rientent plus... Pourquoi?? mad Je met le code en piece jointe. (necessite peasy cam).

EDIT : en fait je crois que les cubes s’emmêle car le problème de rotation n'est toujours pas réglé... Quand on accumule des rotations a faire sur deux ou trois axes, ca deconne...

Dernière modification par nono9212 (2014-03-19 17:33:53)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025