@flighthq/geometry 0.3.0 → 0.3.1-next.1041.35b950c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/aabb.d.ts +1 -0
  2. package/dist/aabb.d.ts.map +1 -1
  3. package/dist/aabb.js +58 -38
  4. package/dist/aabb.js.map +1 -1
  5. package/dist/boundingSphere.d.ts.map +1 -1
  6. package/dist/boundingSphere.js +3 -2
  7. package/dist/boundingSphere.js.map +1 -1
  8. package/dist/capsule.d.ts +6 -5
  9. package/dist/capsule.d.ts.map +1 -1
  10. package/dist/capsule.js +38 -15
  11. package/dist/capsule.js.map +1 -1
  12. package/dist/contract.d.ts +1 -0
  13. package/dist/contract.d.ts.map +1 -1
  14. package/dist/contract.js +1 -0
  15. package/dist/contract.js.map +1 -1
  16. package/dist/enableGeometryPoolGuards.d.ts +4 -0
  17. package/dist/enableGeometryPoolGuards.d.ts.map +1 -0
  18. package/dist/enableGeometryPoolGuards.js +32 -0
  19. package/dist/enableGeometryPoolGuards.js.map +1 -0
  20. package/dist/frustum.d.ts +2 -1
  21. package/dist/frustum.d.ts.map +1 -1
  22. package/dist/frustum.js +4 -1
  23. package/dist/frustum.js.map +1 -1
  24. package/dist/geometryPoolGuards.d.ts +6 -0
  25. package/dist/geometryPoolGuards.d.ts.map +1 -0
  26. package/dist/geometryPoolGuards.js +7 -0
  27. package/dist/geometryPoolGuards.js.map +1 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/matrix.d.ts +12 -9
  33. package/dist/matrix.d.ts.map +1 -1
  34. package/dist/matrix.js +103 -106
  35. package/dist/matrix.js.map +1 -1
  36. package/dist/matrix3.d.ts +17 -2
  37. package/dist/matrix3.d.ts.map +1 -1
  38. package/dist/matrix3.js +88 -44
  39. package/dist/matrix3.js.map +1 -1
  40. package/dist/matrix3Pool.d.ts.map +1 -1
  41. package/dist/matrix3Pool.js +6 -0
  42. package/dist/matrix3Pool.js.map +1 -1
  43. package/dist/matrix4.d.ts +23 -10
  44. package/dist/matrix4.d.ts.map +1 -1
  45. package/dist/matrix4.js +74 -53
  46. package/dist/matrix4.js.map +1 -1
  47. package/dist/matrix4Pool.d.ts.map +1 -1
  48. package/dist/matrix4Pool.js +6 -0
  49. package/dist/matrix4Pool.js.map +1 -1
  50. package/dist/matrixPool.d.ts.map +1 -1
  51. package/dist/matrixPool.js +6 -0
  52. package/dist/matrixPool.js.map +1 -1
  53. package/dist/obb.d.ts +4 -2
  54. package/dist/obb.d.ts.map +1 -1
  55. package/dist/obb.js +164 -88
  56. package/dist/obb.js.map +1 -1
  57. package/dist/quaternion.d.ts +7 -4
  58. package/dist/quaternion.d.ts.map +1 -1
  59. package/dist/quaternion.js +40 -25
  60. package/dist/quaternion.js.map +1 -1
  61. package/dist/quaternionPool.d.ts.map +1 -1
  62. package/dist/quaternionPool.js +6 -0
  63. package/dist/quaternionPool.js.map +1 -1
  64. package/dist/ray3d.d.ts +5 -4
  65. package/dist/ray3d.d.ts.map +1 -1
  66. package/dist/ray3d.js +23 -8
  67. package/dist/ray3d.js.map +1 -1
  68. package/dist/rectangle.d.ts.map +1 -1
  69. package/dist/rectangle.js +66 -43
  70. package/dist/rectangle.js.map +1 -1
  71. package/dist/rectanglePool.d.ts.map +1 -1
  72. package/dist/rectanglePool.js +6 -0
  73. package/dist/rectanglePool.js.map +1 -1
  74. package/dist/transform2d.d.ts.map +1 -1
  75. package/dist/transform2d.js +5 -2
  76. package/dist/transform2d.js.map +1 -1
  77. package/dist/typedarray.js +3 -6
  78. package/dist/typedarray.js.map +1 -1
  79. package/dist/vector2.d.ts.map +1 -1
  80. package/dist/vector2.js +44 -26
  81. package/dist/vector2.js.map +1 -1
  82. package/dist/vector2Pool.d.ts.map +1 -1
  83. package/dist/vector2Pool.js +6 -0
  84. package/dist/vector2Pool.js.map +1 -1
  85. package/dist/vector3.d.ts +2 -2
  86. package/dist/vector3.d.ts.map +1 -1
  87. package/dist/vector3.js +55 -37
  88. package/dist/vector3.js.map +1 -1
  89. package/dist/vector3Pool.d.ts.map +1 -1
  90. package/dist/vector3Pool.js +6 -0
  91. package/dist/vector3Pool.js.map +1 -1
  92. package/dist/vector4.d.ts +2 -2
  93. package/dist/vector4.d.ts.map +1 -1
  94. package/dist/vector4.js +66 -48
  95. package/dist/vector4.js.map +1 -1
  96. package/dist/vector4Pool.d.ts.map +1 -1
  97. package/dist/vector4Pool.js +6 -0
  98. package/dist/vector4Pool.js.map +1 -1
  99. package/package.json +4 -3
  100. package/src/aabb.test.ts +18 -0
  101. package/src/boundingSphere.test.ts +39 -0
  102. package/src/capsule.test.ts +158 -0
  103. package/src/enableGeometryPoolGuards.test.ts +121 -0
  104. package/src/frustum.test.ts +38 -0
  105. package/src/geometryPoolGuards.test.ts +16 -0
  106. package/src/matrix.test.ts +52 -6
  107. package/src/matrix3.test.ts +46 -6
  108. package/src/matrix3Pool.test.ts +11 -0
  109. package/src/matrix4.test.ts +553 -135
  110. package/src/matrix4Pool.test.ts +11 -0
  111. package/src/matrixPool.test.ts +11 -0
  112. package/src/obb.test.ts +277 -0
  113. package/src/plane.test.ts +20 -0
  114. package/src/quaternion.test.ts +222 -4
  115. package/src/quaternionPool.test.ts +12 -0
  116. package/src/ray3d.test.ts +204 -0
  117. package/src/rectangle.test.ts +58 -14
  118. package/src/rectanglePool.test.ts +11 -0
  119. package/src/transform2d.test.ts +38 -0
  120. package/src/vector2.test.ts +170 -0
  121. package/src/vector2Pool.test.ts +11 -0
  122. package/src/vector3.test.ts +210 -0
  123. package/src/vector3Pool.test.ts +11 -0
  124. package/src/vector4.test.ts +231 -0
  125. package/src/vector4Pool.test.ts +11 -0
package/dist/obb.js CHANGED
@@ -27,7 +27,9 @@ export function getClosestPointOnObb(out, obb, point) {
27
27
  const cx = obb.centerX, cy = obb.centerY, cz = obb.centerZ;
28
28
  const hx = obb.halfExtentX, hy = obb.halfExtentY, hz = obb.halfExtentZ;
29
29
  const px = point.x, py = point.y, pz = point.z;
30
- const [ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2] = obbLocalAxes(obb);
30
+ const qx = obb.orientationX, qy = obb.orientationY, qz = obb.orientationZ, qw = obb.orientationW;
31
+ const xx = qx * qx, yy = qy * qy, zz = qz * qz, xy = qx * qy, xz = qx * qz, yz = qy * qz, wx = qw * qx, wy = qw * qy, wz = qw * qz;
32
+ const ax0 = 1 - 2 * (yy + zz), ay0 = 2 * (xy + wz), az0 = 2 * (xz - wy), ax1 = 2 * (xy - wz), ay1 = 1 - 2 * (xx + zz), az1 = 2 * (yz + wx), ax2 = 2 * (xz + wy), ay2 = 2 * (yz - wx), az2 = 1 - 2 * (xx + yy);
31
33
  const dx = px - cx, dy = py - cy, dz = pz - cz;
32
34
  const d0 = Math.min(Math.max(dx * ax0 + dy * ay0 + dz * az0, -hx), hx);
33
35
  const d1 = Math.min(Math.max(dx * ax1 + dy * ay1 + dz * az1, -hy), hy);
@@ -41,50 +43,88 @@ export function getClosestPointOnObb(out, obb, point) {
41
43
  * space, then applies the slab method against the axis-aligned half-extent box.
42
44
  *
43
45
  * Returns the entry parameter `t` (>= 0) on hit, or `-1` on miss. A ray starting inside the
44
- * OBB returns `t = 0`.
46
+ * OBB returns `t = 0`. Direction need not be normalized. A direction of zero length is not a
47
+ * ray and always returns `-1`.
45
48
  */
46
49
  export function intersectRay3DObb(ray, obb) {
47
50
  const ox = ray.origin.x - obb.centerX, oy = ray.origin.y - obb.centerY, oz = ray.origin.z - obb.centerZ;
48
51
  const dx = ray.direction.x, dy = ray.direction.y, dz = ray.direction.z;
52
+ if (dx * dx + dy * dy + dz * dz === 0)
53
+ return -1; // zero-length direction
49
54
  const hx = obb.halfExtentX, hy = obb.halfExtentY, hz = obb.halfExtentZ;
50
- const [ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2] = obbLocalAxes(obb);
51
- const origins = [ox * ax0 + oy * ay0 + oz * az0, ox * ax1 + oy * ay1 + oz * az1, ox * ax2 + oy * ay2 + oz * az2];
52
- const dirs = [dx * ax0 + dy * ay0 + dz * az0, dx * ax1 + dy * ay1 + dz * az1, dx * ax2 + dy * ay2 + dz * az2];
53
- const halfExts = [hx, hy, hz];
55
+ const qx = obb.orientationX, qy = obb.orientationY, qz = obb.orientationZ, qw = obb.orientationW;
56
+ const xx = qx * qx, yy = qy * qy, zz = qz * qz, xy = qx * qy, xz = qx * qz, yz = qy * qz, wx = qw * qx, wy = qw * qy, wz = qw * qz;
57
+ const ax0 = 1 - 2 * (yy + zz), ay0 = 2 * (xy + wz), az0 = 2 * (xz - wy), ax1 = 2 * (xy - wz), ay1 = 1 - 2 * (xx + zz), az1 = 2 * (yz + wx), ax2 = 2 * (xz + wy), ay2 = 2 * (yz - wx), az2 = 1 - 2 * (xx + yy);
58
+ const origin0 = ox * ax0 + oy * ay0 + oz * az0, origin1 = ox * ax1 + oy * ay1 + oz * az1, origin2 = ox * ax2 + oy * ay2 + oz * az2;
59
+ const direction0 = dx * ax0 + dy * ay0 + dz * az0, direction1 = dx * ax1 + dy * ay1 + dz * az1, direction2 = dx * ax2 + dy * ay2 + dz * az2;
54
60
  let tMin = 0;
55
61
  let tMax = Number.POSITIVE_INFINITY;
56
- for (let i = 0; i < 3; i++) {
57
- const o = origins[i];
58
- const d = dirs[i];
59
- const h = halfExts[i];
60
- if (Math.abs(d) > 1e-10) {
61
- const invD = 1 / d;
62
- let t1 = (-h - o) * invD;
63
- let t2 = (h - o) * invD;
64
- if (t1 > t2) {
65
- const tmp = t1;
66
- t1 = t2;
67
- t2 = tmp;
68
- }
69
- tMin = Math.max(tMin, t1);
70
- tMax = Math.min(tMax, t2);
71
- if (tMin > tMax)
72
- return -1;
62
+ if (direction0 !== 0) {
63
+ const invD = 1 / direction0;
64
+ let t1 = (-hx - origin0) * invD;
65
+ let t2 = (hx - origin0) * invD;
66
+ if (t1 > t2) {
67
+ const swap = t1;
68
+ t1 = t2;
69
+ t2 = swap;
73
70
  }
74
- else if (o < -h || o > h) {
71
+ tMin = Math.max(tMin, t1);
72
+ tMax = Math.min(tMax, t2);
73
+ if (tMin > tMax)
75
74
  return -1;
75
+ }
76
+ else if (origin0 < -hx || origin0 > hx) {
77
+ return -1;
78
+ }
79
+ if (direction1 !== 0) {
80
+ const invD = 1 / direction1;
81
+ let t1 = (-hy - origin1) * invD;
82
+ let t2 = (hy - origin1) * invD;
83
+ if (t1 > t2) {
84
+ const swap = t1;
85
+ t1 = t2;
86
+ t2 = swap;
76
87
  }
88
+ tMin = Math.max(tMin, t1);
89
+ tMax = Math.min(tMax, t2);
90
+ if (tMin > tMax)
91
+ return -1;
92
+ }
93
+ else if (origin1 < -hy || origin1 > hy) {
94
+ return -1;
95
+ }
96
+ if (direction2 !== 0) {
97
+ const invD = 1 / direction2;
98
+ let t1 = (-hz - origin2) * invD;
99
+ let t2 = (hz - origin2) * invD;
100
+ if (t1 > t2) {
101
+ const swap = t1;
102
+ t1 = t2;
103
+ t2 = swap;
104
+ }
105
+ tMin = Math.max(tMin, t1);
106
+ tMax = Math.min(tMax, t2);
107
+ if (tMin > tMax)
108
+ return -1;
109
+ }
110
+ else if (origin2 < -hz || origin2 > hz) {
111
+ return -1;
77
112
  }
78
113
  return tMin;
79
114
  }
80
115
  /**
81
116
  * Returns whether an oriented bounding box overlaps an axis-aligned bounding box using the
82
- * Separating Axis Theorem with 15 candidate axes.
117
+ * Separating Axis Theorem with 15 candidate axes. An empty AABB (min > max on any axis) does
118
+ * not intersect the OBB.
83
119
  */
84
120
  export function isObbIntersectingAabb(obb, aabb) {
121
+ if (aabb.min.x > aabb.max.x || aabb.min.y > aabb.max.y || aabb.min.z > aabb.max.z)
122
+ return false;
85
123
  const acx = (aabb.min.x + aabb.max.x) * 0.5, acy = (aabb.min.y + aabb.max.y) * 0.5, acz = (aabb.min.z + aabb.max.z) * 0.5;
86
124
  const ahx = (aabb.max.x - aabb.min.x) * 0.5, ahy = (aabb.max.y - aabb.min.y) * 0.5, ahz = (aabb.max.z - aabb.min.z) * 0.5;
87
- const [ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2] = obbLocalAxes(obb);
125
+ const qx = obb.orientationX, qy = obb.orientationY, qz = obb.orientationZ, qw = obb.orientationW;
126
+ const xx = qx * qx, yy = qy * qy, zz = qz * qz, xy = qx * qy, xz = qx * qz, yz = qy * qz, wx = qw * qx, wy = qw * qy, wz = qw * qz;
127
+ const ax0 = 1 - 2 * (yy + zz), ay0 = 2 * (xy + wz), az0 = 2 * (xz - wy), ax1 = 2 * (xy - wz), ay1 = 1 - 2 * (xx + zz), az1 = 2 * (yz + wx), ax2 = 2 * (xz + wy), ay2 = 2 * (yz - wx), az2 = 1 - 2 * (xx + yy);
88
128
  const tx = acx - obb.centerX, ty = acy - obb.centerY, tz = acz - obb.centerZ;
89
129
  return !obbSatSeparated(tx, ty, tz, ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2, obb.halfExtentX, obb.halfExtentY, obb.halfExtentZ, 1, 0, 0, 0, 1, 0, 0, 0, 1, ahx, ahy, ahz);
90
130
  }
@@ -93,8 +133,12 @@ export function isObbIntersectingAabb(obb, aabb) {
93
133
  * 15 candidate axes (3 face normals per box plus 9 edge cross-products).
94
134
  */
95
135
  export function isObbIntersectingObb(a, b) {
96
- const [ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2] = obbLocalAxes(a);
97
- const [bx0, by0, bz0, bx1, by1, bz1, bx2, by2, bz2] = obbLocalAxes(b);
136
+ const aqx = a.orientationX, aqy = a.orientationY, aqz = a.orientationZ, aqw = a.orientationW;
137
+ const axx = aqx * aqx, ayy = aqy * aqy, azz = aqz * aqz, axy = aqx * aqy, axz = aqx * aqz, ayz = aqy * aqz, awx = aqw * aqx, awy = aqw * aqy, awz = aqw * aqz;
138
+ const ax0 = 1 - 2 * (ayy + azz), ay0 = 2 * (axy + awz), az0 = 2 * (axz - awy), ax1 = 2 * (axy - awz), ay1 = 1 - 2 * (axx + azz), az1 = 2 * (ayz + awx), ax2 = 2 * (axz + awy), ay2 = 2 * (ayz - awx), az2 = 1 - 2 * (axx + ayy);
139
+ const bqx = b.orientationX, bqy = b.orientationY, bqz = b.orientationZ, bqw = b.orientationW;
140
+ const bxx = bqx * bqx, byy = bqy * bqy, bzz = bqz * bqz, bxy = bqx * bqy, bxz = bqx * bqz, byz = bqy * bqz, bwx = bqw * bqx, bwy = bqw * bqy, bwz = bqw * bqz;
141
+ const bx0 = 1 - 2 * (byy + bzz), by0 = 2 * (bxy + bwz), bz0 = 2 * (bxz - bwy), bx1 = 2 * (bxy - bwz), by1 = 1 - 2 * (bxx + bzz), bz1 = 2 * (byz + bwx), bx2 = 2 * (bxz + bwy), by2 = 2 * (byz - bwx), bz2 = 1 - 2 * (bxx + byy);
98
142
  const tx = b.centerX - a.centerX, ty = b.centerY - a.centerY, tz = b.centerZ - a.centerZ;
99
143
  return !obbSatSeparated(tx, ty, tz, ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2, a.halfExtentX, a.halfExtentY, a.halfExtentZ, bx0, by0, bz0, bx1, by1, bz1, bx2, by2, bz2, b.halfExtentX, b.halfExtentY, b.halfExtentZ);
100
144
  }
@@ -135,33 +179,35 @@ export function transformObbByMatrix4(out, obb, m) {
135
179
  const r00 = sx > 0 ? _m[0] / sx : 1, r10 = sx > 0 ? _m[1] / sx : 0, r20 = sx > 0 ? _m[2] / sx : 0;
136
180
  const r01 = sy > 0 ? _m[4] / sy : 0, r11 = sy > 0 ? _m[5] / sy : 1, r21 = sy > 0 ? _m[6] / sy : 0;
137
181
  const r02 = sz > 0 ? _m[8] / sz : 0, r12 = sz > 0 ? _m[9] / sz : 0, r22 = sz > 0 ? _m[10] / sz : 1;
138
- // Quaternion from rotation matrix (Shepperd method).
182
+ // Quaternion from rotation matrix (Shepperd method). The antisymmetric pairs follow the same
183
+ // handedness as the local-axis rotation map, whose inverse uses x = (r21 - r12), not (r12 - r21).
184
+ // Flipping either one silently yields the conjugate — a rotation by -angle about the same axis.
139
185
  let mqw, mqx, mqy, mqz;
140
186
  const trace = r00 + r11 + r22;
141
187
  if (trace > 0) {
142
188
  const s = 0.5 / Math.sqrt(trace + 1);
143
189
  mqw = 0.25 / s;
144
- mqx = (r12 - r21) * s;
145
- mqy = (r20 - r02) * s;
146
- mqz = (r01 - r10) * s;
190
+ mqx = (r21 - r12) * s;
191
+ mqy = (r02 - r20) * s;
192
+ mqz = (r10 - r01) * s;
147
193
  }
148
194
  else if (r00 > r11 && r00 > r22) {
149
195
  const s = 2 * Math.sqrt(1 + r00 - r11 - r22);
150
- mqw = (r12 - r21) / s;
196
+ mqw = (r21 - r12) / s;
151
197
  mqx = 0.25 * s;
152
198
  mqy = (r10 + r01) / s;
153
199
  mqz = (r20 + r02) / s;
154
200
  }
155
201
  else if (r11 > r22) {
156
202
  const s = 2 * Math.sqrt(1 + r11 - r00 - r22);
157
- mqw = (r20 - r02) / s;
203
+ mqw = (r02 - r20) / s;
158
204
  mqx = (r10 + r01) / s;
159
205
  mqy = 0.25 * s;
160
206
  mqz = (r21 + r12) / s;
161
207
  }
162
208
  else {
163
209
  const s = 2 * Math.sqrt(1 + r22 - r00 - r11);
164
- mqw = (r01 - r10) / s;
210
+ mqw = (r10 - r01) / s;
165
211
  mqx = (r20 + r02) / s;
166
212
  mqy = (r21 + r12) / s;
167
213
  mqz = 0.25 * s;
@@ -178,32 +224,91 @@ export function transformObbByMatrix4(out, obb, m) {
178
224
  out.orientationZ = mqw * oqz + mqx * oqy - mqy * oqx + mqz * oqw;
179
225
  out.orientationW = mqw * oqw - mqx * oqx - mqy * oqy - mqz * oqz;
180
226
  }
181
- // Returns [axisX.x, axisX.y, axisX.z, axisY.x, axisY.y, axisY.z, axisZ.x, axisZ.y, axisZ.z]
182
- // where each triple is an OBB local axis expressed in world space (column of the rotation matrix).
183
- function obbLocalAxes(obb) {
184
- const qx = obb.orientationX, qy = obb.orientationY, qz = obb.orientationZ, qw = obb.orientationW;
185
- const xx = qx * qx, yy = qy * qy, zz = qz * qz;
186
- const xy = qx * qy, xz = qx * qz, yz = qy * qz;
187
- const wx = qw * qx, wy = qw * qy, wz = qw * qz;
188
- return [
189
- 1 - 2 * (yy + zz),
190
- 2 * (xy + wz),
191
- 2 * (xz - wy),
192
- 2 * (xy - wz),
193
- 1 - 2 * (xx + zz),
194
- 2 * (yz + wx),
195
- 2 * (xz + wy),
196
- 2 * (yz - wx),
197
- 1 - 2 * (xx + yy),
198
- ];
199
- }
200
227
  // Returns true if the two OBBs (given by their center offset, local axes, and half-extents) are
201
228
  // separated on any of the 15 SAT candidate axes. True = separated = no intersection.
202
229
  function obbSatSeparated(tx, ty, tz, ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2, hax, hay, haz, bx0, by0, bz0, bx1, by1, bz1, bx2, by2, bz2, hbx, hby, hbz) {
203
- const onAxis = (lx, ly, lz) => {
230
+ for (let axis = 0; axis < 15; axis++) {
231
+ let lx, ly, lz;
232
+ switch (axis) {
233
+ case 0:
234
+ lx = ax0;
235
+ ly = ay0;
236
+ lz = az0;
237
+ break;
238
+ case 1:
239
+ lx = ax1;
240
+ ly = ay1;
241
+ lz = az1;
242
+ break;
243
+ case 2:
244
+ lx = ax2;
245
+ ly = ay2;
246
+ lz = az2;
247
+ break;
248
+ case 3:
249
+ lx = bx0;
250
+ ly = by0;
251
+ lz = bz0;
252
+ break;
253
+ case 4:
254
+ lx = bx1;
255
+ ly = by1;
256
+ lz = bz1;
257
+ break;
258
+ case 5:
259
+ lx = bx2;
260
+ ly = by2;
261
+ lz = bz2;
262
+ break;
263
+ case 6:
264
+ lx = ay0 * bz0 - az0 * by0;
265
+ ly = az0 * bx0 - ax0 * bz0;
266
+ lz = ax0 * by0 - ay0 * bx0;
267
+ break;
268
+ case 7:
269
+ lx = ay0 * bz1 - az0 * by1;
270
+ ly = az0 * bx1 - ax0 * bz1;
271
+ lz = ax0 * by1 - ay0 * bx1;
272
+ break;
273
+ case 8:
274
+ lx = ay0 * bz2 - az0 * by2;
275
+ ly = az0 * bx2 - ax0 * bz2;
276
+ lz = ax0 * by2 - ay0 * bx2;
277
+ break;
278
+ case 9:
279
+ lx = ay1 * bz0 - az1 * by0;
280
+ ly = az1 * bx0 - ax1 * bz0;
281
+ lz = ax1 * by0 - ay1 * bx0;
282
+ break;
283
+ case 10:
284
+ lx = ay1 * bz1 - az1 * by1;
285
+ ly = az1 * bx1 - ax1 * bz1;
286
+ lz = ax1 * by1 - ay1 * bx1;
287
+ break;
288
+ case 11:
289
+ lx = ay1 * bz2 - az1 * by2;
290
+ ly = az1 * bx2 - ax1 * bz2;
291
+ lz = ax1 * by2 - ay1 * bx2;
292
+ break;
293
+ case 12:
294
+ lx = ay2 * bz0 - az2 * by0;
295
+ ly = az2 * bx0 - ax2 * bz0;
296
+ lz = ax2 * by0 - ay2 * bx0;
297
+ break;
298
+ case 13:
299
+ lx = ay2 * bz1 - az2 * by1;
300
+ ly = az2 * bx1 - ax2 * bz1;
301
+ lz = ax2 * by1 - ay2 * bx1;
302
+ break;
303
+ default:
304
+ lx = ay2 * bz2 - az2 * by2;
305
+ ly = az2 * bx2 - ax2 * bz2;
306
+ lz = ax2 * by2 - ay2 * bx2;
307
+ break;
308
+ }
204
309
  const lenSq = lx * lx + ly * ly + lz * lz;
205
310
  if (lenSq < 1e-10)
206
- return false;
311
+ continue;
207
312
  const d = Math.abs(tx * lx + ty * ly + tz * lz);
208
313
  const pA = Math.abs(ax0 * lx + ay0 * ly + az0 * lz) * hax +
209
314
  Math.abs(ax1 * lx + ay1 * ly + az1 * lz) * hay +
@@ -211,38 +316,9 @@ function obbSatSeparated(tx, ty, tz, ax0, ay0, az0, ax1, ay1, az1, ax2, ay2, az2
211
316
  const pB = Math.abs(bx0 * lx + by0 * ly + bz0 * lz) * hbx +
212
317
  Math.abs(bx1 * lx + by1 * ly + bz1 * lz) * hby +
213
318
  Math.abs(bx2 * lx + by2 * ly + bz2 * lz) * hbz;
214
- return d > pA + pB;
215
- };
216
- if (onAxis(ax0, ay0, az0))
217
- return true;
218
- if (onAxis(ax1, ay1, az1))
219
- return true;
220
- if (onAxis(ax2, ay2, az2))
221
- return true;
222
- if (onAxis(bx0, by0, bz0))
223
- return true;
224
- if (onAxis(bx1, by1, bz1))
225
- return true;
226
- if (onAxis(bx2, by2, bz2))
227
- return true;
228
- if (onAxis(ay0 * bz0 - az0 * by0, az0 * bx0 - ax0 * bz0, ax0 * by0 - ay0 * bx0))
229
- return true;
230
- if (onAxis(ay0 * bz1 - az0 * by1, az0 * bx1 - ax0 * bz1, ax0 * by1 - ay0 * bx1))
231
- return true;
232
- if (onAxis(ay0 * bz2 - az0 * by2, az0 * bx2 - ax0 * bz2, ax0 * by2 - ay0 * bx2))
233
- return true;
234
- if (onAxis(ay1 * bz0 - az1 * by0, az1 * bx0 - ax1 * bz0, ax1 * by0 - ay1 * bx0))
235
- return true;
236
- if (onAxis(ay1 * bz1 - az1 * by1, az1 * bx1 - ax1 * bz1, ax1 * by1 - ay1 * bx1))
237
- return true;
238
- if (onAxis(ay1 * bz2 - az1 * by2, az1 * bx2 - ax1 * bz2, ax1 * by2 - ay1 * bx2))
239
- return true;
240
- if (onAxis(ay2 * bz0 - az2 * by0, az2 * bx0 - ax2 * bz0, ax2 * by0 - ay2 * bx0))
241
- return true;
242
- if (onAxis(ay2 * bz1 - az2 * by1, az2 * bx1 - ax2 * bz1, ax2 * by1 - ay2 * bx1))
243
- return true;
244
- if (onAxis(ay2 * bz2 - az2 * by2, az2 * bx2 - ax2 * bz2, ax2 * by2 - ay2 * bx2))
245
- return true;
319
+ if (d > pA + pB)
320
+ return true;
321
+ }
246
322
  return false;
247
323
  }
248
324
  //# sourceMappingURL=obb.js.map
package/dist/obb.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"obb.js","sourceRoot":"","sources":["../src/obb.ts"],"names":[],"mappings":"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E,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7F,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"obb.js","sourceRoot":"","sources":["../src/obb.ts"],"names":[],"mappings":"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YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,MAAM;YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,MAAM;YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,MAAM;YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC;gBACT,MAAM;YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR,KAAK,CAAC;gBACJ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR,KAAK,EAAE;gBACL,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR,KAAK,EAAE;gBACL,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR,KAAK,EAAE;gBACL,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR,KAAK,EAAE;gBACL,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;YACR;gBACE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC3B,MAAM;QACV,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1C,IAAI,KAAK,GAAG,KAAK;YAAE,SAAS;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GACN,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACjD,MAAM,EAAE,GACN,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -70,13 +70,16 @@ export declare function normalizeQuaternion(out: QuaternionLike, source: Readonl
70
70
  * Safe when `out` aliases `vector` (all inputs are read into locals first).
71
71
  */
72
72
  export declare function rotateVector3ByQuaternion(out: Vector3Like, vector: Readonly<Vector3Like>, q: Readonly<QuaternionLike>): void;
73
+ /**
74
+ * Sets the quaternion components directly without normalization.
75
+ */
76
+ export declare function setQuaternion(out: QuaternionLike, x: number, y: number, z: number, w: number): void;
73
77
  /**
74
78
  * Builds a quaternion from a rotation `axis` (assumed unit length) and an `angle` in
75
79
  * radians. The rotation is right-handed (CCW when looking down the axis toward the origin).
76
80
  *
77
81
  * Safe when `out` aliases `axis`.
78
82
  */
79
- export declare function setQuaternion(out: QuaternionLike, x: number, y: number, z: number, w: number): void;
80
83
  export declare function setQuaternionFromAxisAngle(out: QuaternionLike, axis: Readonly<Vector3Like>, angle: number): void;
81
84
  /**
82
85
  * Builds a quaternion from Euler angles (in radians) applied in the given `order`.
@@ -112,10 +115,10 @@ export declare function setQuaternionIdentity(out: QuaternionLike): void;
112
115
  * Internally computes `right = up × forward`, `correctedUp = forward × right`, and builds the
113
116
  * rotation matrix from `[right, correctedUp, forward]` as column vectors.
114
117
  *
115
- * If `forward` and `up` are parallel or `forward` has zero length, the result is the
116
- * identity quaternion.
118
+ * If `up` is parallel to `forward`, an arbitrary perpendicular up direction is chosen so the
119
+ * requested forward direction is preserved. A zero-length `forward` writes the identity.
117
120
  *
118
- * Safe when `out` has no aliasing concerns.
121
+ * Safe when `out` aliases `forward` or `up`.
119
122
  */
120
123
  export declare function setQuaternionLookRotation(out: QuaternionLike, forward: Readonly<Vector3Like>, up: Readonly<Vector3Like>): void;
121
124
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"quaternion.d.ts","sourceRoot":"","sources":["../src/quaternion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quaternion.d.ts","sourceRoot":"","sources":["../src/quaternion.ts"],"names":[],"mappings":"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"}
@@ -233,19 +233,20 @@ export function rotateVector3ByQuaternion(out, vector, q) {
233
233
  out.z = vz + qw * tz + (qx * ty - qy * tx);
234
234
  }
235
235
  /**
236
- * Builds a quaternion from a rotation `axis` (assumed unit length) and an `angle` in
237
- * radians. The rotation is right-handed (CCW when looking down the axis toward the origin).
238
- *
239
- * Safe when `out` aliases `axis`.
236
+ * Sets the quaternion components directly without normalization.
240
237
  */
241
- // Sets the quaternion components directly. The reference-completeness counterpart to `setVector3` — no
242
- // normalization; the caller supplies a unit quaternion (or normalizes after).
243
238
  export function setQuaternion(out, x, y, z, w) {
244
239
  out.x = x;
245
240
  out.y = y;
246
241
  out.z = z;
247
242
  out.w = w;
248
243
  }
244
+ /**
245
+ * Builds a quaternion from a rotation `axis` (assumed unit length) and an `angle` in
246
+ * radians. The rotation is right-handed (CCW when looking down the axis toward the origin).
247
+ *
248
+ * Safe when `out` aliases `axis`.
249
+ */
249
250
  export function setQuaternionFromAxisAngle(out, axis, angle) {
250
251
  const half = angle * 0.5;
251
252
  const s = Math.sin(half);
@@ -389,16 +390,14 @@ export function setQuaternionFromUnitVectors(out, from, to) {
389
390
  out.x = cx;
390
391
  out.y = cy;
391
392
  out.z = cz;
393
+ // The antiparallel guard above bounds dot below at -0.999999, so w is at least 1e-6 and the
394
+ // length can never be zero here.
392
395
  out.w = 1 + dot;
393
- // normalize
394
- const len = Math.sqrt(out.x * out.x + out.y * out.y + out.z * out.z + out.w * out.w);
395
- if (len !== 0) {
396
- const inv = 1 / len;
397
- out.x *= inv;
398
- out.y *= inv;
399
- out.z *= inv;
400
- out.w *= inv;
401
- }
396
+ const inv = 1 / Math.sqrt(out.x * out.x + out.y * out.y + out.z * out.z + out.w * out.w);
397
+ out.x *= inv;
398
+ out.y *= inv;
399
+ out.z *= inv;
400
+ out.w *= inv;
402
401
  }
403
402
  /**
404
403
  * Resets a quaternion to the identity rotation (0, 0, 0, 1).
@@ -417,22 +416,37 @@ export function setQuaternionIdentity(out) {
417
416
  * Internally computes `right = up × forward`, `correctedUp = forward × right`, and builds the
418
417
  * rotation matrix from `[right, correctedUp, forward]` as column vectors.
419
418
  *
420
- * If `forward` and `up` are parallel or `forward` has zero length, the result is the
421
- * identity quaternion.
419
+ * If `up` is parallel to `forward`, an arbitrary perpendicular up direction is chosen so the
420
+ * requested forward direction is preserved. A zero-length `forward` writes the identity.
422
421
  *
423
- * Safe when `out` has no aliasing concerns.
422
+ * Safe when `out` aliases `forward` or `up`.
424
423
  */
425
424
  export function setQuaternionLookRotation(out, forward, up) {
426
425
  const fx = forward.x, fy = forward.y, fz = forward.z;
427
426
  const ux = up.x, uy = up.y, uz = up.z;
427
+ if (fx === 0 && fy === 0 && fz === 0) {
428
+ setQuaternionIdentity(out);
429
+ return;
430
+ }
428
431
  // right = up × forward
429
432
  let rx = uy * fz - uz * fy;
430
433
  let ry = uz * fx - ux * fz;
431
434
  let rz = ux * fy - uy * fx;
432
- const rLen = Math.sqrt(rx * rx + ry * ry + rz * rz);
435
+ let rLen = Math.sqrt(rx * rx + ry * ry + rz * rz);
433
436
  if (rLen === 0) {
434
- setQuaternionIdentity(out);
435
- return;
437
+ // Roll is underdetermined when up is parallel to forward. Choose the world axis least aligned
438
+ // with forward, matching the fallback principle used by setMatrix4LookAt.
439
+ if (Math.abs(fz) < 0.9) {
440
+ rx = -fy;
441
+ ry = fx;
442
+ rz = 0;
443
+ }
444
+ else {
445
+ rx = 0;
446
+ ry = -fz;
447
+ rz = fy;
448
+ }
449
+ rLen = Math.sqrt(rx * rx + ry * ry + rz * rz);
436
450
  }
437
451
  const rInv = 1 / rLen;
438
452
  rx *= rInv;
@@ -442,10 +456,11 @@ export function setQuaternionLookRotation(out, forward, up) {
442
456
  const cux = fy * rz - fz * ry;
443
457
  const cuy = fz * rx - fx * rz;
444
458
  const cuz = fx * ry - fy * rx;
445
- // Rotation matrix columns: col0 = right, col1 = correctedUp, col2 = forward
446
- const m00 = rx, m01 = cux, m02 = fx;
447
- const m10 = ry, m11 = cuy, m12 = fy;
448
- const m20 = rz, m21 = cuz, m22 = fz;
459
+ // Rotation matrix columns: col0 = right, col1 = correctedUp, col2 = forward. Match the
460
+ // column-major element naming used by setQuaternionFromMatrix4.
461
+ const m00 = rx, m10 = cux, m20 = fx;
462
+ const m01 = ry, m11 = cuy, m21 = fy;
463
+ const m02 = rz, m12 = cuz, m22 = fz;
449
464
  const trace = m00 + m11 + m22;
450
465
  if (trace > 0) {
451
466
  const s = 0.5 / Math.sqrt(trace + 1);