12 #ifndef MATH_STANDALONE
20 memset(m, 0,
sizeof(
float[2][2]));
25 memset(m, 0,
sizeof(
float[3][3]));
30 memset(m, 0,
sizeof(
float[4][4]));
35 m[0][0] = m[1][1] = 1.0f;
42 m[0][0] = m[1][1] = m[2][2] = 1.0f;
43 m[0][1] = m[0][2] = 0.0f;
44 m[1][0] = m[1][2] = 0.0f;
45 m[2][0] = m[2][1] = 0.0f;
50 m[0][0] = m[1][1] = m[2][2] = m[3][3] = 1.0f;
51 m[0][1] = m[0][2] = m[0][3] = 0.0f;
52 m[1][0] = m[1][2] = m[1][3] = 0.0f;
53 m[2][0] = m[2][1] = m[2][3] = 0.0f;
54 m[3][0] = m[3][1] = m[3][2] = 0.0f;
59 m[0][0] = m[1][1] = m[2][2] = m[3][3] = 1.0f;
60 m[0][1] = m[0][2] = m[0][3] = 0.0f;
61 m[1][0] = m[1][2] = m[1][3] = 0.0f;
62 m[2][0] = m[2][1] = m[2][3] = 0.0f;
63 m[3][0] = m[3][1] = m[3][2] = 0.0f;
68 memcpy(m1, m2,
sizeof(
float[2][2]));
74 memcpy(m1, m2,
sizeof(
float[3][3]));
79 memcpy(m1, m2,
sizeof(
float[4][4]));
84 memcpy(m1, m2,
sizeof(
double[4][4]));
206 m1[0][0] = (
float)m2[0][0];
207 m1[0][1] = (
float)m2[0][1];
208 m1[0][2] = (
float)m2[0][2];
210 m1[1][0] = (
float)m2[1][0];
211 m1[1][1] = (
float)m2[1][1];
212 m1[1][2] = (
float)m2[1][2];
214 m1[2][0] = (
float)m2[2][0];
215 m1[2][1] = (
float)m2[2][1];
216 m1[2][2] = (
float)m2[2][2];
224 for (i = 0; i < 3; i++) {
225 for (j = 0; j < 3; j++) {
238 for (i = 0; i < 4; i++) {
239 for (j = 0; j < 4; j++) {
250 for (
int k = 0; k < 4; k++) {
252 R[index[k]][k] = 1.0f;
278 __m128
A0 = _mm_loadu_ps(
A[0]);
279 __m128
A1 = _mm_loadu_ps(
A[1]);
280 __m128
A2 = _mm_loadu_ps(
A[2]);
281 __m128 A3 = _mm_loadu_ps(
A[3]);
283 for (
int i = 0; i < 4; i++) {
284 __m128
B0 = _mm_set1_ps(
B[i][0]);
285 __m128
B1 = _mm_set1_ps(
B[i][1]);
286 __m128
B2 = _mm_set1_ps(
B[i][2]);
287 __m128
B3 = _mm_set1_ps(
B[i][3]);
289 __m128
sum = _mm_add_ps(_mm_add_ps(_mm_mul_ps(
B0,
A0), _mm_mul_ps(
B1,
A1)),
290 _mm_add_ps(_mm_mul_ps(
B2,
A2), _mm_mul_ps(
B3, A3)));
292 _mm_storeu_ps(
R[i],
sum);
295 R[0][0] =
B[0][0] *
A[0][0] +
B[0][1] *
A[1][0] +
B[0][2] *
A[2][0] +
B[0][3] *
A[3][0];
296 R[0][1] =
B[0][0] *
A[0][1] +
B[0][1] *
A[1][1] +
B[0][2] *
A[2][1] +
B[0][3] *
A[3][1];
297 R[0][2] =
B[0][0] *
A[0][2] +
B[0][1] *
A[1][2] +
B[0][2] *
A[2][2] +
B[0][3] *
A[3][2];
298 R[0][3] =
B[0][0] *
A[0][3] +
B[0][1] *
A[1][3] +
B[0][2] *
A[2][3] +
B[0][3] *
A[3][3];
300 R[1][0] =
B[1][0] *
A[0][0] +
B[1][1] *
A[1][0] +
B[1][2] *
A[2][0] +
B[1][3] *
A[3][0];
301 R[1][1] =
B[1][0] *
A[0][1] +
B[1][1] *
A[1][1] +
B[1][2] *
A[2][1] +
B[1][3] *
A[3][1];
302 R[1][2] =
B[1][0] *
A[0][2] +
B[1][1] *
A[1][2] +
B[1][2] *
A[2][2] +
B[1][3] *
A[3][2];
303 R[1][3] =
B[1][0] *
A[0][3] +
B[1][1] *
A[1][3] +
B[1][2] *
A[2][3] +
B[1][3] *
A[3][3];
305 R[2][0] =
B[2][0] *
A[0][0] +
B[2][1] *
A[1][0] +
B[2][2] *
A[2][0] +
B[2][3] *
A[3][0];
306 R[2][1] =
B[2][0] *
A[0][1] +
B[2][1] *
A[1][1] +
B[2][2] *
A[2][1] +
B[2][3] *
A[3][1];
307 R[2][2] =
B[2][0] *
A[0][2] +
B[2][1] *
A[1][2] +
B[2][2] *
A[2][2] +
B[2][3] *
A[3][2];
308 R[2][3] =
B[2][0] *
A[0][3] +
B[2][1] *
A[1][3] +
B[2][2] *
A[2][3] +
B[2][3] *
A[3][3];
310 R[3][0] =
B[3][0] *
A[0][0] +
B[3][1] *
A[1][0] +
B[3][2] *
A[2][0] +
B[3][3] *
A[3][0];
311 R[3][1] =
B[3][0] *
A[0][1] +
B[3][1] *
A[1][1] +
B[3][2] *
A[2][1] +
B[3][3] *
A[3][1];
312 R[3][2] =
B[3][0] *
A[0][2] +
B[3][1] *
A[1][2] +
B[3][2] *
A[2][2] +
B[3][3] *
A[3][2];
313 R[3][3] =
B[3][0] *
A[0][3] +
B[3][1] *
A[1][3] +
B[3][2] *
A[2][3] +
B[3][3] *
A[3][3];
323 R[0][0] =
B[0][0] *
A[0][0] +
B[0][1] *
A[1][0] +
B[0][2] *
A[2][0] +
B[0][3] *
A[3][0];
324 R[0][1] =
B[0][0] *
A[0][1] +
B[0][1] *
A[1][1] +
B[0][2] *
A[2][1] +
B[0][3] *
A[3][1];
325 R[0][2] =
B[0][0] *
A[0][2] +
B[0][1] *
A[1][2] +
B[0][2] *
A[2][2] +
B[0][3] *
A[3][2];
326 R[0][3] =
B[0][0] *
A[0][3] +
B[0][1] *
A[1][3] +
B[0][2] *
A[2][3] +
B[0][3] *
A[3][3];
328 R[1][0] =
B[1][0] *
A[0][0] +
B[1][1] *
A[1][0] +
B[1][2] *
A[2][0] +
B[1][3] *
A[3][0];
329 R[1][1] =
B[1][0] *
A[0][1] +
B[1][1] *
A[1][1] +
B[1][2] *
A[2][1] +
B[1][3] *
A[3][1];
330 R[1][2] =
B[1][0] *
A[0][2] +
B[1][1] *
A[1][2] +
B[1][2] *
A[2][2] +
B[1][3] *
A[3][2];
331 R[1][3] =
B[1][0] *
A[0][3] +
B[1][1] *
A[1][3] +
B[1][2] *
A[2][3] +
B[1][3] *
A[3][3];
333 R[2][0] =
B[2][0] *
A[0][0] +
B[2][1] *
A[1][0] +
B[2][2] *
A[2][0] +
B[2][3] *
A[3][0];
334 R[2][1] =
B[2][0] *
A[0][1] +
B[2][1] *
A[1][1] +
B[2][2] *
A[2][1] +
B[2][3] *
A[3][1];
335 R[2][2] =
B[2][0] *
A[0][2] +
B[2][1] *
A[1][2] +
B[2][2] *
A[2][2] +
B[2][3] *
A[3][2];
336 R[2][3] =
B[2][0] *
A[0][3] +
B[2][1] *
A[1][3] +
B[2][2] *
A[2][3] +
B[2][3] *
A[3][3];
338 R[3][0] =
B[3][0] *
A[0][0] +
B[3][1] *
A[1][0] +
B[3][2] *
A[2][0] +
B[3][3] *
A[3][0];
339 R[3][1] =
B[3][0] *
A[0][1] +
B[3][1] *
A[1][1] +
B[3][2] *
A[2][1] +
B[3][3] *
A[3][1];
340 R[3][2] =
B[3][0] *
A[0][2] +
B[3][1] *
A[1][2] +
B[3][2] *
A[2][2] +
B[3][3] *
A[3][2];
341 R[3][3] =
B[3][0] *
A[0][3] +
B[3][1] *
A[1][3] +
B[3][2] *
A[2][3] +
B[3][3] *
A[3][3];
351 R[0][0] =
B[0][0] *
A[0][0] +
B[0][1] *
A[1][0] +
B[0][2] *
A[2][0] +
B[0][3] *
A[3][0];
352 R[0][1] =
B[0][0] *
A[0][1] +
B[0][1] *
A[1][1] +
B[0][2] *
A[2][1] +
B[0][3] *
A[3][1];
353 R[0][2] =
B[0][0] *
A[0][2] +
B[0][1] *
A[1][2] +
B[0][2] *
A[2][2] +
B[0][3] *
A[3][2];
354 R[0][3] =
B[0][0] *
A[0][3] +
B[0][1] *
A[1][3] +
B[0][2] *
A[2][3] +
B[0][3] *
A[3][3];
356 R[1][0] =
B[1][0] *
A[0][0] +
B[1][1] *
A[1][0] +
B[1][2] *
A[2][0] +
B[1][3] *
A[3][0];
357 R[1][1] =
B[1][0] *
A[0][1] +
B[1][1] *
A[1][1] +
B[1][2] *
A[2][1] +
B[1][3] *
A[3][1];
358 R[1][2] =
B[1][0] *
A[0][2] +
B[1][1] *
A[1][2] +
B[1][2] *
A[2][2] +
B[1][3] *
A[3][2];
359 R[1][3] =
B[1][0] *
A[0][3] +
B[1][1] *
A[1][3] +
B[1][2] *
A[2][3] +
B[1][3] *
A[3][3];
361 R[2][0] =
B[2][0] *
A[0][0] +
B[2][1] *
A[1][0] +
B[2][2] *
A[2][0] +
B[2][3] *
A[3][0];
362 R[2][1] =
B[2][0] *
A[0][1] +
B[2][1] *
A[1][1] +
B[2][2] *
A[2][1] +
B[2][3] *
A[3][1];
363 R[2][2] =
B[2][0] *
A[0][2] +
B[2][1] *
A[1][2] +
B[2][2] *
A[2][2] +
B[2][3] *
A[3][2];
364 R[2][3] =
B[2][0] *
A[0][3] +
B[2][1] *
A[1][3] +
B[2][2] *
A[2][3] +
B[2][3] *
A[3][3];
366 R[3][0] =
B[3][0] *
A[0][0] +
B[3][1] *
A[1][0] +
B[3][2] *
A[2][0] +
B[3][3] *
A[3][0];
367 R[3][1] =
B[3][0] *
A[0][1] +
B[3][1] *
A[1][1] +
B[3][2] *
A[2][1] +
B[3][3] *
A[3][1];
368 R[3][2] =
B[3][0] *
A[0][2] +
B[3][1] *
A[1][2] +
B[3][2] *
A[2][2] +
B[3][3] *
A[3][2];
369 R[3][3] =
B[3][0] *
A[0][3] +
B[3][1] *
A[1][3] +
B[3][2] *
A[2][3] +
B[3][3] *
A[3][3];
421 R[0][0] =
B[0][0] *
A[0][0] +
B[0][1] *
A[1][0] +
B[0][2] *
A[2][0];
422 R[0][1] =
B[0][0] *
A[0][1] +
B[0][1] *
A[1][1] +
B[0][2] *
A[2][1];
423 R[0][2] =
B[0][0] *
A[0][2] +
B[0][1] *
A[1][2] +
B[0][2] *
A[2][2];
425 R[1][0] =
B[1][0] *
A[0][0] +
B[1][1] *
A[1][0] +
B[1][2] *
A[2][0];
426 R[1][1] =
B[1][0] *
A[0][1] +
B[1][1] *
A[1][1] +
B[1][2] *
A[2][1];
427 R[1][2] =
B[1][0] *
A[0][2] +
B[1][1] *
A[1][2] +
B[1][2] *
A[2][2];
429 R[2][0] =
B[2][0] *
A[0][0] +
B[2][1] *
A[1][0] +
B[2][2] *
A[2][0];
430 R[2][1] =
B[2][0] *
A[0][1] +
B[2][1] *
A[1][1] +
B[2][2] *
A[2][1];
431 R[2][2] =
B[2][0] *
A[0][2] +
B[2][1] *
A[1][2] +
B[2][2] *
A[2][2];
436 float B_[3][3], A_[4][4];
443 R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
444 R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
445 R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
446 R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
447 R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
448 R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
449 R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
450 R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
451 R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
456 float B_[4][4], A_[3][3];
464 R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
465 R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
466 R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
468 R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
469 R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
470 R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
472 R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
473 R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
474 R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
479 float B_[3][3], A_[4][4];
487 R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
488 R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
489 R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
491 R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
492 R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
493 R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
495 R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
496 R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
497 R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
502 float B_[4][4], A_[3][3];
509 R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
510 R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
511 R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
512 R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
513 R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
514 R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
515 R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
516 R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
517 R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
522 R[0][0] =
B[0][0] *
A[0][0] +
B[0][1] *
A[1][0] +
B[0][2] *
A[2][0];
523 R[0][1] =
B[0][0] *
A[0][1] +
B[0][1] *
A[1][1] +
B[0][2] *
A[2][1];
524 R[0][2] =
B[0][0] *
A[0][2] +
B[0][1] *
A[1][2] +
B[0][2] *
A[2][2];
525 R[1][0] =
B[1][0] *
A[0][0] +
B[1][1] *
A[1][0] +
B[1][2] *
A[2][0];
526 R[1][1] =
B[1][0] *
A[0][1] +
B[1][1] *
A[1][1] +
B[1][2] *
A[2][1];
527 R[1][2] =
B[1][0] *
A[0][2] +
B[1][1] *
A[1][2] +
B[1][2] *
A[2][2];
528 R[2][0] =
B[2][0] *
A[0][0] +
B[2][1] *
A[1][0] +
B[2][2] *
A[2][0];
529 R[2][1] =
B[2][0] *
A[0][1] +
B[2][1] *
A[1][1] +
B[2][2] *
A[2][1];
530 R[2][2] =
B[2][0] *
A[0][2] +
B[2][1] *
A[1][2] +
B[2][2] *
A[2][2];
542 const float m1[3][3],
543 const float m2[3][3],
544 const float m3[3][3])
550 const float m1[3][3],
551 const float m2[3][3],
552 const float m3[3][3],
553 const float m4[3][3])
560 const float m1[3][3],
561 const float m2[3][3],
562 const float m3[3][3],
563 const float m4[3][3],
564 const float m5[3][3])
572 const float m1[3][3],
573 const float m2[3][3],
574 const float m3[3][3],
575 const float m4[3][3],
576 const float m5[3][3],
577 const float m6[3][3])
586 const float m1[3][3],
587 const float m2[3][3],
588 const float m3[3][3],
589 const float m4[3][3],
590 const float m5[3][3],
591 const float m6[3][3],
592 const float m7[3][3])
602 const float m1[3][3],
603 const float m2[3][3],
604 const float m3[3][3],
605 const float m4[3][3],
606 const float m5[3][3],
607 const float m6[3][3],
608 const float m7[3][3],
609 const float m8[3][3])
631 const float m1[4][4],
632 const float m2[4][4],
633 const float m3[4][4])
639 const float m1[4][4],
640 const float m2[4][4],
641 const float m3[4][4],
642 const float m4[4][4])
649 const float m1[4][4],
650 const float m2[4][4],
651 const float m3[4][4],
652 const float m4[4][4],
653 const float m5[4][4])
661 const float m1[4][4],
662 const float m2[4][4],
663 const float m3[4][4],
664 const float m4[4][4],
665 const float m5[4][4],
666 const float m6[4][4])
675 const float m1[4][4],
676 const float m2[4][4],
677 const float m3[4][4],
678 const float m4[4][4],
679 const float m5[4][4],
680 const float m6[4][4],
681 const float m7[4][4])
691 const float m1[4][4],
692 const float m2[4][4],
693 const float m3[4][4],
694 const float m4[4][4],
695 const float m5[4][4],
696 const float m6[4][4],
697 const float m7[4][4],
698 const float m8[4][4])
713 float temp[3], warped[3];
720 r[0] = warped[0] / warped[2];
721 r[1] = warped[1] / warped[2];
731 const float x =
r[0];
732 const float y =
r[1];
734 r[0] =
x *
M[0][0] +
y *
M[1][0] +
M[2][0] *
r[2] +
M[3][0];
735 r[1] =
x *
M[0][1] +
y *
M[1][1] +
M[2][1] *
r[2] +
M[3][1];
736 r[2] =
x *
M[0][2] +
y *
M[1][2] +
M[2][2] *
r[2] +
M[3][2];
739 void mul_v3_m4v3(
float r[3],
const float mat[4][4],
const float vec[3])
741 const float x = vec[0];
742 const float y = vec[1];
744 r[0] =
x * mat[0][0] +
y * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
745 r[1] =
x * mat[0][1] +
y * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
746 r[2] =
x * mat[0][2] +
y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
751 const double x = vec[0];
752 const double y = vec[1];
754 r[0] =
x * mat[0][0] +
y * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
755 r[1] =
x * mat[0][1] +
y * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
756 r[2] =
x * mat[0][2] +
y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
760 const double x = vec[0];
761 const double y = vec[1];
763 r[0] =
x * mat[0][0] +
y * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
764 r[1] =
x * mat[0][1] +
y * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
765 r[2] =
x * mat[0][2] +
y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
766 r[3] =
x * mat[0][3] +
y * mat[1][3] + mat[2][3] * vec[2] + mat[3][3];
769 void mul_v2_m4v3(
float r[2],
const float mat[4][4],
const float vec[3])
771 const float x = vec[0];
773 r[0] =
x * mat[0][0] + vec[1] * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
774 r[1] =
x * mat[0][1] + vec[1] * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
777 void mul_v2_m2v2(
float r[2],
const float mat[2][2],
const float vec[2])
779 const float x = vec[0];
781 r[0] = mat[0][0] *
x + mat[1][0] * vec[1];
782 r[1] = mat[0][1] *
x + mat[1][1] * vec[1];
792 const float x =
r[0];
793 const float y =
r[1];
795 r[0] =
x *
M[0][0] +
y *
M[1][0] +
M[2][0] *
r[2];
796 r[1] =
x *
M[0][1] +
y *
M[1][1] +
M[2][1] *
r[2];
797 r[2] =
x *
M[0][2] +
y *
M[1][2] +
M[2][2] *
r[2];
802 const float x = vec[0];
803 const float y = vec[1];
805 r[0] =
x * mat[0][0] +
y * mat[1][0] + mat[2][0] * vec[2];
806 r[1] =
x * mat[0][1] +
y * mat[1][1] + mat[2][1] * vec[2];
807 r[2] =
x * mat[0][2] +
y * mat[1][2] + mat[2][2] * vec[2];
812 const double x = vec[0];
813 const double y = vec[1];
815 r[0] =
x * mat[0][0] +
y * mat[1][0] + mat[2][0] * vec[2];
816 r[1] =
x * mat[0][1] +
y * mat[1][1] + mat[2][1] * vec[2];
817 r[2] =
x * mat[0][2] +
y * mat[1][2] + mat[2][2] * vec[2];
852 const float x =
v[0];
853 const float y =
v[1];
854 const float z =
v[2];
856 r[0] =
x * mat[0][0] +
y * mat[1][0] +
z * mat[2][0] + mat[3][0] *
v[3];
857 r[1] =
x * mat[0][1] +
y * mat[1][1] +
z * mat[2][1] + mat[3][1] *
v[3];
858 r[2] =
x * mat[0][2] +
y * mat[1][2] +
z * mat[2][2] + mat[3][2] *
v[3];
859 r[3] =
x * mat[0][3] +
y * mat[1][3] +
z * mat[2][3] + mat[3][3] *
v[3];
869 const double x =
v[0];
870 const double y =
v[1];
871 const double z =
v[2];
873 r[0] =
x * (
double)mat[0][0] +
y * (
double)mat[1][0] +
z * (
double)mat[2][0] +
874 (
double)mat[3][0] *
v[3];
875 r[1] =
x * (
double)mat[0][1] +
y * (
double)mat[1][1] +
z * (
double)mat[2][1] +
876 (
double)mat[3][1] *
v[3];
877 r[2] =
x * (
double)mat[0][2] +
y * (
double)mat[1][2] +
z * (
double)mat[2][2] +
878 (
double)mat[3][2] *
v[3];
879 r[3] =
x * (
double)mat[0][3] +
y * (
double)mat[1][3] +
z * (
double)mat[2][3] +
880 (
double)mat[3][3] *
v[3];
891 r[0] =
v[0] *
M[0][0] +
v[1] *
M[1][0] +
M[2][0] *
v[2] +
M[3][0];
892 r[1] =
v[0] *
M[0][1] +
v[1] *
M[1][1] +
M[2][1] *
v[2] +
M[3][1];
893 r[2] =
v[0] *
M[0][2] +
v[1] *
M[1][2] +
M[2][2] *
v[2] +
M[3][2];
894 r[3] =
v[0] *
M[0][3] +
v[1] *
M[1][3] +
M[2][3] *
v[2] +
M[3][3];
902 r[0] =
M[0][0] *
t[0] +
M[1][0] *
t[1] +
M[2][0] *
t[2];
903 r[1] =
M[0][1] *
t[0] +
M[1][1] *
t[1] +
M[2][1] *
t[2];
904 r[2] =
M[0][2] *
t[0] +
M[1][2] *
t[1] +
M[2][2] *
t[2];
912 r[0] =
M[0][0] *
t[0] +
M[1][0] *
t[1] +
M[2][0] *
t[2];
913 r[1] =
M[0][1] *
t[0] +
M[1][1] *
t[1] +
M[2][1] *
t[2];
914 r[2] =
M[0][2] *
t[0] +
M[1][2] *
t[1] +
M[2][2] *
t[2];
922 r[0] =
M[0][0] *
t[0] +
M[1][0] *
t[1] +
M[2][0] *
t[2];
923 r[1] =
M[0][1] *
t[0] +
M[1][1] *
t[1] +
M[2][1] *
t[2];
938 const float x =
r[0];
939 const float y =
r[1];
941 r[0] =
x *
M[0][0] +
y *
M[0][1] +
M[0][2] *
r[2];
942 r[1] =
x *
M[1][0] +
y *
M[1][1] +
M[1][2] *
r[2];
943 r[2] =
x *
M[2][0] +
y *
M[2][1] +
M[2][2] *
r[2];
948 const float x =
r[0];
949 const float y =
r[1];
951 r[0] =
x *
M[0][0] +
y *
M[0][1] +
M[0][2] *
r[2];
952 r[1] =
x *
M[1][0] +
y *
M[1][1] +
M[1][2] *
r[2];
953 r[2] =
x *
M[2][0] +
y *
M[2][1] +
M[2][2] *
r[2];
960 for (i = 0; i < 3; i++) {
961 for (j = 0; j < 3; j++) {
971 for (i = 0; i < 4; i++) {
972 for (j = 0; j < 4; j++) {
982 for (i = 0; i < 3; i++) {
983 for (j = 0; j < 3; j++) {
993 for (i = 0; i < 3; i++) {
994 for (j = 0; j < 3; j++) {
1004 for (i = 0; i < 3; i++) {
1005 for (j = 0; j < 3; j++) {
1015 for (i = 0; i < 4; i++) {
1016 for (j = 0; j < 4; j++) {
1024 const double x =
r[0];
1025 const double y =
r[1];
1036 for (i = 0; i < 3; i++) {
1037 for (j = 0; j < 3; j++) {
1038 R[i][j] =
A[i][j] +
B[i][j];
1047 for (i = 0; i < 4; i++) {
1048 for (j = 0; j < 4; j++) {
1049 R[i][j] =
A[i][j] +
B[i][j];
1058 for (i = 0; i < 3; i++) {
1059 for (j = 0; j < 3; j++) {
1060 R[i][j] =
A[i][j] +
B[i][j] * f;
1069 for (i = 0; i < 4; i++) {
1070 for (j = 0; j < 4; j++) {
1071 R[i][j] =
A[i][j] +
B[i][j] * f;
1080 for (i = 0; i < 3; i++) {
1081 for (j = 0; j < 3; j++) {
1082 R[i][j] =
A[i][j] -
B[i][j];
1091 for (i = 0; i < 4; i++) {
1092 for (j = 0; j < 4; j++) {
1093 R[i][j] =
A[i][j] -
B[i][j];
1100 return (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) -
1101 m[1][0] * (m[0][1] * m[2][2] - m[0][2] * m[2][1]) +
1102 m[2][0] * (m[0][1] * m[1][2] - m[0][2] * m[1][1]));
1107 return (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) -
1108 m[1][0] * (m[0][1] * m[2][2] - m[0][2] * m[2][1]) +
1109 m[2][0] * (m[0][1] * m[1][2] - m[0][2] * m[1][1]));
1114 return (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) -
1115 m[1][0] * (m[0][1] * m[2][2] - m[0][2] * m[2][1]) +
1116 m[2][0] * (m[0][1] * m[1][2] - m[0][2] * m[1][1]));
1122 float det =
determinant_m2(m2[0][0], m2[1][0], m2[0][1], m2[1][1]);
1124 bool success = (det != 0.0f);
1160 if (
LIKELY(det != 0.0f)) {
1162 for (
a = 0;
a < 3;
a++) {
1163 for (
b = 0;
b < 3;
b++) {
1192 success = (det != 0.0f);
1194 if (
LIKELY(det != 0.0f)) {
1196 for (
a = 0;
a < 3;
a++) {
1197 for (
b = 0;
b < 3;
b++) {
1217 #ifndef MATH_STANDALONE
1225 float tempmat[4][4];
1232 for (i = 0; i < 4; i++) {
1233 for (j = 0; j < 4; j++) {
1237 for (i = 0; i < 4; i++) {
1242 for (i = 0; i < 4; i++) {
1243 for (j = 0; j < 4; j++) {
1244 tempmat[i][j] = mat[i][j];
1248 for (i = 0; i < 4; i++) {
1252 for (j = i + 1; j < 4; j++) {
1260 for (k = 0; k < 4; k++) {
1261 SWAP(
float, tempmat[i][k], tempmat[maxj][k]);
1266 if (
UNLIKELY(tempmat[i][i] == 0.0f)) {
1269 temp = (
double)tempmat[i][i];
1270 for (k = 0; k < 4; k++) {
1271 tempmat[i][k] = (
float)((
double)tempmat[i][k] / temp);
1274 for (j = 0; j < 4; j++) {
1276 temp = tempmat[j][i];
1277 for (k = 0; k < 4; k++) {
1278 tempmat[j][k] -= (
float)((
double)tempmat[i][k] * temp);
1289 #ifndef MATH_STANDALONE
1300 float loc_a[3], rot_a[3][3], size_a[3];
1301 float loc_b[3], rot_b[3][3], size_b[3];
1302 float loc_r[3], rot_r[3][3], size_r[3];
1316 float loc_a[3], rot_a[3][3], size_a[3];
1317 float loc_b[3], rot_b[3][3], size_b[3];
1318 float loc_r[3], rot_r[3][3], size_r[3];
1425 bool compare_m4m4(
const float mat1[4][4],
const float mat2[4][4],
float limit)
1614 if (len_sq_v1 > 0.0f) {
1624 float norm_v2[3], norm_v3[3], tmp[3];
1627 float cos_angle =
dot_v3v3(norm_v2, norm_v3);
1628 float abs_cos_angle =
fabsf(cos_angle);
1631 if (abs_cos_angle > 1e-4f && abs_cos_angle < 1.0f - FLT_EPSILON) {
1713 enum {
X = 1 << 0,
Y = 1 << 1,
Z = 1 << 2 };
1715 for (
int i = 0; i < 3; i++) {
1721 if (
ELEM(flag, 0,
X |
Y |
Z)) {
1757 for (
int i = 0; i < 3; i++) {
1758 if (flag & (1 << i)) {
1760 mat[i][i] = unit_length;
1783 for (i = 0; i < 3; i++) {
1784 for (j = 0; j < i; j++) {
1798 for (i = 0; i < 4; i++) {
1799 for (j = 0; j < i; j++) {
1814 for (i = 0; i < 3; i++) {
1831 for (i = 0; i < 4; i++) {
1845 const float eps = 1e-7f;
1847 float l1, l2, l3, l4, l5, l6;
1877 for (i = 0; i < 2; i++) {
1885 for (i = 0; i < 2; i++) {
1893 for (i = 0; i < 2; i++) {
1900 for (i = 0; i < 2; i++) {
1908 for (i = 0; i < 3; i++) {
1915 for (i = 0; i < 3; i++) {
1923 for (i = 0; i < 3; i++) {
1930 for (i = 0; i < 3; i++) {
1938 for (i = 0; i < 3; i++) {
1940 if (r_scale[i] != 0.0f) {
1941 R[i][3] /= r_scale[i];
1948 for (i = 0; i < 3; i++) {
1959 for (i = 0; i < 3; i++) {
1961 rmat[i][3] = (r_scale[i] != 0.0f) ? (mat[i][3] / r_scale[i]) : mat[i][3];
1968 for (i = 0; i < 3; i++) {
1970 rmat[i][3] = (
len != 0.0f) ? (mat[i][3] /
len) : mat[i][3];
1987 R[0][0] =
M[1][1] *
M[2][2] -
M[1][2] *
M[2][1];
1988 R[0][1] = -
M[0][1] *
M[2][2] +
M[0][2] *
M[2][1];
1989 R[0][2] =
M[0][1] *
M[1][2] -
M[0][2] *
M[1][1];
1991 R[1][0] = -
M[1][0] *
M[2][2] +
M[1][2] *
M[2][0];
1992 R[1][1] =
M[0][0] *
M[2][2] -
M[0][2] *
M[2][0];
1993 R[1][2] = -
M[0][0] *
M[1][2] +
M[0][2] *
M[1][0];
1995 R[2][0] =
M[1][0] *
M[2][1] -
M[1][1] *
M[2][0];
1996 R[2][1] = -
M[0][0] *
M[2][1] +
M[0][1] *
M[2][0];
1997 R[2][2] =
M[0][0] *
M[1][1] -
M[0][1] *
M[1][0];
2002 float a1, a2, a3, a4, b1, b2, b3, b4;
2003 float c1, c2, c3, c4, d1, d2, d3, d4;
2049 return a * d -
b *
c;
2053 float a1,
float a2,
float a3,
float b1,
float b2,
float b3,
float c1,
float c2,
float c3)
2066 float a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, c3, c4, d1, d2, d3, d4;
2161 if (volume != 0.0f) {
2269 #ifndef MATH_STANDALONE
2276 float W[3][3], S[3][3],
V[3][3], Vt[3][3];
2291 R[0][0] =
R[1][1] =
R[2][2] = scale;
2292 R[0][1] =
R[0][2] = 0.0;
2293 R[1][0] =
R[1][2] = 0.0;
2294 R[2][0] =
R[2][1] = 0.0;
2299 R[0][0] =
R[1][1] =
R[2][2] = scale;
2301 R[0][1] =
R[0][2] =
R[0][3] = 0.0;
2302 R[1][0] =
R[1][2] =
R[1][3] = 0.0;
2303 R[2][0] =
R[2][1] =
R[2][3] = 0.0;
2304 R[3][0] =
R[3][1] =
R[3][2] = 0.0;
2311 R[2][2] =
R[3][3] = 1.0;
2312 R[0][1] =
R[0][2] =
R[0][3] = 0.0;
2313 R[1][0] =
R[1][2] =
R[1][3] = 0.0;
2314 R[2][0] =
R[2][1] =
R[2][3] = 0.0;
2315 R[3][0] =
R[3][1] =
R[3][2] = 0.0;
2320 mat[3][0] += (Tx * mat[0][0] + Ty * mat[1][0] + Tz * mat[2][0]);
2321 mat[3][1] += (Tx * mat[0][1] + Ty * mat[1][1] + Tz * mat[2][1]);
2322 mat[3][2] += (Tx * mat[0][2] + Ty * mat[1][2] + Tz * mat[2][2]);
2335 float temp = angle_cos * mat[1][
col] + angle_sin * mat[2][
col];
2336 mat[2][
col] = -angle_sin * mat[1][
col] + angle_cos * mat[2][
col];
2343 float temp = angle_cos * mat[0][
col] - angle_sin * mat[2][
col];
2344 mat[2][
col] = angle_sin * mat[0][
col] + angle_cos * mat[2][
col];
2351 float temp = angle_cos * mat[0][
col] + angle_sin * mat[1][
col];
2352 mat[1][
col] = -angle_sin * mat[0][
col] + angle_cos * mat[1][
col];
2384 const float dst[3][3],
2385 const float src[3][3],
2386 const float srcweight)
2388 float srot[3][3], drot[3][3];
2389 float squat[4], dquat[4], fquat[4];
2390 float sscale[3], dscale[3], fsize[3];
2391 float rmat[3][3], smat[3][3];
2410 const float dst[4][4],
2411 const float src[4][4],
2412 const float srcweight)
2414 float sloc[3], dloc[3], floc[3];
2415 float srot[3][3], drot[3][3];
2416 float squat[4], dquat[4], fquat[4];
2417 float sscale[3], dscale[3], fsize[3];
2435 #ifndef MATH_STANDALONE
2441 float U_A[3][3], U_B[3][3],
U[3][3];
2442 float quat_A[4], quat_B[4], quat[4];
2445 float P_A[3][3], P_B[3][3],
P[3][3];
2473 for (i = 0; i < 3; i++) {
2483 float A3[3][3],
B3[3][3], R3[3][3];
2486 float loc_A[3], loc_B[3], loc[3];
2506 return (
dot_v3v3(vec, mat[2]) < 0.0f);
2513 return (
dot_v3v3(vec, mat[2]) < 0.0f);
2539 const float rot[3][3],
2540 const float size[3])
2550 const float size[3])
2552 float rmat[3][3], smat[3][3], tmat[3][3];
2574 const float size[3],
2575 const short rotOrder)
2577 float rmat[3][3], smat[3][3], tmat[3][3];
2598 const float quat[4],
2599 const float size[3])
2601 float rmat[3][3], smat[3][3], tmat[3][3];
2621 float R[4][4],
const float loc[3],
const float axis[3],
const float angle,
const float size[3])
2632 printf(
"%s\n",
str);
2633 printf(
"%f %f %f\n", m[0][0], m[1][0], m[2][0]);
2634 printf(
"%f %f %f\n", m[0][1], m[1][1], m[2][1]);
2635 printf(
"%f %f %f\n", m[0][2], m[1][2], m[2][2]);
2641 printf(
"%s\n",
str);
2642 printf(
"%f %f %f %f\n", m[0][0], m[1][0], m[2][0], m[3][0]);
2643 printf(
"%f %f %f %f\n", m[0][1], m[1][1], m[2][1], m[3][1]);
2644 printf(
"%f %f %f %f\n", m[0][2], m[1][2], m[2][2], m[3][2]);
2645 printf(
"%f %f %f %f\n", m[0][3], m[1][3], m[2][3], m[3][3]);
2649 void svd_m4(
float U[4][4],
float s[4],
float V[4][4],
float A_[4][4])
2655 float work1[4], work2[4];
2661 float *work = work1;
2665 int i = 0, j = 0, k = 0, p, pp, iter;
2670 int nct =
min_ii(m - 1, n);
2677 for (k = 0; k <
max_ii(nct, nrt); k++) {
2684 for (i = k; i < m; i++) {
2689 if (
A[k][k] < 0.0f) {
2692 invsk = 1.0f / s[k];
2693 for (i = k; i < m; i++) {
2700 for (j = k + 1; j < n; j++) {
2701 if ((k < nct) && (s[k] != 0.0f)) {
2706 for (i = k; i < m; i++) {
2707 t +=
A[i][k] *
A[i][j];
2710 for (i = k; i < m; i++) {
2711 A[i][j] +=
t *
A[i][k];
2725 for (i = k; i < m; i++) {
2735 for (i = k + 1; i < n; i++) {
2740 if (
e[k + 1] < 0.0f) {
2743 invek = 1.0f /
e[k];
2744 for (i = k + 1; i < n; i++) {
2750 if ((k + 1 < m) & (
e[k] != 0.0f)) {
2755 for (i = k + 1; i < m; i++) {
2758 for (j = k + 1; j < n; j++) {
2759 for (i = k + 1; i < m; i++) {
2760 work[i] +=
e[j] *
A[i][j];
2763 invek1 = 1.0f /
e[k + 1];
2764 for (j = k + 1; j < n; j++) {
2765 float t = -
e[j] * invek1;
2766 for (i = k + 1; i < m; i++) {
2767 A[i][j] +=
t * work[i];
2775 for (i = k + 1; i < n; i++) {
2785 s[nct] =
A[nct][nct];
2791 e[nrt] =
A[nrt][p - 1];
2797 for (j = nct; j < nu; j++) {
2798 for (i = 0; i < m; i++) {
2803 for (k = nct - 1; k >= 0; k--) {
2805 for (j = k + 1; j < nu; j++) {
2807 for (i = k; i < m; i++) {
2808 t +=
U[i][k] *
U[i][j];
2811 for (i = k; i < m; i++) {
2812 U[i][j] +=
t *
U[i][k];
2815 for (i = k; i < m; i++) {
2818 U[k][k] = 1.0f +
U[k][k];
2819 for (i = 0; i < k - 1; i++) {
2824 for (i = 0; i < m; i++) {
2833 for (k = n - 1; k >= 0; k--) {
2834 if ((k < nrt) & (
e[k] != 0.0f)) {
2835 for (j = k + 1; j < nu; j++) {
2837 for (i = k + 1; i < n; i++) {
2838 t +=
V[i][k] *
V[i][j];
2840 t = -
t /
V[k + 1][k];
2841 for (i = k + 1; i < n; i++) {
2842 V[i][j] +=
t *
V[i][k];
2846 for (i = 0; i < n; i++) {
2876 for (k = p - 2; k >= -1; k--) {
2890 for (ks = p - 1; ks >= k; ks--) {
2895 t = (ks != p ?
fabsf(
e[ks]) : 0.0f) + (ks != k + 1 ?
fabsf(
e[ks - 1]) : 0.0f);
2904 else if (ks == p - 1) {
2923 for (j = p - 2; j >= k; j--) {
2925 float invt = 1.0f /
t;
2926 float cs = s[j] * invt;
2927 float sn = f * invt;
2931 e[j - 1] = cs *
e[j - 1];
2934 for (i = 0; i < n; i++) {
2935 t = cs *
V[i][j] + sn *
V[i][p - 1];
2936 V[i][p - 1] = -sn *
V[i][j] + cs *
V[i][p - 1];
2948 for (j = k; j < p; j++) {
2950 float invt = 1.0f /
t;
2951 float cs = s[j] * invt;
2952 float sn = f * invt;
2957 for (i = 0; i < m; i++) {
2958 t = cs *
U[i][j] + sn *
U[i][k - 1];
2959 U[i][k - 1] = -sn *
U[i][j] + cs *
U[i][k - 1];
2975 float invscale = 1.0f / scale;
2976 float sp = s[p - 1] * invscale;
2977 float spm1 = s[p - 2] * invscale;
2978 float epm1 =
e[p - 2] * invscale;
2979 float sk = s[k] * invscale;
2980 float ek =
e[k] * invscale;
2981 float b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) * 0.5f;
2982 float c = (sp * epm1) * (sp * epm1);
2985 if ((
b != 0.0f) || (
c != 0.0f)) {
2990 shift =
c / (
b + shift);
2992 f = (sk + sp) * (sk - sp) + shift;
2997 for (j = k; j < p - 1; j++) {
3000 float cs = (
t == 0.0f) ? 0.0f : f /
t;
3001 float sn = (
t == 0.0f) ? 0.0f :
g /
t;
3005 f = cs * s[j] + sn *
e[j];
3006 e[j] = cs *
e[j] - sn * s[j];
3008 s[j + 1] = cs * s[j + 1];
3010 for (i = 0; i < n; i++) {
3011 t = cs *
V[i][j] + sn *
V[i][j + 1];
3012 V[i][j + 1] = -sn *
V[i][j] + cs *
V[i][j + 1];
3018 cs = (
t == 0.0f) ? 0.0f : f /
t;
3019 sn = (
t == 0.0f) ? 0.0f :
g /
t;
3021 f = cs *
e[j] + sn * s[j + 1];
3022 s[j + 1] = -sn *
e[j] + cs * s[j + 1];
3024 e[j + 1] = cs *
e[j + 1];
3026 for (i = 0; i < m; i++) {
3027 t = cs *
U[i][j] + sn *
U[i][j + 1];
3028 U[i][j + 1] = -sn *
U[i][j] + cs *
U[i][j + 1];
3044 s[k] = (s[k] < 0.0f ? -s[k] : 0.0f);
3046 for (i = 0; i <= pp; i++) {
3055 if (s[k] >= s[k + 1]) {
3062 for (i = 0; i < n; i++) {
3064 V[i][k + 1] =
V[i][k];
3069 for (i = 0; i < m; i++) {
3071 U[i][k + 1] =
U[i][k];
3089 float A[4][4],
V[4][4], W[4], Wm[4][4],
U[4][4];
3098 for (i = 0; i < 4; i++) {
3099 Wm[i][i] = (W[i] <
epsilon) ? 0.0f : 1.0f / W[i];
3111 float tmp[4][4], tmpinv[4][4];
3127 const bool axis_x_degenerate =
len_squared_v3(mat[0]) < FLT_EPSILON;
3128 const bool axis_y_degenerate =
len_squared_v3(mat[1]) < FLT_EPSILON;
3129 const bool axis_z_degenerate =
len_squared_v3(mat[2]) < FLT_EPSILON;
3132 if (axis_x_degenerate && !axis_y_degenerate && !axis_z_degenerate) {
3139 if (!axis_x_degenerate && axis_y_degenerate && !axis_z_degenerate) {
3146 if (!axis_x_degenerate && !axis_y_degenerate && axis_z_degenerate) {
3163 Atemp[0][0] += 1e-8f;
3164 Atemp[1][1] += 1e-8f;
3165 Atemp[2][2] += 1e-8f;
3213 const float local[4][4],
3214 const float target[4][4])
3216 float itarget[4][4];
3223 const float local[4][4],
3224 const float target[4][4])
typedef float(TangentPoint)[2]
#define BLI_assert_unreachable()
MINLINE float max_fff(float a, float b, float c)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
#define mul_m4_series(...)
#define mul_m3_series(...)
void eulO_to_mat3(float mat[3][3], const float eul[3], short order)
void interp_qt_qtqt(float q[4], const float a[4], const float b[4], float t)
void eul_to_mat3(float mat[3][3], const float eul[3])
void axis_angle_to_quat(float r[4], const float axis[3], float angle)
void mat3_to_quat(float q[4], const float mat[3][3])
void quat_to_mat3(float mat[3][3], const float q[4])
void mat3_normalized_to_quat(float q[4], const float mat[3][3])
void BLI_svd_m3(const float m3[3][3], float r_U[3][3], float r_S[3], float r_V[3][3])
Compute the SVD (Singular Values Decomposition) of given 3D matrix (m3 = USV*).
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE float len_squared_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE bool equals_v4v4(const float a[4], const float b[4]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float normalize_v3(float r[3])
MINLINE bool is_zero_v4(const float a[4]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v4v4(const float a[4], const float b[4]) ATTR_WARN_UNUSED_RESULT
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
void ortho_v3_v3(float out[3], const float v[3])
MINLINE void negate_v3(float r[3])
MINLINE void zero_v4(float r[4])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE float normalize_v3_length(float r[3], float unit_scale)
MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3]) ATTR_WARN_UNUSED_RESULT
MINLINE bool equals_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3_db(double r[3], const double a[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE float normalize_v2(float r[2])
MINLINE bool compare_v4v4(const float a[4], const float b[4], float limit) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v2_v2(float r[2], const float a[2])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
typedef double(DMatrix)[4][4]
_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 z
_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 y
_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 const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between and object coordinate space Combine Create a color from its and value channels Color Retrieve a color or the default fallback if none is specified Separate Split a vector into its X
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between and object coordinate space Combine Create a color from its and value channels Color Retrieve a color or the default fallback if none is specified Separate Split a vector into its Y
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
btMatrix3x3 inverse() const
Return the inverse of the matrix.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
static T sum(const btAlignedObjectArray< T > &items)
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
SyclQueue void void * src
void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3])
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])
void scale_m4_v2(float R[4][4], const float scale[2])
void mul_v2_m4v3(float r[2], const float mat[4][4], const float vec[3])
void orthogonalize_m3_stable(float R[3][3], int axis, bool normalize)
float mat3_to_scale(const float mat[3][3])
float mat4_to_volume_scale(const float mat[4][4])
bool is_negative_m3(const float mat[3][3])
void mul_v2_project_m4_v3(float r[2], const float mat[4][4], const float vec[3])
bool is_orthogonal_m3(const float m[3][3])
void sub_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void unit_m2(float m[2][2])
void BLI_space_transform_apply_normal(const SpaceTransform *data, float no[3])
void mul_v4_m4v3_db(double r[4], const double mat[4][4], const double vec[3])
void normalize_m4_m4(float rmat[4][4], const float mat[4][4])
void negate_m3(float R[3][3])
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])
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])
float mat4_to_scale(const float mat[4][4])
bool is_zero_m3(const float mat[3][3])
void orthogonalize_m4(float R[4][4], int axis)
void swap_m3m3(float m1[3][3], float m2[3][3])
void mul_v3_project_m4_v3(float r[3], const float mat[4][4], const float vec[3])
void mul_m3_v3(const float M[3][3], float r[3])
void zero_m4(float m[4][4])
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])
void mul_m4_fl(float R[4][4], float f)
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])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
bool invert_m3(float m[3][3])
void mul_mat3_m4_fl(float R[4][4], float f)
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])
void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
void mul_m3_m3_pre(float R[3][3], const float A[3][3])
void normalize_m2_m2_ex(float R[2][2], const float M[2][2], float r_scale[2])
void size_to_mat3(float R[3][3], const float size[3])
void normalize_m2(float R[2][2])
void sub_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void mul_v3_m3v3_db(double r[3], const double M[3][3], const double a[3])
void BLI_space_transform_invert_normal(const SpaceTransform *data, float no[3])
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void mat4_decompose(float loc[3], float quat[4], float size[3], const float wmat[4][4])
void madd_m4_m4m4fl(float R[4][4], const float A[4][4], const float B[4][4], const float f)
bool is_orthogonal_m4(const float m[4][4])
void adjoint_m3_m3(float R[3][3], const float M[3][3])
void unit_m3(float m[3][3])
void mul_m3_v2(const float m[3][3], float r[2])
void mat3_to_rot_size(float rot[3][3], float size[3], const float mat3[3][3])
void add_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void scale_m3_fl(float R[3][3], float scale)
void copy_m3_m4(float m1[3][3], const float m2[4][4])
float determinant_m4_mat3_array(const float m[4][4])
void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3])
void mul_v3_m4v3_db(double r[3], const double mat[4][4], const double vec[3])
void transpose_m4_m4(float R[4][4], const float M[4][4])
void mul_m4_m4_pre(float R[4][4], const float A[4][4])
void mul_m4_m4m4_db_uniq(double R[4][4], const double A[4][4], const double B[4][4])
bool invert_m3_m3(float m1[3][3], const float m2[3][3])
float mat4_to_xy_scale(const float M[4][4])
void mul_m3_fl(float R[3][3], float f)
void mul_v2_m3v3(float r[2], const float M[3][3], const float a[3])
void zero_m2(float m[2][2])
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])
void invert_m4_m4_safe_ortho(float Ainv[4][4], const float A[4][4])
void orthogonalize_m3(float R[3][3], int axis)
void copy_m3_m3d(float m1[3][3], const double m2[3][3])
void mul_m3_m3_post(float R[3][3], const float B[3][3])
void add_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void copy_m4_m3(float m1[4][4], const float m2[3][3])
bool is_uniform_scaled_m3(const float m[3][3])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
void mul_m4_v4d(const float mat[4][4], double r[4])
void loc_rot_size_to_mat4(float R[4][4], const float loc[3], const float rot[3][3], const float size[3])
void mat4_to_rot(float rot[3][3], const float wmat[4][4])
void mat4_to_size_fix_shear(float size[3], const float M[4][4])
bool is_uniform_scaled_m4(const float m[4][4])
void invert_m3_m3_safe_ortho(float Ainv[3][3], const float A[3][3])
void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4])
void svd_m4(float U[4][4], float s[4], float V[4][4], float A_[4][4])
bool is_orthonormal_m3(const float m[3][3])
void zero_m3(float m[3][3])
void translate_m4(float mat[4][4], float Tx, float Ty, float Tz)
void loc_axisangle_size_to_mat4(float R[4][4], const float loc[3], const float axis[3], const float angle, const float size[3])
bool has_zero_axis_m4(const float matrix[4][4])
void transform_pivot_set_m4(float mat[4][4], const float pivot[3])
void mul_m3_v3_double(const float M[3][3], double r[3])
float determinant_m2(float a, float b, float c, float d)
bool equals_m3m3(const float mat1[3][3], const float mat2[3][3])
void rescale_m4(float mat[4][4], const float scale[3])
void mul_m4_m4m4_uniq(float R[4][4], const float A[4][4], const float B[4][4])
void size_to_mat4(float R[4][4], const float size[3])
void mul_project_m4_v3(const float mat[4][4], float vec[3])
void unit_m4_db(double m[4][4])
void copy_m4d_m4(double m1[4][4], const float m2[4][4])
void mul_v4d_m4v4d(double r[4], const float mat[4][4], const double v[4])
void mul_m4_v3(const float M[4][4], float r[3])
void orthogonalize_m4_stable(float R[4][4], int axis, bool normalize)
void scale_m4_fl(float R[4][4], float scale)
void normalize_m4(float R[4][4])
void adjoint_m4_m4(float R[4][4], const float M[4][4])
bool equals_m4m4(const float mat1[4][4], const float mat2[4][4])
void mul_m4_m4m4_split_channels(float R[4][4], const float A[4][4], const float B[4][4])
float determinant_m4(const float m[4][4])
void swap_m4m4(float m1[4][4], float m2[4][4])
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])
void transpose_m3_m4(float R[3][3], const float M[4][4])
static bool orthogonalize_m3_zero_axes_impl(float *mat[3], const float unit_length)
double determinant_m3_array_db(const double m[3][3])
void copy_m2_m2(float m1[2][2], const float m2[2][2])
void mat3_polar_decompose(const float mat3[3][3], float r_U[3][3], float r_P[3][3])
void mul_v2_m2v2(float r[2], const float mat[2][2], const float vec[2])
void normalize_m3(float R[3][3])
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])
void normalize_m4_ex(float R[4][4], float r_scale[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void normalize_m4_m4_ex(float rmat[4][4], const float mat[4][4], float r_scale[3])
void interp_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4], const float t)
void mat4_to_loc_quat(float loc[3], float quat[4], const float wmat[4][4])
void normalize_m3_ex(float R[3][3], float r_scale[3])
void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3])
void invert_m4_m4_safe(float Ainv[4][4], const float A[4][4])
void mul_m3_m3m4(float R[3][3], const float A[3][3], const float B[4][4])
bool orthogonalize_m4_zero_axes(float m[4][4], const float unit_length)
void mul_m4db_m4db_m4fl_uniq(double R[4][4], const double A[4][4], const float B[4][4])
bool invert_m2_m2(float m1[2][2], const float m2[2][2])
float mat3_to_size_max_axis(const float M[3][3])
void normalize_m3_m3_ex(float R[3][3], const float M[3][3], float r_scale[3])
bool is_orthonormal_m4(const float m[4][4])
void mul_m3_v3_db(const double M[3][3], double r[3])
float mat4_to_size_max_axis(const float M[4][4])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
float determinant_m3_array(const float m[3][3])
void copy_m4_m2(float m1[4][4], const float m2[2][2])
void shuffle_m4(float R[4][4], const int index[4])
bool is_negative_m4(const float mat[4][4])
void blend_m3_m3m3(float out[3][3], const float dst[3][3], const float src[3][3], const float srcweight)
void negate_mat3_m4(float R[4][4])
void normalize_m2_m2(float R[2][2], const float M[2][2])
void copy_m3_m2(float m1[3][3], const float m2[2][2])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
void mul_v2_m3v2(float r[2], const float m[3][3], const float v[2])
void normalize_m2_ex(float R[2][2], float r_scale[2])
static void orthogonalize_stable(float v1[3], float v2[3], float v3[3], bool normalize)
void normalize_m3_m3(float R[3][3], const float M[3][3])
void mul_m4_m4m4_aligned_scale(float R[4][4], const float A[4][4], const float B[4][4])
void print_m3(const char *str, const float m[3][3])
void mul_m3_m3m3_uniq(float R[3][3], const float A[3][3], const float B[3][3])
void zero_axis_bias_m4(float mat[4][4])
void mul_m4_v4(const float mat[4][4], float r[4])
void loc_quat_size_to_mat4(float R[4][4], const float loc[3], const float quat[4], const float size[3])
void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3])
void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3])
void mat4_to_size(float size[3], const float M[4][4])
bool invert_m3_m3_ex(float m1[3][3], const float m2[3][3], const float epsilon)
void interp_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3], const float t)
void transpose_m3(float R[3][3])
float determinant_m3(float a1, float a2, float a3, float b1, float b2, float b3, float c1, float c2, float c3)
bool invert_m4(float m[4][4])
void mul_m2_v2(const float mat[2][2], float vec[2])
void blend_m4_m4m4(float out[4][4], const float dst[4][4], const float src[4][4], const float srcweight)
void transpose_m3_m3(float R[3][3], const float M[3][3])
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])
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])
void pseudoinverse_m4_m4(float Ainv[4][4], const float A_[4][4], float epsilon)
void BLI_space_transform_global_from_matrices(SpaceTransform *data, const float local[4][4], const float target[4][4])
void negate_m4(float R[4][4])
void mul_transposed_m3_v3(const float M[3][3], float r[3])
bool compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit)
void copy_m3d_m3(double m1[3][3], const float m2[3][3])
void BLI_space_transform_apply(const SpaceTransform *data, float co[3])
void mul_v3_mat3_m4v3_db(double r[3], const double mat[4][4], const double vec[3])
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void print_m4(const char *str, const float m[4][4])
bool is_zero_m4(const float mat[4][4])
void mat3_to_size(float size[3], const float M[3][3])
void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4])
void _va_mul_m4_series_3(float r[4][4], const float m1[4][4], const float m2[4][4])
void transpose_m4(float R[4][4])
void mul_m4_m4_post(float R[4][4], const float B[4][4])
void _va_mul_m3_series_3(float r[3][3], const float m1[3][3], const float m2[3][3])
void mul_v3_mat3_m4v3(float r[3], const float mat[4][4], const float vec[3])
void pseudoinverse_m3_m3(float Ainv[3][3], const float A[3][3], float epsilon)
bool invert_m3_ex(float m[3][3], const float epsilon)
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])
void loc_eulO_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3], const short rotOrder)
void madd_m3_m3m3fl(float R[3][3], const float A[3][3], const float B[3][3], const float f)
void mul_m3_m4m4(float R[3][3], const float A[4][4], const float B[4][4])
void copy_m4_m4_db(double m1[4][4], const double m2[4][4])
void BLI_space_transform_from_matrices(SpaceTransform *data, const float local[4][4], const float target[4][4])
bool invert_m4_m4_fallback(float inverse[4][4], const float mat[4][4])
bool orthogonalize_m3_zero_axes(float m[3][3], const float unit_length)
void BLI_space_transform_invert(const SpaceTransform *data, float co[3])
void mul_m3_m4m3(float R[3][3], const float A[4][4], const float B[3][3])
float mat3_to_volume_scale(const float mat[3][3])
void rotate_m4(float mat[4][4], const char axis, const float angle)
void adjoint_m2_m2(float R[2][2], const float M[2][2])
void unit_m4(float m[4][4])
bool EIG_invert_m4_m4(float inverse[4][4], const float matrix[4][4])
static double B1(double u)
static double B0(double u)
static double B3(double u)
static double B2(double u)
vec_base< T, Size > normalize(const vec_base< T, Size > &v)
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static const pxr::TfToken g("g", pxr::TfToken::Immortal)
CCL_NAMESPACE_BEGIN struct Window V