Alors voilà (c'est du javascrip) !
Donc premier il faut initialiser ton quaternion et pour cela tu le fais à partir de l'angle a et de l'axe représenté par x, y et z.
function rq(_q,a,x,y,z)
{
var sin_a = Math.sin(a/2);
var cos_a = Math.cos(a/2);
_q.x = x * sin_a;
_q.y = y * sin_a;
_q.z = z * sin_a;
_q.w = cos_a;
nq(_q);
} |
Il faut ensuite le normaliser (appel à la fonction nq).
function nq(q_)
{
var l=Math.sqrt(q_.w*q_.w + q_.x*q_.x + q_.y*q_.y + q_.z*q_.z);
l=1/l;
q_.w=q_.w*l;
q_.x=q_.x*l;
q_.y=q_.y*l;
q_.z=q_.z*l;
} |
Et il reste à creer la matrice de transformation :
function qm(mat,q)
{
var xx = q.x * q.x;
var xy = q.x * q.y;
var xz = q.x * q.z;
var xw = q.x * q.w;
var yy = q.y * q.y;
var yz = q.y * q.z;
var yw = q.y * q.w;
var zz = q.z * q.z;
var zw = q.z * q.w;
mat[0] = 1 - 2 * ( yy + zz );
mat[1] = 2 * ( xy - zw );
mat[2] = 2 * ( xz + yw );
mat[4] = 2 * ( xy + zw );
mat[5] = 1 - 2 * ( xx + zz );
mat[6] = 2 * ( yz - xw );
mat[8] = 2 * ( xz - yw );
mat[9] = 2 * ( yz + xw );
mat[10] = 1 - 2 * ( xx + yy );
mat[3] = mat[7] = mat[11] = mat[12] = mat[13] = mat[14] = 0;
mat[15] = 1;
} |
Et voilà tu a une jolie matrice de transformation !
Donc c'est une matrice 4x4 en notation française ! 
Message édité par darkoli le 05-03-2004 à 19:34:48