2010-06-14 4 views

Répondre

0

Ceci est le code final pour déterminer la banque. Notez que j'avais besoin de déterminer le signe de l'angle:

// project Y on plan perpendicular to look 
Vector3D Yproj = new Vector3D(
    -(lookDirection.Y * lookDirection.X), 
    1 - (lookDirection.Y * lookDirection.Y), 
    -(lookDirection.Y * lookDirection.Z)); 
Yproj.Normalize(); 

// get absolute angle between Y projected and Up 
double absAngle = Vector3D.AngleBetween(upDirection, Yproj); 

// magic formula 
Vector3D cross = Vector3D.CrossProduct(upDirection, Yproj); 
double dot = Vector3D.DotProduct(lookDirection, cross); 

// set actual signed angle 
BDeg = (dot >= 0) ? absAngle : -absAngle;