Rotation d'un objet en 3D [Résolu]

Choumoumou 162 Messages postés jeudi 30 septembre 2004Date d'inscription 17 novembre 2010 Dernière intervention - 4 juil. 2007 à 19:08 - Dernière réponse : Choumoumou 162 Messages postés jeudi 30 septembre 2004Date d'inscription 17 novembre 2010 Dernière intervention
- 7 juil. 2007 à 15:11
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 !
Afficher la suite 

2 réponses

Répondre au sujet
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 6 juil. 2007 à 12:34
+3
Utile
Salut,

Je n'ai essayer DX sous VB que pour faire de la 2D... Je sais pas si tu as accès à tout ce qui est D3DX, sans compter que la version 7 commence à dater.

Il est préférable de ne pas toucher aux vertice (Rien que pour les performances, idéalement, il ne faut jamais les toucher).

Pour les déplacer, on applique des transformations dessus (C'est un des principes de base de DirectX. Cherche des tutos pour en savoir plus sur le sujet. Concrètemement on applique une transformation basée sur une combinaison des matrices vue (caméra), projection (la façon dont c'est plaqué sur l'écran) et monde (Position et rotation des vertices)).

Globalement, on parcourt les meshs à afficher, et on met en place la matrice de transformation pour chacun d'eux.

Il y a D3DXMatrixRotationAxis qui peut peut être t'intéresser (Ou une des routines en bas de la page.)

Il y a aussi des routines pour aider à la mise en place de la caméra (Se passer de tes calculs de sinus tout ça), mais idem, je sais pas si elles sont dispo en DX7/VB...

(Au passage, je te conseillerais presque de passer à DX8, normalement dispo sous VB6 aussi simplement que DX7, et un peu plus d'actualité)

Voilou voilou.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_rt15
Choumoumou 162 Messages postés jeudi 30 septembre 2004Date d'inscription 17 novembre 2010 Dernière intervention - 7 juil. 2007 à 15:11
0
Utile
Merci beaucoup, je vais voir si je peux trouver l'équivalent en dx7.. et sinon, bah... je traduirais tout en dx8 :(
Commenter la réponse de Choumoumou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.