Skip to content

Commit 56e3223

Browse files
committed
fix quaternions to flat arrays
1 parent 1640fa5 commit 56e3223

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

tdl/quaternions.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -435,16 +435,19 @@ tdl.quaternions.quaternionToRotation = function(q) {
435435
var d = qWqW + qXqX + qYqY + qZqZ;
436436

437437
return [
438-
[(qWqW + qXqX - qYqY - qZqZ) / d,
438+
(qWqW + qXqX - qYqY - qZqZ) / d,
439439
2 * (qWqZ + qXqY) / d,
440-
2 * (qXqZ - qWqY) / d, 0],
441-
[2 * (qXqY - qWqZ) / d,
440+
2 * (qXqZ - qWqY) / d, 0,
441+
442+
2 * (qXqY - qWqZ) / d,
442443
(qWqW - qXqX + qYqY - qZqZ) / d,
443-
2 * (qWqX + qYqZ) / d, 0],
444-
[2 * (qWqY + qXqZ) / d,
444+
2 * (qWqX + qYqZ) / d, 0,
445+
446+
2 * (qWqY + qXqZ) / d,
445447
2 * (qYqZ - qWqX) / d,
446-
(qWqW - qXqX - qYqY + qZqZ) / d, 0],
447-
[0, 0, 0, 1]];
448+
(qWqW - qXqX - qYqY + qZqZ) / d, 0,
449+
450+
0, 0, 0, 1];
448451
};
449452

450453
/**
@@ -461,11 +464,11 @@ tdl.quaternions.rotationToQuaternion = function(m) {
461464

462465
// Choose u, v, and w such that u is the index of the biggest diagonal entry
463466
// of m, and u v w is an even permutation of 0 1 and 2.
464-
if (m[0][0] > m[1][1] && m[0][0] > m[2][2]) {
467+
if (m[0*4+0] > m[1*4+1] && m[0*4+0] > m[2*4+2]) {
465468
u = 0;
466469
v = 1;
467470
w = 2;
468-
} else if (m[1][1] > m[0][0] && m[1][1] > m[2][2]) {
471+
} else if (m[1*4+1] > m[0*4+0] && m[1*4+1] > m[2*4+2]) {
469472
u = 1;
470473
v = 2;
471474
w = 0;
@@ -475,12 +478,12 @@ tdl.quaternions.rotationToQuaternion = function(m) {
475478
w = 1;
476479
}
477480

478-
var r = Math.sqrt(1 + m[u][u] - m[v][v] - m[w][w]);
481+
var r = Math.sqrt(1 + m[u*4+u] - m[v*4+v] - m[w*4+w]);
479482
var q = [];
480483
q[u] = 0.5 * r;
481-
q[v] = 0.5 * (m[v][u] + m[u][v]) / r;
482-
q[w] = 0.5 * (m[u][w] + m[w][u]) / r;
483-
q[3] = 0.5 * (m[v][w] - m[w][v]) / r;
484+
q[v] = 0.5 * (m[v*4+u] + m[u*4+v]) / r;
485+
q[w] = 0.5 * (m[u*4+w] + m[w*4+u]) / r;
486+
q[3] = 0.5 * (m[v*4+w] - m[w*4+v]) / r;
484487

485488
return q;
486489
};

0 commit comments

Comments
 (0)