]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc. |
2 | ||
3 | //Distributed under the Boost Software License, Version 1.0. (See accompanying | |
4 | //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
6 | #include <boost/qvm/operations.hpp> | |
7 | #include <boost/qvm/map_mat_mat.hpp> | |
8 | #include <boost/qvm/map_mat_vec.hpp> | |
9 | #include <boost/qvm/map_vec_mat.hpp> | |
10 | #include <boost/qvm/vec_access.hpp> | |
11 | #include <boost/qvm/vec_traits_array.hpp> | |
12 | #include <boost/qvm/quat.hpp> | |
13 | #include <boost/qvm/vec.hpp> | |
14 | #include <boost/qvm/mat.hpp> | |
15 | #include <boost/qvm/swizzle.hpp> | |
16 | using namespace boost::qvm; | |
17 | ||
18 | struct float3 { float a[3]; }; | |
19 | struct float4 { float a[4]; }; | |
20 | struct float33 { float a[3][3]; }; | |
21 | struct fquat { float a[4]; }; | |
22 | ||
23 | namespace | |
24 | boost | |
25 | { | |
26 | namespace | |
27 | qvm | |
28 | { | |
29 | template <> | |
30 | struct | |
31 | vec_traits<float3> | |
32 | { | |
33 | static int const dim=3; | |
34 | typedef float scalar_type; | |
35 | ||
36 | template <int I> static inline scalar_type & write_element( float3 & v ) { return v.a[I]; } | |
37 | template <int I> static inline scalar_type read_element( float3 const & v ) { return v.a[I]; } | |
38 | ||
39 | static inline scalar_type & write_element_idx( int i, float3 & v ) { return v.a[i]; } | |
40 | static inline scalar_type read_element_idx( int i, float3 const & v ) { return v.a[i]; } | |
41 | }; | |
42 | ||
43 | template <> | |
44 | struct | |
45 | vec_traits<float4> | |
46 | { | |
47 | static int const dim=4; | |
48 | typedef float scalar_type; | |
49 | ||
50 | template <int I> static inline scalar_type & write_element( float4 & v ) { return v.a[I]; } | |
51 | template <int I> static inline scalar_type read_element( float4 const & v ) { return v.a[I]; } | |
52 | ||
53 | static inline scalar_type & write_element_idx( int i, float4 & v ) { return v.a[i]; } | |
54 | static inline scalar_type read_element_idx( int i, float4 const & v ) { return v.a[i]; } | |
55 | }; | |
56 | ||
57 | template <> | |
58 | struct | |
59 | mat_traits<float33> | |
60 | { | |
61 | typedef float scalar_type; | |
62 | static int const rows=3; | |
63 | static int const cols=3; | |
64 | ||
65 | template <int R,int C> | |
66 | static inline scalar_type & write_element( float33 & m ) { return m.a[R][C]; } | |
67 | ||
68 | template <int R,int C> | |
69 | static inline scalar_type read_element( float33 const & m ) { return m.a[R][C]; } | |
70 | ||
71 | static inline scalar_type & write_element_idx( int r, int c, float33 & m ) { return m.a[r][c]; } | |
72 | static inline scalar_type read_element_idx( int r, int c, float33 const & m ) { return m.a[r][c]; } | |
73 | }; | |
74 | ||
75 | template <> | |
76 | struct | |
77 | quat_traits<fquat> | |
78 | { | |
79 | typedef float scalar_type; | |
80 | ||
81 | template <int I> static inline scalar_type & write_element( float4 & v ) { return v.a[I]; } | |
82 | template <int I> static inline scalar_type read_element( float4 const & v ) { return v.a[I]; } | |
83 | ||
84 | static inline scalar_type & write_element_idx( int i, float4 & v ) { return v.a[i]; } | |
85 | static inline scalar_type read_element_idx( int i, float4 const & v ) { return v.a[i]; } | |
86 | }; | |
87 | } | |
88 | } | |
89 | ||
90 | void | |
91 | f() | |
92 | { | |
93 | { | |
94 | quat<float> rx=rotx_quat(3.14159f); | |
95 | } | |
96 | ||
97 | { | |
98 | vec<float,3> v={0,1,0}; | |
99 | mat<float,4,4> tr=translation_mat(v); | |
100 | } | |
101 | ||
102 | { | |
103 | float3 v; | |
104 | X(v) = 0; | |
105 | Y(v) = 0; | |
106 | Z(v) = 7; | |
107 | float vmag = mag(v); | |
108 | float33 m = rotx_mat<3>(3.14159f); | |
109 | float3 vrot = m * v; | |
110 | } | |
111 | ||
112 | { | |
113 | float v[3] = {0,0,7}; | |
114 | float3 vrot = rotx_mat<3>(3.14159f) * v; | |
115 | } | |
116 | ||
117 | { | |
118 | float3 v = {0,0,7}; | |
119 | float3 vrot = transposed(rotx_mat<3>(3.14159f)) * v; | |
120 | } | |
121 | ||
122 | { | |
123 | float3 v = {0,0,7}; | |
124 | YXZ(v) = rotx_mat<3>(3.14159f) * v; | |
125 | } | |
126 | ||
127 | { | |
128 | float3 v = {0,0,7}; | |
129 | float4 point = XYZ1(v); //{0,0,7,1} | |
130 | float4 vector = XYZ0(v); //{0,0,7,0} | |
131 | } | |
132 | ||
133 | { | |
134 | float3 v = {0,0,7}; | |
135 | float4 v1 = ZZZZ(v); //{7,7,7,7} | |
136 | } | |
137 | ||
138 | { | |
139 | float v[3] = {0,0,7}; | |
140 | vref(v) *= 42; | |
141 | } | |
142 | } | |
143 | ||
144 | void | |
145 | multiply_column1( float33 & m, float scalar ) | |
146 | { | |
147 | col<1>(m) *= scalar; | |
148 | } |