Les commandes 3D_X_ROTATE, 3D_Y_ROTATE, 3D_Z_ROTATE, 3D_ROTATE s'effectuent par rapport aux axes propres de l'objet.
Lorsqu'un objet est créé, les axes propres sont parallèles aux axes X,Y,Z du SCENE3D:
- l'axe X est un axe horizontal de gauche à droite
- l'axe Y est un axe horizontal de bas en haut
- l'axe Z est un axe horizontal de "loin" vers "près"
Lorsqu'on effectue une rotation par rapport à l'un de ces 3 axes, les 2 autres axes de rotation bougent également avec l'objet.
Supposez que vous pilotiez une voiture de l'intérieur. Vous utilisez les axes de la voiture pour vous repérer.
Pour un objet 3D, c'est pareil, il faut s'imaginer être à l'intérieur pour comprendre l'effet des rotations.
Ces commandes sont relatives à l'objet 3D, et c'est normal car on agit toujours par rapport à un objet. Faire agir des rotations en absolu ferait appel à des mathématiques compliquées et il faudrait mémoriser les rotations qu'a subit chaque objet.
3D_ROTATE n,x,y,z est l'équivalent de 3D_x_rotate n,x puis 3D_y_rotate n,y puis 3D_z_rotate n,z
On fait d'abord la rotation sur l'axe propre X puis sur Y puis sur Z.
"La commande 3D_ROTATE N,0,0,0 est parfaitement inutile, puisqu'elle commande une rotation de zéro degrés sur chaque axe."
Absolument pas: elle ne commande pas une rotation de 0 degré, elle positionne l'objet N selon l'angle 0, ce qui est complètement différent.
Les rotations positionnent selon un angle donné, mais ne font pas tourner d'un angle donné !
Les rotations positionnent suivant certains angles. C'est ce qu'il faut retenir.
3d_rotate N,0,0,0 ne remet pas l'objet 3D dans sa position initiale. Pour le remettre dans sa position initiale, il faut lui faire subir l'ensemble des rotations dans l'ordre inverse en lui affectant des angles nuls.
Comme 3d_rotate effectue une rotation sur x puis sur y puis sur z, il faut donc lui faire subir la série inverse de 3 rotations en le replacant dans l'angle nul (angle initial):
3d_z_rotate N,0
3d_y_rotate N,0
3d_z_rotate N,0