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()24 template<typename T> void _obb<T>::reset()
25 {
26 	rotate.identity();
27 	translate.set();
28 	halfsize.set();
29 }
30 
get_xform(_matrix<T> & m)31 template<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)39 template<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