1 #ifndef __GNUC__ 2 #pragma once 3 #endif 4 #ifndef __XR_OBB_H__ 5 #define __XR_OBB_H__ 6 7 #include "xr_vector3.h" 8 #include "xr_matrix.h" 9 10 namespace xray_re { 11 12 template<typename T> struct _obb { 13 void get_xform(_matrix<T>& m); 14 _obb<T>& set_xform(const _matrix<T>& m); 15 void reset(); 16 17 _matrix33<T> rotate; // align axis 18 _vector3<T> translate; 19 _vector3<T> halfsize; 20 }; 21 22 typedef _obb<float> fobb; 23 reset()24template<typename T> void _obb<T>::reset() 25 { 26 rotate.identity(); 27 translate.set(); 28 halfsize.set(); 29 } 30 get_xform(_matrix<T> & m)31template<typename T> inline void _obb<T>::get_xform(_matrix<T>& m) 32 { 33 m.i.set(rotate.i); m._14 = 0; 34 m.j.set(rotate.j); m._24 = 0; 35 m.k.set(rotate.k); m._34 = 0; 36 m.c.set(translate); m._44 = 1.f; 37 } 38 set_xform(const _matrix<T> & m)39template<typename T> inline _obb<T>& _obb<T>::set_xform(const _matrix<T>& m) 40 { 41 rotate.i.set(m.i); 42 rotate.j.set(m.j); 43 rotate.k.set(m.k); 44 translate.set(m.c); 45 return *this; 46 } 47 48 } // end of namespace xray_re 49 50 #endif 51