Bonjour à tous !
Je programme pour un projet 3D et je reste bloqué là-dessus :
mon personnage est une suite de vecteurs qui prend la forme d'un objet (complexe ou à l'état de cube, peu importe). Ce personnage se déplace sur un point x;z;y, point qui est aussi le centre de rotation de la caméra. Donc la caméra suit l'objet et tourne autour de lui à l'aide de la souris. C'est en quelque sorte une vue à la 3e personne, dont la formule est là suivante :
dx7.ViewMatrix matrice, vector(camX - Cos(angX) * 15, camZ - Sin(angX) * 15, camY - Sin(angY) * 15), vector(VueX, VueZ, VueY), vector(0, 0, 1), 0
Où :
- dx7 est l'objet de direct x,
- (camX; camZ; camY) la position du personnage et donc le centre de rotation de la caméra,
- (angX; angX; angY) l'angle de la caméra (je n'ai pas d'angle Z, l'angle X prend le relai)
- 15 est l'éloignement du centre de rotation.
précision: l'ordre des dimensions est x, z, y et non pas x, y, z. C'est plus simple pour là modélisation à même le code : longueur, profondeur, puis hauteur.
Tout cela marche impeccablement bien, seulement voilà : j'aimerai que mon personnage (pour l'instant à l'état de cube, pour simplifier les choses) puisse tourner sur lui-même en fonction de l'angle de la caméra ; que l'on ne puisse voir depuis la caméra que le dos du personnage / qu'une seule face du cube.
J'ai essayé plusieurs choses, plusieurs formules, par exemple :
vertex.x = camX + Cos(angX) * vertex.x
vertex.z = camZ + Sin(angX) * vertex.z
Pour faire une rotation de chaque point par rapport au centre camX, à l'angle angX et au rayon X...
Le résultat n'est pas très joli à voir :-\
Donc voilà, si vous aviez une fonction sous la main qui permettrai de faire une rotation sur un point x,y,z en fonction d'un angle, d'un axe, etc... Toutes les propositions seraient la bienvenue et remerciées infiniment !
