From 2f9bb3798b7252080474a4457c5ba19f3b70caa5 Mon Sep 17 00:00:00 2001 From: chriz Date: Sun, 29 Jan 2012 22:04:23 -0600 Subject: [PATCH] added func to convert roll/pitch/yaw angles to view vectors --- vec.c | 35 +++++++++++++++++++++++++++++++++++ vec.h | 6 ++++++ 2 files changed, 41 insertions(+) diff --git a/vec.c b/vec.c index 409a845..8b16dcd 100644 --- a/vec.c +++ b/vec.c @@ -154,3 +154,38 @@ Vec_BoxPlaneSide (const struct plane_s *plane, float mins[3], float maxs[3]) //TODO: ... } } + + +void +Vec_AnglesVectors ( const float angles[3], + float right[3], + float up[3], + float forward[3]) +{ + double cr, sr; + double cp, sp; + double cy, sy; + + cr = cos (angles[ROLL]); + sr = sin (angles[ROLL]); + + cp = cos (angles[PITCH]); + sp = sin (angles[PITCH]); + + cy = cos (angles[YAW]); + sy = sin (angles[YAW]); + + //TODO: any common sub-expressions in here ? + + right[0] = cy * cr; + right[1] = sp * sy * cr - cp * sr; + right[2] = cp * sy * cr + sp * sr; + + up[0] = cy * sr; + up[1] = sp * sy * sr + cp * cr; + up[2] = cp * sy * sr - sp * cr; + + forward[0] = -sy; + forward[1] = sp * cy; + forward[2] = cp * cy; +} diff --git a/vec.h b/vec.h index 014694f..6d79827 100644 --- a/vec.h +++ b/vec.h @@ -71,4 +71,10 @@ Vec_MakeNormal (const float v1[3], extern int Vec_BoxPlaneSide (const struct plane_s *plane, float mins[3], float maxs[3]); +extern void +Vec_AnglesVectors ( const float angles[3], + float right[3], + float up[3], + float forward[3]); + #endif /* __VEC_H__ */