@flighthq/geometry 0.1.0

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 +88 -0
  2. package/dist/aabb.d.ts.map +1 -0
  3. package/dist/aabb.js +230 -0
  4. package/dist/aabb.js.map +1 -0
  5. package/dist/boundingSphere.d.ts +62 -0
  6. package/dist/boundingSphere.d.ts.map +1 -0
  7. package/dist/boundingSphere.js +188 -0
  8. package/dist/boundingSphere.js.map +1 -0
  9. package/dist/capsule.d.ts +38 -0
  10. package/dist/capsule.d.ts.map +1 -0
  11. package/dist/capsule.js +215 -0
  12. package/dist/capsule.js.map +1 -0
  13. package/dist/frustum.d.ts +49 -0
  14. package/dist/frustum.d.ts.map +1 -0
  15. package/dist/frustum.js +149 -0
  16. package/dist/frustum.js.map +1 -0
  17. package/dist/index.d.ts +25 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +25 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/matrix.d.ts +152 -0
  22. package/dist/matrix.d.ts.map +1 -0
  23. package/dist/matrix.js +488 -0
  24. package/dist/matrix.js.map +1 -0
  25. package/dist/matrix3.d.ts +63 -0
  26. package/dist/matrix3.d.ts.map +1 -0
  27. package/dist/matrix3.js +408 -0
  28. package/dist/matrix3.js.map +1 -0
  29. package/dist/matrix3Pool.d.ts +6 -0
  30. package/dist/matrix3Pool.d.ts.map +1 -0
  31. package/dist/matrix3Pool.js +26 -0
  32. package/dist/matrix3Pool.js.map +1 -0
  33. package/dist/matrix4.d.ts +238 -0
  34. package/dist/matrix4.d.ts.map +1 -0
  35. package/dist/matrix4.js +931 -0
  36. package/dist/matrix4.js.map +1 -0
  37. package/dist/matrix4Pool.d.ts +6 -0
  38. package/dist/matrix4Pool.d.ts.map +1 -0
  39. package/dist/matrix4Pool.js +26 -0
  40. package/dist/matrix4Pool.js.map +1 -0
  41. package/dist/matrixPool.d.ts +6 -0
  42. package/dist/matrixPool.d.ts.map +1 -0
  43. package/dist/matrixPool.js +26 -0
  44. package/dist/matrixPool.js.map +1 -0
  45. package/dist/obb.d.ts +44 -0
  46. package/dist/obb.d.ts.map +1 -0
  47. package/dist/obb.js +248 -0
  48. package/dist/obb.js.map +1 -0
  49. package/dist/plane.d.ts +66 -0
  50. package/dist/plane.d.ts.map +1 -0
  51. package/dist/plane.js +140 -0
  52. package/dist/plane.js.map +1 -0
  53. package/dist/quaternion.d.ts +128 -0
  54. package/dist/quaternion.d.ts.map +1 -0
  55. package/dist/quaternion.js +508 -0
  56. package/dist/quaternion.js.map +1 -0
  57. package/dist/quaternionPool.d.ts +6 -0
  58. package/dist/quaternionPool.d.ts.map +1 -0
  59. package/dist/quaternionPool.js +29 -0
  60. package/dist/quaternionPool.js.map +1 -0
  61. package/dist/ray3d.d.ts +69 -0
  62. package/dist/ray3d.d.ts.map +1 -0
  63. package/dist/ray3d.js +264 -0
  64. package/dist/ray3d.js.map +1 -0
  65. package/dist/rectangle.d.ts +56 -0
  66. package/dist/rectangle.d.ts.map +1 -0
  67. package/dist/rectangle.js +235 -0
  68. package/dist/rectangle.js.map +1 -0
  69. package/dist/rectanglePool.d.ts +6 -0
  70. package/dist/rectanglePool.d.ts.map +1 -0
  71. package/dist/rectanglePool.js +29 -0
  72. package/dist/rectanglePool.js.map +1 -0
  73. package/dist/typedarray.d.ts +4 -0
  74. package/dist/typedarray.d.ts.map +1 -0
  75. package/dist/typedarray.js +25 -0
  76. package/dist/typedarray.js.map +1 -0
  77. package/dist/vector2.d.ts +130 -0
  78. package/dist/vector2.d.ts.map +1 -0
  79. package/dist/vector2.js +250 -0
  80. package/dist/vector2.js.map +1 -0
  81. package/dist/vector2Pool.d.ts +6 -0
  82. package/dist/vector2Pool.d.ts.map +1 -0
  83. package/dist/vector2Pool.js +20 -0
  84. package/dist/vector2Pool.js.map +1 -0
  85. package/dist/vector3.d.ts +220 -0
  86. package/dist/vector3.d.ts.map +1 -0
  87. package/dist/vector3.js +380 -0
  88. package/dist/vector3.js.map +1 -0
  89. package/dist/vector3Pool.d.ts +6 -0
  90. package/dist/vector3Pool.d.ts.map +1 -0
  91. package/dist/vector3Pool.js +28 -0
  92. package/dist/vector3Pool.js.map +1 -0
  93. package/dist/vector4.d.ts +180 -0
  94. package/dist/vector4.d.ts.map +1 -0
  95. package/dist/vector4.js +333 -0
  96. package/dist/vector4.js.map +1 -0
  97. package/dist/vector4Pool.d.ts +6 -0
  98. package/dist/vector4Pool.d.ts.map +1 -0
  99. package/dist/vector4Pool.js +29 -0
  100. package/dist/vector4Pool.js.map +1 -0
  101. package/package.json +38 -0
  102. package/src/aabb.test.ts +341 -0
  103. package/src/boundingSphere.test.ts +247 -0
  104. package/src/capsule.test.ts +157 -0
  105. package/src/frustum.test.ts +160 -0
  106. package/src/matrix.test.ts +1111 -0
  107. package/src/matrix3.test.ts +752 -0
  108. package/src/matrix3Pool.test.ts +73 -0
  109. package/src/matrix4.test.ts +1627 -0
  110. package/src/matrix4Pool.test.ts +71 -0
  111. package/src/matrixPool.test.ts +69 -0
  112. package/src/obb.test.ts +183 -0
  113. package/src/plane.test.ts +225 -0
  114. package/src/quaternion.test.ts +531 -0
  115. package/src/quaternionPool.test.ts +64 -0
  116. package/src/ray3d.test.ts +297 -0
  117. package/src/rectangle.test.ts +982 -0
  118. package/src/rectanglePool.test.ts +71 -0
  119. package/src/typedarray.test.ts +118 -0
  120. package/src/vector2.test.ts +958 -0
  121. package/src/vector2Pool.test.ts +65 -0
  122. package/src/vector3.test.ts +749 -0
  123. package/src/vector3Pool.test.ts +68 -0
  124. package/src/vector4.test.ts +660 -0
  125. package/src/vector4Pool.test.ts +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../src/capsule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExG;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC9B,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC3B,IAAI,CA4CN;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM,CAsFtG;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAkBxG;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,OAAO,CAeT;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,IAAI,CAQN"}
@@ -0,0 +1,215 @@
1
+ import { createEntity } from '@flighthq/entity';
2
+ /**
3
+ * Creates a capsule from a start point, end point, and radius. A negative radius conventionally
4
+ * marks an empty capsule.
5
+ */
6
+ export function createCapsule(startX, startY, startZ, endX, endY, endZ, radius) {
7
+ return createEntity({ endX, endY, endZ, radius, startX, startY, startZ });
8
+ }
9
+ /**
10
+ * Writes the point on the capsule surface (or axis) closest to `point`. Projects `point` onto
11
+ * the capsule axis segment, clamps the parameter to [0, 1], then offsets by `radius` toward
12
+ * `point`. When `point` lies on the axis the stable fallback is the axis point itself offset
13
+ * along +X.
14
+ *
15
+ * Safe when `out` aliases `point` (reads all inputs before writing).
16
+ */
17
+ export function getClosestPointOnCapsule(out, capsule, point) {
18
+ const ax = capsule.startX, ay = capsule.startY, az = capsule.startZ;
19
+ const bx = capsule.endX, by = capsule.endY, bz = capsule.endZ;
20
+ const px = point.x, py = point.y, pz = point.z;
21
+ const r = capsule.radius;
22
+ const abx = bx - ax, aby = by - ay, abz = bz - az;
23
+ const abLen2 = abx * abx + aby * aby + abz * abz;
24
+ let closestX, closestY, closestZ;
25
+ if (abLen2 < 1e-20) {
26
+ closestX = ax;
27
+ closestY = ay;
28
+ closestZ = az;
29
+ }
30
+ else {
31
+ const t = Math.min(Math.max(((px - ax) * abx + (py - ay) * aby + (pz - az) * abz) / abLen2, 0), 1);
32
+ closestX = ax + t * abx;
33
+ closestY = ay + t * aby;
34
+ closestZ = az + t * abz;
35
+ }
36
+ const dx = px - closestX, dy = py - closestY, dz = pz - closestZ;
37
+ const dist = Math.sqrt(dx * dx + dy * dy + dz * dz);
38
+ if (dist < 1e-10) {
39
+ out.x = closestX + r;
40
+ out.y = closestY;
41
+ out.z = closestZ;
42
+ }
43
+ else {
44
+ const inv = r / dist;
45
+ out.x = closestX + dx * inv;
46
+ out.y = closestY + dy * inv;
47
+ out.z = closestZ + dz * inv;
48
+ }
49
+ }
50
+ /**
51
+ * Tests whether a ray intersects a capsule. Combines an infinite-cylinder slab test (clamped to
52
+ * the capsule axis segment) with hemispherical cap tests at start and end.
53
+ *
54
+ * Returns the entry parameter `t` (>= 0) on hit, or `-1` on miss. A ray starting inside the
55
+ * capsule returns `t = 0`.
56
+ */
57
+ export function intersectRay3DCapsule(ray, capsule) {
58
+ const ox = ray.origin.x, oy = ray.origin.y, oz = ray.origin.z;
59
+ const dx = ray.direction.x, dy = ray.direction.y, dz = ray.direction.z;
60
+ const ax = capsule.startX, ay = capsule.startY, az = capsule.startZ;
61
+ const bx = capsule.endX, by = capsule.endY, bz = capsule.endZ;
62
+ const r = capsule.radius;
63
+ const abx = bx - ax, aby = by - ay, abz = bz - az;
64
+ const abLen2 = abx * abx + aby * aby + abz * abz;
65
+ // Ray-sphere helper (no allocation): returns t on hit or -1 on miss.
66
+ const sphereHit = (cx, cy, cz) => {
67
+ const mx = ox - cx, my = oy - cy, mz = oz - cz;
68
+ const lenD2 = dx * dx + dy * dy + dz * dz;
69
+ if (lenD2 === 0)
70
+ return -1;
71
+ const b = mx * dx + my * dy + mz * dz;
72
+ const c = mx * mx + my * my + mz * mz - r * r;
73
+ const disc = b * b - lenD2 * c;
74
+ if (disc < 0)
75
+ return -1;
76
+ const sqrtD = Math.sqrt(disc);
77
+ const t1 = (-b - sqrtD) / lenD2;
78
+ if (t1 >= 0)
79
+ return t1;
80
+ const t2 = (-b + sqrtD) / lenD2;
81
+ return t2 >= 0 ? 0 : -1;
82
+ };
83
+ if (abLen2 < 1e-20)
84
+ return sphereHit(ax, ay, az);
85
+ let tBest = -1;
86
+ const invAb2 = 1 / abLen2;
87
+ const aox = ox - ax, aoy = oy - ay, aoz = oz - az;
88
+ const dab = dx * abx + dy * aby + dz * abz;
89
+ const aoab = aox * abx + aoy * aby + aoz * abz;
90
+ // Perpendicular components of direction and AO relative to the capsule axis.
91
+ const dpx = dx - dab * invAb2 * abx, dpy = dy - dab * invAb2 * aby, dpz = dz - dab * invAb2 * abz;
92
+ const apx = aox - aoab * invAb2 * abx, apy = aoy - aoab * invAb2 * aby, apz = aoz - aoab * invAb2 * abz;
93
+ const qa = dpx * dpx + dpy * dpy + dpz * dpz;
94
+ const qb = apx * dpx + apy * dpy + apz * dpz;
95
+ const qc = apx * apx + apy * apy + apz * apz - r * r;
96
+ if (qa > 1e-20) {
97
+ const disc = qb * qb - qa * qc;
98
+ if (disc >= 0) {
99
+ const sqrtD = Math.sqrt(disc);
100
+ const t1 = (-qb - sqrtD) / qa;
101
+ const s1 = (aoab + t1 * dab) * invAb2;
102
+ if (t1 >= 0 && s1 >= 0 && s1 <= 1) {
103
+ tBest = t1;
104
+ }
105
+ else if (t1 < 0) {
106
+ const t2 = (-qb + sqrtD) / qa;
107
+ if (t2 >= 0) {
108
+ const s0 = aoab * invAb2;
109
+ if (s0 >= 0 && s0 <= 1)
110
+ return 0; // ray origin inside cylinder body
111
+ }
112
+ }
113
+ }
114
+ }
115
+ const tA = sphereHit(ax, ay, az);
116
+ if (tA >= 0 && (tBest < 0 || tA < tBest))
117
+ tBest = tA;
118
+ const tB = sphereHit(bx, by, bz);
119
+ if (tB >= 0 && (tBest < 0 || tB < tBest))
120
+ tBest = tB;
121
+ return tBest;
122
+ }
123
+ /**
124
+ * Returns whether two capsules overlap (their inflated axis-segments share any point).
125
+ * An empty capsule (negative radius) does not intersect anything.
126
+ */
127
+ export function isCapsuleIntersectingCapsule(a, b) {
128
+ if (a.radius < 0 || b.radius < 0)
129
+ return false;
130
+ const dist = segmentToSegmentDistanceSq(a.startX, a.startY, a.startZ, a.endX, a.endY, a.endZ, b.startX, b.startY, b.startZ, b.endX, b.endY, b.endZ);
131
+ const sumR = a.radius + b.radius;
132
+ return dist <= sumR * sumR;
133
+ }
134
+ /**
135
+ * Returns whether a capsule overlaps a bounding sphere. An empty capsule (negative radius) or
136
+ * empty sphere (negative radius) does not intersect anything.
137
+ */
138
+ export function isCapsuleIntersectingSphere(capsule, sphere) {
139
+ if (capsule.radius < 0 || sphere.radius < 0)
140
+ return false;
141
+ const dist2 = pointToSegmentDistanceSq(sphere.center.x, sphere.center.y, sphere.center.z, capsule.startX, capsule.startY, capsule.startZ, capsule.endX, capsule.endY, capsule.endZ);
142
+ const sumR = capsule.radius + sphere.radius;
143
+ return dist2 <= sumR * sumR;
144
+ }
145
+ /**
146
+ * Sets all fields of a capsule in place.
147
+ */
148
+ export function setCapsule(out, startX, startY, startZ, endX, endY, endZ, radius) {
149
+ out.startX = startX;
150
+ out.startY = startY;
151
+ out.startZ = startZ;
152
+ out.endX = endX;
153
+ out.endY = endY;
154
+ out.endZ = endZ;
155
+ out.radius = radius;
156
+ }
157
+ // Squared distance from a point P to the line segment AB.
158
+ function pointToSegmentDistanceSq(px, py, pz, ax, ay, az, bx, by, bz) {
159
+ const abx = bx - ax, aby = by - ay, abz = bz - az;
160
+ const apx = px - ax, apy = py - ay, apz = pz - az;
161
+ const len2 = abx * abx + aby * aby + abz * abz;
162
+ let t = len2 > 0 ? (apx * abx + apy * aby + apz * abz) / len2 : 0;
163
+ t = Math.min(Math.max(t, 0), 1);
164
+ const cx = ax + t * abx - px, cy = ay + t * aby - py, cz = az + t * abz - pz;
165
+ return cx * cx + cy * cy + cz * cz;
166
+ }
167
+ // Squared distance between two line segments AB and CD (Ericson, Real-Time Collision Detection).
168
+ function segmentToSegmentDistanceSq(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {
169
+ const d1x = bx - ax, d1y = by - ay, d1z = bz - az;
170
+ const d2x = dx - cx, d2y = dy - cy, d2z = dz - cz;
171
+ const rx = ax - cx, ry = ay - cy, rz = az - cz;
172
+ const a = d1x * d1x + d1y * d1y + d1z * d1z;
173
+ const e = d2x * d2x + d2y * d2y + d2z * d2z;
174
+ const f = d2x * rx + d2y * ry + d2z * rz;
175
+ let s, t;
176
+ if (a < 1e-20 && e < 1e-20) {
177
+ s = 0;
178
+ t = 0;
179
+ }
180
+ else if (a < 1e-20) {
181
+ s = 0;
182
+ t = Math.min(Math.max(f / e, 0), 1);
183
+ }
184
+ else {
185
+ const c = d1x * rx + d1y * ry + d1z * rz;
186
+ if (e < 1e-20) {
187
+ t = 0;
188
+ s = Math.min(Math.max(-c / a, 0), 1);
189
+ }
190
+ else {
191
+ const b = d1x * d2x + d1y * d2y + d1z * d2z;
192
+ const denom = a * e - b * b;
193
+ if (denom > 1e-20) {
194
+ s = Math.min(Math.max((b * f - c * e) / denom, 0), 1);
195
+ }
196
+ else {
197
+ s = 0;
198
+ }
199
+ t = (b * s + f) / e;
200
+ if (t < 0) {
201
+ t = 0;
202
+ s = Math.min(Math.max(-c / a, 0), 1);
203
+ }
204
+ else if (t > 1) {
205
+ t = 1;
206
+ s = Math.min(Math.max((b - c) / a, 0), 1);
207
+ }
208
+ }
209
+ }
210
+ const qx = ax + s * d1x - (cx + t * d2x);
211
+ const qy = ay + s * d1y - (cy + t * d2y);
212
+ const qz = az + s * d1z - (cz + t * d2z);
213
+ return qx * qx + qy * qy + qz * qz;
214
+ }
215
+ //# sourceMappingURL=capsule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule.js","sourceRoot":"","sources":["../src/capsule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { AabbLike, BoundingSphereLike, Frustum, FrustumLike, Matrix4Like, Vector3Like } from '@flighthq/types';
2
+ /**
3
+ * Creates a view frustum as six bounding planes, each with an inward-pointing normal. The
4
+ * planes start at zero (a degenerate frustum) and are populated by setFrustumFromMatrix4.
5
+ */
6
+ export declare function createFrustum(): Frustum;
7
+ /**
8
+ * Computes the 8 world-space corner points of the frustum from the inverse view-projection
9
+ * matrix. The NDC corners (all ±1 combinations in clip space) are unprojected via
10
+ * `inverseViewProjection`.
11
+ *
12
+ * Writes exactly 8 Vector3-like objects to `out` in the order:
13
+ * 0: near-left-bottom 1: near-right-bottom 2: near-right-top 3: near-left-top
14
+ * 4: far-left-bottom 5: far-right-bottom 6: far-right-top 7: far-left-top
15
+ *
16
+ * The caller is responsible for passing the correct inverse matrix (e.g. the inverse of the
17
+ * same view-projection used with `setFrustumFromMatrix4`). If `out` has fewer than 8 elements
18
+ * this function writes only as many as are available.
19
+ */
20
+ export declare function getFrustumCorners(out: readonly Vector3Like[], inverseViewProjection: Readonly<Matrix4Like>): void;
21
+ /**
22
+ * Returns whether a point lies inside the frustum. A point is inside when its signed
23
+ * distance to every plane is non-negative (each normal points inward).
24
+ */
25
+ export declare function isFrustumContainingPoint(frustum: Readonly<FrustumLike>, point: Readonly<Vector3Like>): boolean;
26
+ /**
27
+ * Returns whether an axis-aligned bounding box intersects (or is contained by) the frustum.
28
+ * Uses the conservative positive-vertex test: the box is rejected only when it lies entirely
29
+ * on the outside (negative) side of any single plane. This may report a false positive for
30
+ * boxes straddling a frustum corner but never a false negative.
31
+ */
32
+ export declare function isFrustumIntersectingAabb(frustum: Readonly<FrustumLike>, aabb: Readonly<AabbLike>): boolean;
33
+ /**
34
+ * Returns whether a bounding sphere intersects (or is contained by) the frustum. A sphere is
35
+ * rejected only when its signed distance to some plane is less than -radius (entirely on the
36
+ * outside of that plane). An empty sphere (negative radius) always returns false.
37
+ *
38
+ * This may report false positives for spheres near frustum edges but never false negatives.
39
+ */
40
+ export declare function isFrustumIntersectingSphere(frustum: Readonly<FrustumLike>, sphere: Readonly<BoundingSphereLike>): boolean;
41
+ /**
42
+ * Extracts the six frustum planes from a view-projection Matrix4 (Gribb–Hartmann), each
43
+ * normalized and oriented with an inward-pointing normal. Pass a `view × projection` (or
44
+ * `projection × view`, depending on multiply order) matrix to cull in that space.
45
+ *
46
+ * `out` may be a fresh frustum; the matrix is read-only.
47
+ */
48
+ export declare function setFrustumFromMatrix4(out: FrustumLike, viewProjection: Readonly<Matrix4Like>): void;
49
+ //# sourceMappingURL=frustum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustum.d.ts","sourceRoot":"","sources":["../src/frustum.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAClB,OAAO,EACP,WAAW,EACX,WAAW,EAEX,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAIzB;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CASvC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,EAAE,qBAAqB,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CA0BjH;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAS9G;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAS3G;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,OAAO,CAWT;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CA0BnG"}
@@ -0,0 +1,149 @@
1
+ import { createEntity } from '@flighthq/entity';
2
+ import { createPlane } from './plane';
3
+ /**
4
+ * Creates a view frustum as six bounding planes, each with an inward-pointing normal. The
5
+ * planes start at zero (a degenerate frustum) and are populated by setFrustumFromMatrix4.
6
+ */
7
+ export function createFrustum() {
8
+ return createEntity({
9
+ bottom: createPlane(),
10
+ far: createPlane(),
11
+ left: createPlane(),
12
+ near: createPlane(),
13
+ right: createPlane(),
14
+ top: createPlane(),
15
+ });
16
+ }
17
+ /**
18
+ * Computes the 8 world-space corner points of the frustum from the inverse view-projection
19
+ * matrix. The NDC corners (all ±1 combinations in clip space) are unprojected via
20
+ * `inverseViewProjection`.
21
+ *
22
+ * Writes exactly 8 Vector3-like objects to `out` in the order:
23
+ * 0: near-left-bottom 1: near-right-bottom 2: near-right-top 3: near-left-top
24
+ * 4: far-left-bottom 5: far-right-bottom 6: far-right-top 7: far-left-top
25
+ *
26
+ * The caller is responsible for passing the correct inverse matrix (e.g. the inverse of the
27
+ * same view-projection used with `setFrustumFromMatrix4`). If `out` has fewer than 8 elements
28
+ * this function writes only as many as are available.
29
+ */
30
+ export function getFrustumCorners(out, inverseViewProjection) {
31
+ const m = inverseViewProjection.m;
32
+ const ndcCorners = [
33
+ [-1, -1, -1],
34
+ [1, -1, -1],
35
+ [1, 1, -1],
36
+ [-1, 1, -1],
37
+ [-1, -1, 1],
38
+ [1, -1, 1],
39
+ [1, 1, 1],
40
+ [-1, 1, 1],
41
+ ];
42
+ const len = Math.min(out.length, ndcCorners.length);
43
+ for (let i = 0; i < len; i++) {
44
+ const [nx, ny, nz] = ndcCorners[i];
45
+ // Homogeneous multiply: p = M * [nx, ny, nz, 1]^T
46
+ const x = m[0] * nx + m[4] * ny + m[8] * nz + m[12];
47
+ const y = m[1] * nx + m[5] * ny + m[9] * nz + m[13];
48
+ const z = m[2] * nx + m[6] * ny + m[10] * nz + m[14];
49
+ const w = m[3] * nx + m[7] * ny + m[11] * nz + m[15];
50
+ const invW = w !== 0 ? 1 / w : 1;
51
+ const corner = out[i];
52
+ corner.x = x * invW;
53
+ corner.y = y * invW;
54
+ corner.z = z * invW;
55
+ }
56
+ }
57
+ /**
58
+ * Returns whether a point lies inside the frustum. A point is inside when its signed
59
+ * distance to every plane is non-negative (each normal points inward).
60
+ */
61
+ export function isFrustumContainingPoint(frustum, point) {
62
+ return (__planeSignedDistance(frustum.left, point) >= 0 &&
63
+ __planeSignedDistance(frustum.right, point) >= 0 &&
64
+ __planeSignedDistance(frustum.bottom, point) >= 0 &&
65
+ __planeSignedDistance(frustum.top, point) >= 0 &&
66
+ __planeSignedDistance(frustum.near, point) >= 0 &&
67
+ __planeSignedDistance(frustum.far, point) >= 0);
68
+ }
69
+ /**
70
+ * Returns whether an axis-aligned bounding box intersects (or is contained by) the frustum.
71
+ * Uses the conservative positive-vertex test: the box is rejected only when it lies entirely
72
+ * on the outside (negative) side of any single plane. This may report a false positive for
73
+ * boxes straddling a frustum corner but never a false negative.
74
+ */
75
+ export function isFrustumIntersectingAabb(frustum, aabb) {
76
+ return (__planeIntersectsAabb(frustum.left, aabb) &&
77
+ __planeIntersectsAabb(frustum.right, aabb) &&
78
+ __planeIntersectsAabb(frustum.bottom, aabb) &&
79
+ __planeIntersectsAabb(frustum.top, aabb) &&
80
+ __planeIntersectsAabb(frustum.near, aabb) &&
81
+ __planeIntersectsAabb(frustum.far, aabb));
82
+ }
83
+ /**
84
+ * Returns whether a bounding sphere intersects (or is contained by) the frustum. A sphere is
85
+ * rejected only when its signed distance to some plane is less than -radius (entirely on the
86
+ * outside of that plane). An empty sphere (negative radius) always returns false.
87
+ *
88
+ * This may report false positives for spheres near frustum edges but never false negatives.
89
+ */
90
+ export function isFrustumIntersectingSphere(frustum, sphere) {
91
+ if (sphere.radius < 0)
92
+ return false;
93
+ const r = sphere.radius;
94
+ return (__planeSignedDistance(frustum.left, sphere.center) >= -r &&
95
+ __planeSignedDistance(frustum.right, sphere.center) >= -r &&
96
+ __planeSignedDistance(frustum.bottom, sphere.center) >= -r &&
97
+ __planeSignedDistance(frustum.top, sphere.center) >= -r &&
98
+ __planeSignedDistance(frustum.near, sphere.center) >= -r &&
99
+ __planeSignedDistance(frustum.far, sphere.center) >= -r);
100
+ }
101
+ /**
102
+ * Extracts the six frustum planes from a view-projection Matrix4 (Gribb–Hartmann), each
103
+ * normalized and oriented with an inward-pointing normal. Pass a `view × projection` (or
104
+ * `projection × view`, depending on multiply order) matrix to cull in that space.
105
+ *
106
+ * `out` may be a fresh frustum; the matrix is read-only.
107
+ */
108
+ export function setFrustumFromMatrix4(out, viewProjection) {
109
+ const m = viewProjection.m;
110
+ // Column-major: row r is (m[r], m[4+r], m[8+r], m[12+r]).
111
+ const r00 = m[0], r01 = m[4], r02 = m[8], r03 = m[12];
112
+ const r10 = m[1], r11 = m[5], r12 = m[9], r13 = m[13];
113
+ const r20 = m[2], r21 = m[6], r22 = m[10], r23 = m[14];
114
+ const r30 = m[3], r31 = m[7], r32 = m[11], r33 = m[15];
115
+ __setPlane(out.left, r30 + r00, r31 + r01, r32 + r02, r33 + r03);
116
+ __setPlane(out.right, r30 - r00, r31 - r01, r32 - r02, r33 - r03);
117
+ __setPlane(out.bottom, r30 + r10, r31 + r11, r32 + r12, r33 + r13);
118
+ __setPlane(out.top, r30 - r10, r31 - r11, r32 - r12, r33 - r13);
119
+ __setPlane(out.near, r30 + r20, r31 + r21, r32 + r22, r33 + r23);
120
+ __setPlane(out.far, r30 - r20, r31 - r21, r32 - r22, r33 - r23);
121
+ }
122
+ // The box intersects (is not fully outside) this plane if its positive vertex — the corner
123
+ // farthest along the plane normal — is on the inside (non-negative) side.
124
+ function __planeIntersectsAabb(plane, aabb) {
125
+ const px = plane.a >= 0 ? aabb.max.x : aabb.min.x;
126
+ const py = plane.b >= 0 ? aabb.max.y : aabb.min.y;
127
+ const pz = plane.c >= 0 ? aabb.max.z : aabb.min.z;
128
+ return plane.a * px + plane.b * py + plane.c * pz + plane.d >= 0;
129
+ }
130
+ function __planeSignedDistance(plane, point) {
131
+ return plane.a * point.x + plane.b * point.y + plane.c * point.z + plane.d;
132
+ }
133
+ function __setPlane(out, a, b, c, d) {
134
+ const l = Math.sqrt(a * a + b * b + c * c);
135
+ if (l !== 0) {
136
+ const inv = 1 / l;
137
+ out.a = a * inv;
138
+ out.b = b * inv;
139
+ out.c = c * inv;
140
+ out.d = d * inv;
141
+ }
142
+ else {
143
+ out.a = a;
144
+ out.b = b;
145
+ out.c = c;
146
+ out.d = d;
147
+ }
148
+ }
149
+ //# sourceMappingURL=frustum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustum.js","sourceRoot":"","sources":["../src/frustum.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export * from './aabb';
2
+ export * from './boundingSphere';
3
+ export * from './capsule';
4
+ export * from './frustum';
5
+ export * from './matrix';
6
+ export * from './matrix3';
7
+ export * from './matrix3Pool';
8
+ export * from './matrix4';
9
+ export * from './matrix4Pool';
10
+ export * from './matrixPool';
11
+ export * from './obb';
12
+ export * from './plane';
13
+ export * from './quaternion';
14
+ export * from './quaternionPool';
15
+ export * from './ray3d';
16
+ export * from './rectangle';
17
+ export * from './rectanglePool';
18
+ export * from './typedarray';
19
+ export * from './vector2';
20
+ export * from './vector2Pool';
21
+ export * from './vector3';
22
+ export * from './vector3Pool';
23
+ export * from './vector4';
24
+ export * from './vector4Pool';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ export * from './aabb';
2
+ export * from './boundingSphere';
3
+ export * from './capsule';
4
+ export * from './frustum';
5
+ export * from './matrix';
6
+ export * from './matrix3';
7
+ export * from './matrix3Pool';
8
+ export * from './matrix4';
9
+ export * from './matrix4Pool';
10
+ export * from './matrixPool';
11
+ export * from './obb';
12
+ export * from './plane';
13
+ export * from './quaternion';
14
+ export * from './quaternionPool';
15
+ export * from './ray3d';
16
+ export * from './rectangle';
17
+ export * from './rectanglePool';
18
+ export * from './typedarray';
19
+ export * from './vector2';
20
+ export * from './vector2Pool';
21
+ export * from './vector3';
22
+ export * from './vector3Pool';
23
+ export * from './vector4';
24
+ export * from './vector4Pool';
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}