Blender  V2.93
BLI_math_matrix.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  *
19  * The Original Code is: some of this file.
20  */
21 
22 #pragma once
23 
28 #include "BLI_compiler_attrs.h"
29 #include "BLI_sys_types.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 /********************************* Init **************************************/
36 
37 void zero_m2(float m[2][2]);
38 void zero_m3(float m[3][3]);
39 void zero_m4(float m[4][4]);
40 
41 void unit_m2(float m[2][2]);
42 void unit_m3(float m[3][3]);
43 void unit_m4(float m[4][4]);
44 void unit_m4_db(double m[4][4]);
45 
46 void copy_m2_m2(float m1[2][2], const float m2[2][2]);
47 void copy_m3_m3(float m1[3][3], const float m2[3][3]);
48 void copy_m4_m4(float m1[4][4], const float m2[4][4]);
49 void copy_m3_m4(float m1[3][3], const float m2[4][4]);
50 void copy_m4_m3(float m1[4][4], const float m2[3][3]);
51 void copy_m3_m2(float m1[3][3], const float m2[2][2]);
52 void copy_m4_m2(float m1[4][4], const float m2[2][2]);
53 
54 void copy_m4_m4_db(double m1[4][4], const double m2[4][4]);
55 
56 /* double->float */
57 void copy_m3_m3d(float m1[3][3], const double m2[3][3]);
58 
59 /* float->double */
60 void copy_m4d_m4(double m1[4][4], const float m2[4][4]);
61 
62 void swap_m3m3(float m1[3][3], float m2[3][3]);
63 void swap_m4m4(float m1[4][4], float m2[4][4]);
64 
65 /* Build index shuffle matrix */
66 void shuffle_m4(float R[4][4], const int index[4]);
67 
68 /******************************** Arithmetic *********************************/
69 
70 void add_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
71 void add_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
72 
73 void madd_m3_m3m3fl(float R[3][3], const float A[3][3], const float B[3][3], const float f);
74 void madd_m4_m4m4fl(float R[4][4], const float A[4][4], const float B[4][4], const float f);
75 
76 void sub_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
77 void sub_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
78 
79 void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
80 void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4]);
81 void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3]);
82 void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
83 void mul_m3_m3m4(float R[3][3], const float A[3][3], const float B[4][4]);
84 void mul_m3_m4m3(float R[3][3], const float A[4][4], const float B[3][3]);
85 void mul_m3_m4m4(float R[3][3], const float A[4][4], const float B[4][4]);
86 
87 /* special matrix multiplies
88  * uniq: R <-- AB, R is neither A nor B
89  * pre: R <-- AR
90  * post: R <-- RB
91  */
92 void mul_m3_m3m3_uniq(float R[3][3], const float A[3][3], const float B[3][3]);
93 void mul_m3_m3_pre(float R[3][3], const float A[3][3]);
94 void mul_m3_m3_post(float R[3][3], const float B[3][3]);
95 void mul_m4_m4m4_uniq(float R[4][4], const float A[4][4], const float B[4][4]);
96 void mul_m4_m4m4_db_uniq(double R[4][4], const double A[4][4], const double B[4][4]);
97 void mul_m4db_m4db_m4fl_uniq(double R[4][4], const double A[4][4], const float B[4][4]);
98 void mul_m4_m4_pre(float R[4][4], const float A[4][4]);
99 void mul_m4_m4_post(float R[4][4], const float B[4][4]);
100 
101 /* mul_m3_series */
102 void _va_mul_m3_series_3(float R[3][3], const float M1[3][3], const float M2[3][3]) ATTR_NONNULL();
103 void _va_mul_m3_series_4(float R[3][3],
104  const float M1[3][3],
105  const float M2[3][3],
106  const float M3[3][3]) ATTR_NONNULL();
107 void _va_mul_m3_series_5(float R[3][3],
108  const float M1[3][3],
109  const float M2[3][3],
110  const float M3[3][3],
111  const float M4[3][3]) ATTR_NONNULL();
112 void _va_mul_m3_series_6(float R[3][3],
113  const float M1[3][3],
114  const float M2[3][3],
115  const float M3[3][3],
116  const float M4[3][3],
117  const float M5[3][3]) ATTR_NONNULL();
118 void _va_mul_m3_series_7(float R[3][3],
119  const float M1[3][3],
120  const float M2[3][3],
121  const float M3[3][3],
122  const float M4[3][3],
123  const float M5[3][3],
124  const float M6[3][3]) ATTR_NONNULL();
125 void _va_mul_m3_series_8(float R[3][3],
126  const float M1[3][3],
127  const float M2[3][3],
128  const float M3[3][3],
129  const float M4[3][3],
130  const float M5[3][3],
131  const float M6[3][3],
132  const float M7[3][3]) ATTR_NONNULL();
133 void _va_mul_m3_series_9(float R[3][3],
134  const float M1[3][3],
135  const float M2[3][3],
136  const float M3[3][3],
137  const float M4[3][3],
138  const float M5[3][3],
139  const float M6[3][3],
140  const float M7[3][3],
141  const float M8[3][3]) ATTR_NONNULL();
142 /* mul_m4_series */
143 void _va_mul_m4_series_3(float R[4][4], const float M1[4][4], const float M2[4][4]) ATTR_NONNULL();
144 void _va_mul_m4_series_4(float R[4][4],
145  const float M1[4][4],
146  const float M2[4][4],
147  const float M3[4][4]) ATTR_NONNULL();
148 void _va_mul_m4_series_5(float R[4][4],
149  const float M1[4][4],
150  const float M2[4][4],
151  const float M3[4][4],
152  const float M4[4][4]) ATTR_NONNULL();
153 void _va_mul_m4_series_6(float R[4][4],
154  const float M1[4][4],
155  const float M2[4][4],
156  const float M3[4][4],
157  const float M4[4][4],
158  const float M5[4][4]) ATTR_NONNULL();
159 void _va_mul_m4_series_7(float R[4][4],
160  const float M1[4][4],
161  const float M2[4][4],
162  const float M3[4][4],
163  const float M4[4][4],
164  const float M5[4][4],
165  const float M6[4][4]) ATTR_NONNULL();
166 void _va_mul_m4_series_8(float R[4][4],
167  const float M1[4][4],
168  const float M2[4][4],
169  const float M3[4][4],
170  const float M4[4][4],
171  const float M5[4][4],
172  const float M6[4][4],
173  const float M7[4][4]) ATTR_NONNULL();
174 void _va_mul_m4_series_9(float R[4][4],
175  const float M1[4][4],
176  const float M2[4][4],
177  const float M3[4][4],
178  const float M4[4][4],
179  const float M5[4][4],
180  const float M6[4][4],
181  const float M7[4][4],
182  const float M8[4][4]) ATTR_NONNULL();
183 
184 #define mul_m3_series(...) VA_NARGS_CALL_OVERLOAD(_va_mul_m3_series_, __VA_ARGS__)
185 #define mul_m4_series(...) VA_NARGS_CALL_OVERLOAD(_va_mul_m4_series_, __VA_ARGS__)
186 
187 void mul_m4_v3(const float M[4][4], float r[3]);
188 void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3]);
189 void mul_v3_m4v3_db(double r[3], const double mat[4][4], const double vec[3]);
190 void mul_v4_m4v3_db(double r[4], const double mat[4][4], const double vec[3]);
191 void mul_v2_m4v3(float r[2], const float M[4][4], const float v[3]);
192 void mul_v2_m2v2(float r[2], const float M[2][2], const float v[2]);
193 void mul_m2_v2(const float M[2][2], float v[2]);
194 void mul_mat3_m4_v3(const float M[4][4], float r[3]);
195 void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3]);
196 void mul_v3_mat3_m4v3_db(double r[3], const double M[4][4], const double v[3]);
197 void mul_m4_v4(const float M[4][4], float r[4]);
198 void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4]);
199 void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3]); /* v has implicit w = 1.0f */
200 void mul_project_m4_v3(const float M[4][4], float vec[3]);
201 void mul_v3_project_m4_v3(float r[3], const float mat[4][4], const float vec[3]);
202 void mul_v2_project_m4_v3(float r[2], const float M[4][4], const float vec[3]);
203 
204 void mul_m3_v2(const float m[3][3], float r[2]);
205 void mul_v2_m3v2(float r[2], const float m[3][3], const float v[2]);
206 void mul_m3_v3(const float M[3][3], float r[3]);
207 void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3]);
208 void mul_v2_m3v3(float r[2], const float M[3][3], const float a[3]);
209 void mul_transposed_m3_v3(const float M[3][3], float r[3]);
210 void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3]);
211 void mul_m3_v3_double(const float M[3][3], double r[3]);
212 
213 void mul_m4_m4m4_aligned_scale(float R[4][4], const float A[4][4], const float B[4][4]);
214 
215 void mul_m3_fl(float R[3][3], float f);
216 void mul_m4_fl(float R[4][4], float f);
217 void mul_mat3_m4_fl(float R[4][4], float f);
218 
219 void negate_m3(float R[3][3]);
220 void negate_mat3_m4(float R[4][4]);
221 void negate_m4(float R[4][4]);
222 
223 bool invert_m3_ex(float m[3][3], const float epsilon);
224 bool invert_m3_m3_ex(float m1[3][3], const float m2[3][3], const float epsilon);
225 
226 bool invert_m3(float R[3][3]);
227 bool invert_m3_m3(float R[3][3], const float A[3][3]);
228 bool invert_m4(float R[4][4]);
229 bool invert_m4_m4(float R[4][4], const float A[4][4]);
230 bool invert_m4_m4_fallback(float R[4][4], const float A[4][4]);
231 
232 /* double arithmetic (mixed float/double) */
233 void mul_m4_v4d(const float M[4][4], double r[4]);
234 void mul_v4d_m4v4d(double r[4], const float M[4][4], const double v[4]);
235 
236 /* double matrix functions (no mixing types) */
237 void mul_v3_m3v3_db(double r[3], const double M[3][3], const double a[3]);
238 void mul_m3_v3_db(const double M[3][3], double r[3]);
239 
240 /****************************** Linear Algebra *******************************/
241 
242 void transpose_m3(float R[3][3]);
243 void transpose_m3_m3(float R[3][3], const float M[3][3]);
244 void transpose_m3_m4(float R[3][3], const float M[4][4]);
245 void transpose_m4(float R[4][4]);
246 void transpose_m4_m4(float R[4][4], const float M[4][4]);
247 
248 bool compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit);
249 
250 void normalize_m2_ex(float R[2][2], float r_scale[2]) ATTR_NONNULL();
251 void normalize_m2(float R[2][2]) ATTR_NONNULL();
252 void normalize_m2_m2_ex(float R[2][2], const float M[2][2], float r_scale[2]) ATTR_NONNULL();
253 void normalize_m2_m2(float R[2][2], const float M[2][2]) ATTR_NONNULL();
254 void normalize_m3_ex(float R[3][3], float r_scale[3]) ATTR_NONNULL();
255 void normalize_m3(float R[3][3]) ATTR_NONNULL();
256 void normalize_m3_m3_ex(float R[3][3], const float M[3][3], float r_scale[3]) ATTR_NONNULL();
257 void normalize_m3_m3(float R[3][3], const float M[3][3]) ATTR_NONNULL();
258 void normalize_m4_ex(float R[4][4], float r_scale[3]) ATTR_NONNULL();
259 void normalize_m4(float R[4][4]) ATTR_NONNULL();
260 void normalize_m4_m4_ex(float R[4][4], const float M[4][4], float r_scale[3]) ATTR_NONNULL();
261 void normalize_m4_m4(float R[4][4], const float M[4][4]) ATTR_NONNULL();
262 
263 void orthogonalize_m3(float R[3][3], int axis);
264 void orthogonalize_m4(float R[4][4], int axis);
265 
266 void orthogonalize_m3_stable(float R[3][3], int axis, bool normalize);
267 void orthogonalize_m4_stable(float R[4][4], int axis, bool normalize);
268 
269 bool orthogonalize_m3_zero_axes(float R[3][3], const float unit_length);
270 bool orthogonalize_m4_zero_axes(float R[4][4], const float unit_length);
271 
272 bool is_orthogonal_m3(const float mat[3][3]);
273 bool is_orthogonal_m4(const float mat[4][4]);
274 bool is_orthonormal_m3(const float mat[3][3]);
275 bool is_orthonormal_m4(const float mat[4][4]);
276 
277 bool is_uniform_scaled_m3(const float mat[3][3]);
278 bool is_uniform_scaled_m4(const float m[4][4]);
279 
280 /* Note: 'adjoint' here means the adjugate (adjunct, "classical adjoint") matrix!
281  * Nowadays 'adjoint' usually refers to the conjugate transpose,
282  * which for real-valued matrices is simply the transpose.
283  */
284 void adjoint_m2_m2(float R[2][2], const float M[2][2]);
285 void adjoint_m3_m3(float R[3][3], const float M[3][3]);
286 void adjoint_m4_m4(float R[4][4], const float M[4][4]);
287 
288 float determinant_m2(float a, float b, float c, float d);
289 float determinant_m3(
290  float a1, float a2, float a3, float b1, float b2, float b3, float c1, float c2, float c3);
291 float determinant_m3_array(const float m[3][3]);
292 float determinant_m4_mat3_array(const float m[4][4]);
293 float determinant_m4(const float m[4][4]);
294 
295 #define PSEUDOINVERSE_EPSILON 1e-8f
296 
297 void svd_m4(float U[4][4], float s[4], float V[4][4], float A[4][4]);
298 void pseudoinverse_m4_m4(float Ainv[4][4], const float A[4][4], float epsilon);
299 void pseudoinverse_m3_m3(float Ainv[3][3], const float A[3][3], float epsilon);
300 
301 bool has_zero_axis_m4(const float matrix[4][4]);
302 
303 void invert_m4_m4_safe(float Ainv[4][4], const float A[4][4]);
304 
305 void invert_m3_m3_safe_ortho(float Ainv[3][3], const float A[3][3]);
306 void invert_m4_m4_safe_ortho(float Ainv[4][4], const float A[4][4]);
307 
308 /****************************** Transformations ******************************/
309 
310 void scale_m3_fl(float R[3][3], float scale);
311 void scale_m4_fl(float R[4][4], float scale);
312 
313 float mat3_to_volume_scale(const float M[3][3]);
314 float mat4_to_volume_scale(const float M[4][4]);
315 
316 float mat3_to_scale(const float M[3][3]);
317 float mat4_to_scale(const float M[4][4]);
318 float mat4_to_xy_scale(const float M[4][4]);
319 
320 void size_to_mat3(float R[3][3], const float size[3]);
321 void size_to_mat4(float R[4][4], const float size[3]);
322 
323 void mat3_to_size(float size[3], const float M[3][3]);
324 void mat4_to_size(float size[3], const float M[4][4]);
325 
326 void mat4_to_size_fix_shear(float size[3], const float M[4][4]);
327 
328 void translate_m3(float mat[3][3], float tx, float ty);
329 void translate_m4(float mat[4][4], float tx, float ty, float tz);
330 void rotate_m3(float mat[3][3], const float angle);
331 void rotate_m4(float mat[4][4], const char axis, const float angle);
332 void rescale_m3(float mat[3][3], const float scale[2]);
333 void rescale_m4(float mat[4][4], const float scale[3]);
334 void transform_pivot_set_m3(float mat[3][3], const float pivot[2]);
335 void transform_pivot_set_m4(float mat[4][4], const float pivot[3]);
336 
337 void mat4_to_rot(float rot[3][3], const float wmat[4][4]);
338 void mat3_to_rot_size(float rot[3][3], float size[3], const float mat3[3][3]);
339 void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4]);
340 void mat4_to_loc_quat(float loc[3], float quat[4], const float wmat[4][4]);
341 void mat4_decompose(float loc[3], float quat[4], float size[3], const float wmat[4][4]);
342 
343 void mat3_polar_decompose(const float mat3[3][3], float r_U[3][3], float r_P[3][3]);
344 
345 void loc_rot_size_to_mat3(float R[3][3],
346  const float loc[2],
347  const float angle,
348  const float size[2]);
349 void loc_rot_size_to_mat4(float R[4][4],
350  const float loc[3],
351  const float rot[3][3],
352  const float size[3]);
353 void loc_eul_size_to_mat4(float R[4][4],
354  const float loc[3],
355  const float eul[3],
356  const float size[3]);
358  float R[4][4], const float loc[3], const float eul[3], const float size[3], const short order);
359 void loc_quat_size_to_mat4(float R[4][4],
360  const float loc[3],
361  const float quat[4],
362  const float size[3]);
363 void loc_axisangle_size_to_mat4(float R[4][4],
364  const float loc[3],
365  const float axis[4],
366  const float angle,
367  const float size[3]);
368 
369 void blend_m3_m3m3(float out[3][3],
370  const float dst[3][3],
371  const float src[3][3],
372  const float srcweight);
373 void blend_m4_m4m4(float out[4][4],
374  const float dst[4][4],
375  const float src[4][4],
376  const float srcweight);
377 
378 void interp_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3], const float t);
379 void interp_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4], const float t);
380 
381 bool is_negative_m3(const float mat[3][3]);
382 bool is_negative_m4(const float mat[4][4]);
383 
384 bool is_zero_m3(const float mat[3][3]);
385 bool is_zero_m4(const float mat[4][4]);
386 
387 bool equals_m3m3(const float mat1[3][3], const float mat2[3][3]);
388 bool equals_m4m4(const float mat1[4][4], const float mat2[4][4]);
389 
390 /* SpaceTransform helper */
391 typedef struct SpaceTransform {
392  float local2target[4][4];
393  float target2local[4][4];
394 
396 
398  const float local[4][4],
399  const float target[4][4]);
401  const float local[4][4],
402  const float target[4][4]);
403 void BLI_space_transform_apply(const struct SpaceTransform *data, float co[3]);
404 void BLI_space_transform_invert(const struct SpaceTransform *data, float co[3]);
405 void BLI_space_transform_apply_normal(const struct SpaceTransform *data, float no[3]);
406 void BLI_space_transform_invert_normal(const struct SpaceTransform *data, float no[3]);
407 
408 #define BLI_SPACE_TRANSFORM_SETUP(data, local, target) \
409  BLI_space_transform_from_matrices((data), (local)->obmat, (target)->obmat)
410 
411 /*********************************** Other ***********************************/
412 
413 void print_m3(const char *str, const float M[3][3]);
414 void print_m4(const char *str, const float M[4][4]);
415 
416 #define print_m3_id(M) print_m3(STRINGIFY(M), M)
417 #define print_m4_id(M) print_m4(STRINGIFY(M), M)
418 
419 #ifdef __cplusplus
420 }
421 #endif
#define ATTR_NONNULL(...)
void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3])
Definition: math_matrix.c:892
void _va_mul_m4_series_6(float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:652
void orthogonalize_m3_stable(float R[3][3], int axis, bool normalize)
Definition: math_matrix.c:1659
bool is_negative_m3(const float mat[3][3])
Definition: math_matrix.c:2583
void BLI_space_transform_from_matrices(struct SpaceTransform *data, const float local[4][4], const float target[4][4])
Definition: math_matrix.c:3342
void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4])
Definition: math_matrix.c:854
void sub_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
Definition: math_matrix.c:1080
void unit_m2(float m[2][2])
Definition: math_matrix.c:51
void _va_mul_m3_series_9(float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3], const float M6[3][3], const float M7[3][3], const float M8[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:606
void mul_v4_m4v3_db(double r[4], const double mat[4][4], const double vec[3])
Definition: math_matrix.c:761
void negate_m3(float R[3][3])
Definition: math_matrix.c:993
void mul_project_m4_v3(const float M[4][4], float vec[3])
Definition: math_matrix.c:824
bool is_zero_m3(const float mat[3][3])
Definition: math_matrix.c:2597
void orthogonalize_m4(float R[4][4], int axis)
Definition: math_matrix.c:1514
void swap_m3m3(float m1[3][3], float m2[3][3])
Definition: math_matrix.c:222
void mul_v3_project_m4_v3(float r[3], const float mat[4][4], const float vec[3])
Definition: math_matrix.c:835
void mul_m3_v3(const float M[3][3], float r[3])
Definition: math_matrix.c:930
void zero_m4(float m[4][4])
Definition: math_matrix.c:46
void BLI_space_transform_apply_normal(const struct SpaceTransform *data, float no[3])
void mul_m4_fl(float R[4][4], float f)
Definition: math_matrix.c:971
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
Definition: math_matrix.c:262
void mul_mat3_m4_fl(float R[4][4], float f)
Definition: math_matrix.c:982
void _va_mul_m3_series_4(float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:546
void mul_m3_m3_pre(float R[3][3], const float A[3][3])
Definition: math_matrix.c:404
void BLI_space_transform_apply(const struct SpaceTransform *data, float co[3])
void size_to_mat3(float R[3][3], const float size[3])
Definition: math_matrix.c:2105
bool is_uniform_scaled_m3(const float mat[3][3])
Definition: math_matrix.c:1850
bool invert_m4(float R[4][4])
Definition: math_matrix.c:1187
void sub_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
Definition: math_matrix.c:1091
bool invert_m4_m4_fallback(float R[4][4], const float A[4][4])
Definition: math_matrix.c:1206
void normalize_m3_m3(float R[3][3], const float M[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:1934
void mul_m4_v4(const float M[4][4], float r[4])
Definition: math_matrix.c:866
void mul_v3_m3v3_db(double r[3], const double M[3][3], const double a[3])
Definition: math_matrix.c:911
void normalize_m2_m2(float R[2][2], const float M[2][2]) ATTR_NONNULL()
Definition: math_matrix.c:1904
void loc_rot_size_to_mat3(float R[3][3], const float loc[2], const float angle, const float size[2])
Definition: math_matrix.c:2622
void copy_m3_m3(float m1[3][3], const float m2[3][3])
Definition: math_matrix.c:89
void mat4_decompose(float loc[3], float quat[4], float size[3], const float wmat[4][4])
Definition: math_matrix.c:2265
void madd_m4_m4m4fl(float R[4][4], const float A[4][4], const float B[4][4], const float f)
Definition: math_matrix.c:1069
void mul_v2_m2v2(float r[2], const float M[2][2], const float v[2])
Definition: math_matrix.c:780
void adjoint_m3_m3(float R[3][3], const float M[3][3])
Definition: math_matrix.c:1991
void unit_m3(float m[3][3])
Definition: math_matrix.c:58
void mul_m3_v2(const float m[3][3], float r[2])
Definition: math_matrix.c:727
void mat3_to_rot_size(float rot[3][3], float size[3], const float mat3[3][3])
Definition: math_matrix.c:2214
void add_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
Definition: math_matrix.c:1047
void scale_m3_fl(float R[3][3], float scale)
Definition: math_matrix.c:2301
void loc_eulO_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3], const short order)
Definition: math_matrix.c:2681
void copy_m3_m4(float m1[3][3], const float m2[4][4])
Definition: math_matrix.c:105
float determinant_m4_mat3_array(const float m[4][4])
Definition: math_matrix.c:1109
void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3])
Definition: math_matrix.c:437
void pseudoinverse_m4_m4(float Ainv[4][4], const float A[4][4], float epsilon)
Definition: math_matrix.c:3206
void mul_v3_m4v3_db(double r[3], const double mat[4][4], const double vec[3])
Definition: math_matrix.c:752
void transpose_m4_m4(float R[4][4], const float M[4][4])
Definition: math_matrix.c:1384
void mul_m4_m4_pre(float R[4][4], const float A[4][4])
Definition: math_matrix.c:375
void mul_m4_m4m4_db_uniq(double R[4][4], const double A[4][4], const double B[4][4])
Definition: math_matrix.c:320
float mat4_to_xy_scale(const float M[4][4])
Definition: math_matrix.c:2206
void mul_m3_fl(float R[3][3], float f)
Definition: math_matrix.c:960
void mul_v2_m3v3(float r[2], const float M[3][3], const float a[3])
Definition: math_matrix.c:921
void normalize_m2_m2_ex(float R[2][2], const float M[2][2], float r_scale[2]) ATTR_NONNULL()
Definition: math_matrix.c:1897
void zero_m2(float m[2][2])
Definition: math_matrix.c:36
void invert_m4_m4_safe_ortho(float Ainv[4][4], const float A[4][4])
Definition: math_matrix.c:3287
void orthogonalize_m3(float R[3][3], int axis)
Definition: math_matrix.c:1425
void copy_m3_m3d(float m1[3][3], const double m2[3][3])
Definition: math_matrix.c:206
void mul_m3_m3_post(float R[3][3], const float B[3][3])
Definition: math_matrix.c:412
void unit_m4(float m[4][4])
Definition: rct.c:1140
void add_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
Definition: math_matrix.c:1036
void copy_m4_m3(float m1[4][4], const float m2[3][3])
Definition: math_matrix.c:120
void _va_mul_m3_series_6(float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:564
void translate_m3(float mat[3][3], float tx, float ty)
Definition: math_matrix.c:2319
void mul_mat3_m4_v3(const float M[4][4], float r[3])
Definition: math_matrix.c:794
void translate_m4(float mat[4][4], float tx, float ty, float tz)
Definition: math_matrix.c:2325
void loc_rot_size_to_mat4(float R[4][4], const float loc[3], const float rot[3][3], const float size[3])
Definition: math_matrix.c:2637
void mat4_to_rot(float rot[3][3], const float wmat[4][4])
Definition: math_matrix.c:2226
void mat4_to_size_fix_shear(float size[3], const float M[4][4])
Definition: math_matrix.c:2156
void svd_m4(float U[4][4], float s[4], float V[4][4], float A[4][4])
Definition: math_matrix.c:2773
bool is_uniform_scaled_m4(const float m[4][4])
Definition: math_matrix.c:1874
void mul_v4d_m4v4d(double r[4], const float M[4][4], const double v[4])
Definition: math_matrix.c:871
bool invert_m4_m4(float R[4][4], const float A[4][4])
Definition: math_matrix.c:1278
void invert_m3_m3_safe_ortho(float Ainv[3][3], const float A[3][3])
Definition: math_matrix.c:3298
void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4])
Definition: math_matrix.c:2236
void _va_mul_m4_series_7(float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4], const float M6[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:664
void zero_m3(float m[3][3])
Definition: math_matrix.c:41
bool has_zero_axis_m4(const float matrix[4][4])
Definition: math_matrix.c:3240
void normalize_m3(float R[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:1919
void transform_pivot_set_m4(float mat[4][4], const float pivot[3])
Definition: math_matrix.c:2411
void mul_m3_v3_double(const float M[3][3], double r[3])
Definition: math_matrix.c:1026
float determinant_m2(float a, float b, float c, float d)
Definition: math_matrix.c:2053
void _va_mul_m4_series_5(float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:642
void transform_pivot_set_m3(float mat[3][3], const float pivot[2])
Definition: math_matrix.c:2425
bool is_orthogonal_m3(const float mat[3][3])
Definition: math_matrix.c:1786
bool equals_m3m3(const float mat1[3][3], const float mat2[3][3])
Definition: math_matrix.c:2606
void rescale_m4(float mat[4][4], const float scale[3])
Definition: math_matrix.c:2396
bool is_orthonormal_m3(const float mat[3][3])
Definition: math_matrix.c:1816
void mul_m4_m4m4_uniq(float R[4][4], const float A[4][4], const float B[4][4])
Definition: math_matrix.c:275
void size_to_mat4(float R[4][4], const float size[3])
Definition: math_matrix.c:2118
struct SpaceTransform SpaceTransform
void unit_m4_db(double m[4][4])
Definition: math_matrix.c:75
void copy_m4d_m4(double m1[4][4], const float m2[4][4])
Definition: math_matrix.c:183
void BLI_space_transform_global_from_matrices(struct SpaceTransform *data, const float local[4][4], const float target[4][4])
Definition: math_matrix.c:3364
void mul_m4_v3(const float M[4][4], float r[3])
Definition: math_matrix.c:732
void mul_m4_v4d(const float M[4][4], double r[4])
Definition: math_matrix.c:887
float mat3_to_scale(const float M[3][3])
Definition: math_matrix.c:2187
void orthogonalize_m4_stable(float R[4][4], int axis, bool normalize)
Definition: math_matrix.c:1685
void scale_m4_fl(float R[4][4], float scale)
Definition: math_matrix.c:2309
void adjoint_m4_m4(float R[4][4], const float M[4][4])
Definition: math_matrix.c:2007
bool equals_m4m4(const float mat1[4][4], const float mat2[4][4])
Definition: math_matrix.c:2612
void normalize_m4_m4(float R[4][4], const float M[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:1972
void normalize_m3_m3_ex(float R[3][3], const float M[3][3], float r_scale[3]) ATTR_NONNULL()
Definition: math_matrix.c:1927
void mul_v2_m4v3(float r[2], const float M[4][4], const float v[3])
Definition: math_matrix.c:772
float determinant_m4(const float m[4][4])
Definition: math_matrix.c:2070
void swap_m4m4(float m1[4][4], float m2[4][4])
Definition: math_matrix.c:236
bool orthogonalize_m3_zero_axes(float R[3][3], const float unit_length)
Definition: math_matrix.c:1775
void _va_mul_m4_series_9(float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4], const float M6[4][4], const float M7[4][4], const float M8[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:694
void transpose_m3_m4(float R[3][3], const float M[4][4])
Definition: math_matrix.c:1343
void _va_mul_m3_series_8(float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3], const float M6[3][3], const float M7[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:590
void copy_m2_m2(float m1[2][2], const float m2[2][2])
Definition: math_matrix.c:84
void mat3_polar_decompose(const float mat3[3][3], float r_U[3][3], float r_P[3][3])
Definition: math_matrix.c:2282
void mul_v2_project_m4_v3(float r[2], const float M[4][4], const float vec[3])
Definition: math_matrix.c:845
float mat3_to_volume_scale(const float M[3][3])
Definition: math_matrix.c:2172
void normalize_m4_ex(float R[4][4], float r_scale[3]) ATTR_NONNULL()
Definition: math_matrix.c:1942
void _va_mul_m3_series_5(float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:554
bool invert_m3_m3(float R[3][3], const float A[3][3])
Definition: math_matrix.c:1161
void copy_m4_m4(float m1[4][4], const float m2[4][4])
Definition: math_matrix.c:95
void _va_mul_m4_series_3(float R[4][4], const float M1[4][4], const float M2[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:630
void interp_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4], const float t)
Definition: math_matrix.c:2562
void mat4_to_loc_quat(float loc[3], float quat[4], const float wmat[4][4])
Definition: math_matrix.c:2247
void print_m4(const char *str, const float M[4][4])
Definition: math_matrix.c:2753
void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3])
Definition: math_matrix.c:950
void invert_m4_m4_safe(float Ainv[4][4], const float A[4][4])
Definition: math_matrix.c:3246
void mul_m3_m3m4(float R[3][3], const float A[3][3], const float B[4][4])
Definition: math_matrix.c:458
void mul_m4db_m4db_m4fl_uniq(double R[4][4], const double A[4][4], const float B[4][4])
Definition: math_matrix.c:347
void mul_m3_v3_db(const double M[3][3], double r[3])
Definition: math_matrix.c:935
void mul_m2_v2(const float M[2][2], float v[2])
Definition: math_matrix.c:788
float determinant_m3_array(const float m[3][3])
Definition: math_matrix.c:1102
void _va_mul_m4_series_8(float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4], const float M6[4][4], const float M7[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:678
void copy_m4_m2(float m1[4][4], const float m2[2][2])
Definition: math_matrix.c:160
void shuffle_m4(float R[4][4], const int index[4])
Definition: math_matrix.c:250
bool is_negative_m4(const float mat[4][4])
Definition: math_matrix.c:2590
void blend_m3_m3m3(float out[3][3], const float dst[3][3], const float src[3][3], const float srcweight)
Definition: math_matrix.c:2439
void negate_mat3_m4(float R[4][4])
Definition: math_matrix.c:1004
void copy_m3_m2(float m1[3][3], const float m2[2][2])
Definition: math_matrix.c:145
void mul_v2_m3v2(float r[2], const float m[3][3], const float v[2])
Definition: math_matrix.c:714
void mul_v3_mat3_m4v3_db(double r[3], const double M[4][4], const double v[3])
Definition: math_matrix.c:814
bool orthogonalize_m4_zero_axes(float R[4][4], const float unit_length)
Definition: math_matrix.c:1779
void mul_m4_m4m4_aligned_scale(float R[4][4], const float A[4][4], const float B[4][4])
Definition: math_matrix.c:1294
void mul_m3_m3m3_uniq(float R[3][3], const float A[3][3], const float B[3][3])
Definition: math_matrix.c:420
float mat4_to_scale(const float M[4][4])
Definition: math_matrix.c:2196
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
Definition: math_matrix.c:742
bool invert_m3(float R[3][3])
Definition: math_matrix.c:1152
void loc_quat_size_to_mat4(float R[4][4], const float loc[3], const float quat[4], const float size[3])
Definition: math_matrix.c:2710
void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3])
Definition: math_matrix.c:901
void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3])
Definition: math_matrix.c:2653
void rescale_m3(float mat[3][3], const float scale[2])
Definition: math_matrix.c:2389
void BLI_space_transform_invert_normal(const struct SpaceTransform *data, float no[3])
void mat4_to_size(float size[3], const float M[4][4])
Definition: math_matrix.c:2145
bool invert_m3_m3_ex(float m1[3][3], const float m2[3][3], const float epsilon)
Definition: math_matrix.c:1125
void interp_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3], const float t)
Definition: math_matrix.c:2508
void transpose_m3(float R[3][3])
Definition: math_matrix.c:1312
void BLI_space_transform_invert(const struct SpaceTransform *data, float co[3])
bool is_orthogonal_m4(const float mat[4][4])
Definition: math_matrix.c:1801
void normalize_m3_ex(float R[3][3], float r_scale[3]) ATTR_NONNULL()
Definition: math_matrix.c:1912
float determinant_m3(float a1, float a2, float a3, float b1, float b2, float b3, float c1, float c2, float c3)
Definition: math_matrix.c:2059
void _va_mul_m3_series_7(float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3], const float M6[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:576
void print_m3(const char *str, const float M[3][3])
Definition: math_matrix.c:2744
void blend_m4_m4m4(float out[4][4], const float dst[4][4], const float src[4][4], const float srcweight)
Definition: math_matrix.c:2465
void transpose_m3_m3(float R[3][3], const float M[3][3])
Definition: math_matrix.c:1327
void negate_m4(float R[4][4])
Definition: math_matrix.c:1015
void mul_transposed_m3_v3(const float M[3][3], float r[3])
Definition: math_matrix.c:940
bool compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit)
Definition: math_matrix.c:1406
void normalize_m2(float R[2][2]) ATTR_NONNULL()
Definition: math_matrix.c:1889
float mat4_to_volume_scale(const float M[4][4])
Definition: math_matrix.c:2177
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
Definition: math_matrix.c:391
bool is_zero_m4(const float mat[4][4])
Definition: math_matrix.c:2601
void mat3_to_size(float size[3], const float M[3][3])
Definition: math_matrix.c:2138
void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4])
Definition: math_matrix.c:505
void _va_mul_m4_series_4(float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:634
void transpose_m4(float R[4][4])
Definition: math_matrix.c:1358
void rotate_m3(float mat[3][3], const float angle)
Definition: math_matrix.c:2332
void mul_m4_m4_post(float R[4][4], const float B[4][4])
Definition: math_matrix.c:383
void pseudoinverse_m3_m3(float Ainv[3][3], const float A[3][3], float epsilon)
Definition: math_matrix.c:3228
bool invert_m3_ex(float m[3][3], const float epsilon)
Definition: math_matrix.c:1116
void madd_m3_m3m3fl(float R[3][3], const float A[3][3], const float B[3][3], const float f)
Definition: math_matrix.c:1058
void loc_axisangle_size_to_mat4(float R[4][4], const float loc[3], const float axis[4], const float angle, const float size[3])
void normalize_m2_ex(float R[2][2], float r_scale[2]) ATTR_NONNULL()
Definition: math_matrix.c:1881
bool is_orthonormal_m4(const float mat[4][4])
Definition: math_matrix.c:1833
void mul_m3_m4m4(float R[3][3], const float A[4][4], const float B[4][4])
Definition: math_matrix.c:525
void copy_m4_m4_db(double m1[4][4], const double m2[4][4])
Definition: math_matrix.c:100
void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3])
Definition: math_matrix.c:804
void normalize_m4_m4_ex(float R[4][4], const float M[4][4], float r_scale[3]) ATTR_NONNULL()
Definition: math_matrix.c:1963
void mul_m3_m4m3(float R[3][3], const float A[4][4], const float B[3][3])
Definition: math_matrix.c:482
void rotate_m4(float mat[4][4], const char axis, const float angle)
Definition: math_matrix.c:2352
void normalize_m4(float R[4][4]) ATTR_NONNULL()
Definition: math_matrix.c:1952
void _va_mul_m3_series_3(float R[3][3], const float M1[3][3], const float M2[3][3]) ATTR_NONNULL()
Definition: math_matrix.c:542
void adjoint_m2_m2(float R[2][2], const float M[2][2])
Definition: math_matrix.c:1982
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint order
ATTR_WARN_UNUSED_RESULT const BMVert * v
#define A
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
unsigned int U
Definition: btGjkEpa3.h:78
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
Definition: btVector3.h:356
#define rot(x, k)
#define str(s)
#define M
#define B
#define R
static unsigned c
Definition: RandGen.cpp:97
static unsigned a[3]
Definition: RandGen.cpp:92
static double epsilon
float local2target[4][4]
float target2local[4][4]
ccl_device_inline float2 normalize(const float2 &a)
CCL_NAMESPACE_BEGIN struct View V