Bonjour,
Je vient vous proposer aujourd'hui un petit tuto assez simple mais pour changer c'est sur la casio (graph35 pour le tuto)

Ok cette machine est pas du tout faite pour afficher de la 3D, mais voir la vu "fils de fer" quand on travail dans un repère (O,i,j,k) c'est quand même appréciable d'avoir un aperçu de la figure, je sait que l'on peut faire cela de tête mais je sait pas pourquoi mais des que je passe de la 2D a la 3D tout d'un coup ma tête s'embrouille

Un petit aperçu de ce qui va être fait, étant sur casio le langage utilisé sera le basic, je me base sur la doc opengl et sur
l'article de kayl qui explique très bien comment marche les transformations

Petite remarque, ma façon de programmer est un peu bizarre etant donner que le seul moyen de passer des paramètres a une 'fonction' c'est de les placer dans des variable et ensuite d'appeler la fonction.
Pour commencer, on va faire un programme qui charge la matrice d'identité (dans la matrice A qui sera utilisé comme matrice de base et la matrice ans utiliser pour les calcul intermédiaire

)
prog "IDENTITY"
(vb):
Identity 4->Mat A
return
Maintenant un programme qui va se charger de faire des translation sur le repere, en lui passant dans x la translation en x, idem pour y et z :
prog "TRANSLAT"
(vb):
[[1, 0, 0, x][0, 1, 0, y][0, 0, 1, z][0, 0, 0, 1]]*Mat A->Mat A
return
Un autre qui se charge de faire les changement d'échelle sur le repère (toujours en passant x, y, z en paramètre ou chaque variable contient le coef multiplicateur de l'échelle actuelle)
prog "SCALE"
(vb):
[[x, 0, 0, 0][0, y, 0, 0][0, 0, z, 0][0, 0, 0, 1]]*Mat A->Mat A
return
et le dernier qui effectue les rotations du repère en utilisant téta (note O <-> alpha + ^) pour l'angle de la rotation et en mettant a 1 l'axe ou les axes sur lequel faire la rotation, et en mettant a 0 les autres.
prog "ROTATION"
(vb):
cos (O) -> C
sin (O) -> S
[[X(1-C)+C, XY(1-C)-ZS, XZ(1-C)+YS, 0][YX(1-C)+ZS, Y(1-C)+C, YZ(1-C)-XS, 0][XZ(1-C)-YS, YZ(1-C)+XS, Z(1-C)+C, 0][0, 0, 0, 1]*Mat A->Mat A
return
Et la un des prog clé qui prend en paramètre (x, y, z) les coordonnées d'un points quelconque du repère puis les transforme en un point affichable sur l'écran.
prog "VEC2NVEC" <-> Vecteur 2 New Vecteur
(vb):
Mat A*[[1, 0, 0, X][0, 1, 0, Y][0, 0, 1, Z][0, 0, 0, 1]]
Mat Ans[1,4]->X
Mat Ans[2,4]->Y
Mat Ans[3,4]->Z
return
Voila maintenant avec c'est quelques programmes on peut afficher des objet 3D sur l'écran

Comment faire

? et bien voila la marche a suivre :
prog "DRAW"
(vb):
'prépare la fenêtre'
ViewWindow 1, 127, 0, 1, 63, 0
cls
prog "IDENTITY"
'Éventuelles transformation du repère'
'-------------'
(pi/3)->O
1->Z
0->X
0->Y
prog "ROTATION"
0->Z
1-X
1-Y
prog "ROTATION"
'-------------'
'dessine le repere (O, i, j, k)'
0->X
0->Y
0->Z
prog "VEC2NVEC"
X->U
Y->V
Z->K
'Conserve les valeur du points centrale'
15->X
prog "VEC2NVEC"
F-line U+64, V+32, X+64, Y+32
'X+64 et Y+32 Pour centrer le repère dans l'écran'
0->X
15->Y
prog "VEC2NVEC"
F-line U+64, V+32, X+64, Y+32
0->Y
-15->Z
prog "VEC2NVEC"
F-line U+64, V+32, X+64, Y+32
lbl 0
goto 0
Et voila si tout c'est bien passé vous devriez avoir un beau repere (O, i, j , k) au centre de l'écran, qui est bien sur mieux visible en faisant une rotation

Et maintenant pour afficher des figure plus complexes comme une cube... il suffit de rentrer la coordonner de la transformer et de l'afficher rien de plus simple

Moi pour me simplifier la vie je me tout les X dans la List 1, Y dans la List 2 et Z dans la List 3
Ainsi pour les afficher il suffit de transformer tout les points et de les stocker dans des List miroirs exemple 4, 5, 6 et ensuite grâce a la méthode du drawstat de tous les tracer

La méthode du drawstat et surtout utiliser pour la rapidité d'affichage et le fait qu'elle permet de relier chaque points dessiner au précédant le seul bémol et qu'il faut rentrer le point les autres point puis encore une fois le premier point de façon a fermer le polygone de même après chaque polygone il faut mettre un points de coordonné très grande par exemple (-1000, -1000, -1000) de façon a ce que le point qui précède celui la et celui qui le suis ne soient pas relier ensemble

Voila c'est tout pour le moment si vous avez des questions n'hésitaient pas demandez moi

Maintenant tous a vos caltos
