website logo
Auteur
avatar
thellier

Forum » » Création-Développement » » Question Math 3D étape 2


Posté : 29-10-2013 11:04 icone du post

Je m'auto réponds car je pense avoir trouvé une réponse en utilisant les sources de gluLookAt qui fais regarder la caméra dans une direction
A tester imiminement..

A le point xyz où est la caméra
B le point xyz vers où regarde la caméra (cible)
UP le vecteur oriention de la caméra (portrait,paysage,oblique,etc..)
résultat: M la matrice de rotation

Donc appliqué à mon problème:
A = vecteur E (position épaule)
B = (vecteur B - vecteur A) (cad difference de position entre mon coude de mon objet et le coude défini dans le fichier de motion capture )
résultat: M la matrice à appliquer pour mettre le coude dans la même position que dans le fichier de motion capture


/*=================================================================*/
void DogluLookAtM(Vertex3D *A,Vertex3D *B,Vertex3D *UP,float *M)
{
Vertex3D X,Y,Z;

/* Make rotation matrix */

/* Z vector */
Z.x = A->x - B->x;
Z.y = A->y - B->y;
Z.z = A->z - B->z;
Normalize(&Z);

/* Y vector */
Y.x = UP->x;
Y.y = UP->y;
Y.z = UP->z;

/* X vector = Y cross Z */
X.x = Y.y*Z.z - Y.z*Z.y;
X.y = -Y.x*Z.z + Y.z*Z.x;
X.z = Y.x*Z.y - Y.y*Z.x;

/* Recompute Y = Z cross X */
Y.x = Z.y*X.z - Z.z*X.y;
Y.y = -Z.x*X.z + Z.z*X.x;
Y.z = Z.x*X.y - Z.y*X.x;

Normalize(&X);
Normalize(&Y);

M[ 0]=X.x ; M[ 1]=X.y ; M[ 2]=X.z ; M[ 3]=0.0;
M[ 4]=Y.x ; M[ 5]=Y.y ; M[ 6]=Y.z ; M[ 7]=0.0;
M[ 8]=Z.x; M[ 9]=Z.y; M[10]=Z.z; M[11]=0.0;
M[12]=0.0 ; M[13]=0.0 ; M[14]=0.0 ; M[15]=1.0;

}
/*=================================================================*/

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1679&forum=14