Original Post
Hi all.
I have defined a camera B-Spline path. I know the tangent vector is the velocity and the camera direction in some fraction time. Here is the question: How can I convert the tangent vector (x, y, z) to angles (pitch, yaw and roll)??. I tried with this but it doesn''t work correctly:
void GetAnglesFromVector(D3DVECTOR *v, float *pitch, float *yaw, float *roll)
{
// pitch
// first cuad.
if(v->y > 0.0f && v->z > 0.0f)
*pitch = acosf(v->z);
// second cuad.
if(v->y > 0.0f && v->z < 0.0f)
*pitch = acosf(v->z);
// third cuad.
if(v->y < 0.0f && v->z < 0.0f)
*pitch = acosf(v->z);
// fourth cuad.
if(v->y < 0.0f && v->z > 0.0f)
*pitch = acosf(v->z);
// yaw
// first cuad.
if(v->x > 0.0f && v->z > 0.0f)
*yaw = acosf(v->x);
// second cuad.
if(v->x < 0.0f && v->z > 0.0f)
*yaw = acosf(v->x);
// third cuad.
if(v->x < 0.0f && v->z < 0.0f)
*yaw = acosf(v->x);
// fourth cuad.
if(v->x > 0.0f && v->z < 0.0f)
*yaw = acosf(v->x);
// roll
// first cuad.
if(v->x > 0.0f && v->y > 0.0f)
*roll = acosf(v->x);
// second cuad.
if(v->x < 0.0f && v->y > 0.0f)
*roll = acosf(v->x);
// third cuad.
if(v->x < 0.0f && v->y < 0.0f)
*roll = acosf(v->x);
// fourth cuad.
if(v->x > 0.0f && v->y < 0.0f)
*roll = acosf(v->x);
}
Do you know some better way to make this??
You can download the demo
|