@zephyr3d/scene 0.9.0 → 0.9.2
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.
- package/dist/animation/animationset.js +135 -133
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +151 -103
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_system.js +87 -114
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +165 -144
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +3 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +185 -185
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +794 -261
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +290 -288
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +13 -26
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/pbrmr.js +1 -11
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +236 -156
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +36 -16
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +4 -20
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +2 -2
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +4 -7
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +493 -493
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/manager.js +34 -3
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -162,7 +162,11 @@ function writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, sqrDistance,
|
|
|
162
162
|
return out;
|
|
163
163
|
}
|
|
164
164
|
// Pushout (keep point outside collider)
|
|
165
|
-
|
|
165
|
+
/**
|
|
166
|
+
* Pushes a point out of a sphere collider.
|
|
167
|
+
*
|
|
168
|
+
* @public
|
|
169
|
+
*/ function pushoutFromSphere(center, radius, pointRadius, point, out) {
|
|
166
170
|
const direction = Vector3.sub(point, center, _pushoutSphereDirection);
|
|
167
171
|
const sqrLen = direction.magnitudeSq;
|
|
168
172
|
if (sqrLen > EPSILON) {
|
|
@@ -175,13 +179,21 @@ function pushoutFromSphere(center, radius, pointRadius, point, out) {
|
|
|
175
179
|
}
|
|
176
180
|
return writeCollisionResult(out, false, point, !out);
|
|
177
181
|
}
|
|
178
|
-
|
|
182
|
+
/**
|
|
183
|
+
* Pushes a point out of a collider.
|
|
184
|
+
*
|
|
185
|
+
* @public
|
|
186
|
+
*/ function pushoutFromCollider(colR, colRW, point, ptR, out) {
|
|
179
187
|
if (colR.height <= EPSILON) {
|
|
180
188
|
return pushoutFromSphere(colRW.positionCurrent, colRW.radius, ptR.pointRadius, point, out);
|
|
181
189
|
}
|
|
182
190
|
return pushoutFromCapsule(colR, colRW, point, ptR, out);
|
|
183
191
|
}
|
|
184
|
-
|
|
192
|
+
/**
|
|
193
|
+
* Pushes a point out of a capsule collider.
|
|
194
|
+
*
|
|
195
|
+
* @public
|
|
196
|
+
*/ function pushoutFromCapsule(colR, colRW, point, ptR, out) {
|
|
185
197
|
const capsuleVec = colRW.directionCurrent;
|
|
186
198
|
const capsuleVecN = Vector3.normalize(capsuleVec, _pushoutCapsuleVecN);
|
|
187
199
|
const capsulePos = colRW.positionCurrent;
|
|
@@ -210,7 +222,11 @@ function pushoutFromCapsule(colR, colRW, point, ptR, out) {
|
|
|
210
222
|
return writeCollisionResult(out, false, point, !out);
|
|
211
223
|
}
|
|
212
224
|
// PushIn (keep point inside collider - inverse mode)
|
|
213
|
-
|
|
225
|
+
/**
|
|
226
|
+
* Pulls a point inside a sphere collider.
|
|
227
|
+
*
|
|
228
|
+
* @public
|
|
229
|
+
*/ function pushInFromSphere(center, radius, point, out) {
|
|
214
230
|
const direction = Vector3.sub(center, point, _pushInSphereDirection);
|
|
215
231
|
const sqrLen = direction.magnitudeSq;
|
|
216
232
|
if (sqrLen > EPSILON && sqrLen > radius * radius) {
|
|
@@ -222,13 +238,21 @@ function pushInFromSphere(center, radius, point, out) {
|
|
|
222
238
|
}
|
|
223
239
|
return writeCollisionResult(out, false, point, !out);
|
|
224
240
|
}
|
|
225
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Pulls a point inside a collider.
|
|
243
|
+
*
|
|
244
|
+
* @public
|
|
245
|
+
*/ function pushInFromCollider(colR, colRW, point, out) {
|
|
226
246
|
if (colR.height <= EPSILON) {
|
|
227
247
|
return pushInFromSphere(colRW.positionCurrent, colRW.radius, point, out);
|
|
228
248
|
}
|
|
229
249
|
return pushInFromCapsule(colR, colRW, point, out);
|
|
230
250
|
}
|
|
231
|
-
|
|
251
|
+
/**
|
|
252
|
+
* Pulls a point inside a capsule collider.
|
|
253
|
+
*
|
|
254
|
+
* @public
|
|
255
|
+
*/ function pushInFromCapsule(colR, colRW, point, out) {
|
|
232
256
|
const capsuleVec = colRW.directionCurrent;
|
|
233
257
|
const capsuleVecN = Vector3.normalize(capsuleVec, _pushInCapsuleVecN);
|
|
234
258
|
const capsulePos = colRW.positionCurrent;
|
|
@@ -258,7 +282,11 @@ function pushInFromCapsule(colR, colRW, point, out) {
|
|
|
258
282
|
return writeCollisionResult(out, false, point, !out);
|
|
259
283
|
}
|
|
260
284
|
// Line segment vs collider detection
|
|
261
|
-
|
|
285
|
+
/**
|
|
286
|
+
* Performs sphere collision detection.
|
|
287
|
+
*
|
|
288
|
+
* @public
|
|
289
|
+
*/ function collisionDetectionSphere(center, radius, point1, point2, out) {
|
|
262
290
|
const dir = Vector3.sub(point2, point1, _collisionSphereDir);
|
|
263
291
|
const dirLen = dir.magnitude;
|
|
264
292
|
if (dirLen < EPSILON) {
|
|
@@ -274,7 +302,11 @@ function collisionDetectionSphere(center, radius, point1, point2, out) {
|
|
|
274
302
|
const hit = diff.magnitudeSq <= radius * radius;
|
|
275
303
|
return writeLineCollisionResult(out, hit, ptOnLine, center, radius, !out);
|
|
276
304
|
}
|
|
277
|
-
|
|
305
|
+
/**
|
|
306
|
+
* Performs capsule collision detection.
|
|
307
|
+
*
|
|
308
|
+
* @public
|
|
309
|
+
*/ function collisionDetectionCapsule(colR, colRW, point1, point2, out) {
|
|
278
310
|
const capsuleDir = colRW.directionCurrent;
|
|
279
311
|
const capsulePos = colRW.positionCurrent;
|
|
280
312
|
let res = collisionDetectionSphere(capsulePos, colRW.radius, point1, point2, out);
|
|
@@ -302,13 +334,21 @@ function collisionDetectionCapsule(colR, colRW, point1, point2, out) {
|
|
|
302
334
|
const hit = diff.magnitudeSq <= r * r;
|
|
303
335
|
return writeLineCollisionResult(out, hit, ptOnLine, ptOnCol, r, !out);
|
|
304
336
|
}
|
|
305
|
-
|
|
337
|
+
/**
|
|
338
|
+
* Performs collision detection against the specified collider.
|
|
339
|
+
*
|
|
340
|
+
* @public
|
|
341
|
+
*/ function collisionDetection(colR, colRW, point1, point2, out) {
|
|
306
342
|
if (colR.height <= EPSILON) {
|
|
307
343
|
return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);
|
|
308
344
|
}
|
|
309
345
|
return collisionDetectionCapsule(colR, colRW, point1, point2, out);
|
|
310
346
|
}
|
|
311
|
-
|
|
347
|
+
/**
|
|
348
|
+
* Performs inward collision detection.
|
|
349
|
+
*
|
|
350
|
+
* @public
|
|
351
|
+
*/ function pushInCollisionDetection(colR, colRW, point1, point2, out) {
|
|
312
352
|
if (colR.height <= EPSILON) {
|
|
313
353
|
return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);
|
|
314
354
|
}
|
|
@@ -317,7 +357,11 @@ function pushInCollisionDetection(colR, colRW, point1, point2, out) {
|
|
|
317
357
|
return res;
|
|
318
358
|
}
|
|
319
359
|
// Nearest points between two line segments
|
|
320
|
-
|
|
360
|
+
/**
|
|
361
|
+
* Computes the nearest points between two segments.
|
|
362
|
+
*
|
|
363
|
+
* @public
|
|
364
|
+
*/ function computeNearestPoints(posP, dirP, posQ, dirQ, out) {
|
|
321
365
|
const cross0 = Vector3.cross(dirQ, dirP, _nearestCross0);
|
|
322
366
|
const n1 = Vector3.cross(dirP, cross0, _nearestN1);
|
|
323
367
|
const cross1 = Vector3.cross(dirP, dirQ, _nearestCross1);
|
|
@@ -335,7 +379,11 @@ function computeNearestPoints(posP, dirP, posQ, dirQ, out) {
|
|
|
335
379
|
return writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, diff.magnitudeSq, !out);
|
|
336
380
|
}
|
|
337
381
|
// Surface collision (triangle-based)
|
|
338
|
-
|
|
382
|
+
/**
|
|
383
|
+
* Checks triangle-surface collision against a collider.
|
|
384
|
+
*
|
|
385
|
+
* @public
|
|
386
|
+
*/ function checkSurfaceCollision(ptA, ptB, ptC, colliderPos, colR, colRW, out) {
|
|
339
387
|
_surfaceNoHit.hit = false;
|
|
340
388
|
_surfaceNoHit.intersectionPoint.setXYZ(0, 0, 0);
|
|
341
389
|
_surfaceNoHit.pushOut.setXYZ(0, 0, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collision.js","sources":["../../../src/animation/joint_dynamics/collision.ts"],"sourcesContent":["// Collision detection & response - direct port of SPCRJointDynamicsJob.cs Collision class\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { ColliderR, ColliderRW, PointR } from './types';\r\nimport { EPSILON, ColliderForce } from './types';\r\n\r\nexport interface CollisionResult {\r\n hit: boolean;\r\n point: Vector3;\r\n}\r\n\r\nexport interface LineCollisionResult {\r\n hit: boolean;\r\n pointOnLine: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\nexport interface SurfaceCheckResult {\r\n hit: boolean;\r\n intersectionPoint: Vector3;\r\n pushOut: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\nexport interface NearestPointsResult {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n}\r\n\r\nconst _pushoutSphereDirection = new Vector3();\r\nconst _pushoutSphereScaled = new Vector3();\r\nconst _pushoutCapsuleVecN = new Vector3();\r\nconst _pushoutCapsuleTargetVec = new Vector3();\r\nconst _pushoutCapsuleTail = new Vector3();\r\nconst _pushoutCapsulePosOnVec = new Vector3();\r\nconst _pushoutCapsulePushVec = new Vector3();\r\nconst _pushoutCapsuleScaled = new Vector3();\r\nconst _pushInSphereDirection = new Vector3();\r\nconst _pushInSphereDirectionN = new Vector3();\r\nconst _pushInSphereScaled = new Vector3();\r\nconst _pushInCapsuleVecN = new Vector3();\r\nconst _pushInCapsuleTargetVec = new Vector3();\r\nconst _pushInCapsuleTail = new Vector3();\r\nconst _pushInCapsulePosOnVec = new Vector3();\r\nconst _pushInCapsulePullVec = new Vector3();\r\nconst _pushInCapsulePullVecN = new Vector3();\r\nconst _pushInCapsuleScaled = new Vector3();\r\nconst _collisionSphereDir = new Vector3();\r\nconst _collisionSphereDirN = new Vector3();\r\nconst _collisionSphereToCenter = new Vector3();\r\nconst _collisionSphereScaled = new Vector3();\r\nconst _collisionSphereDiff = new Vector3();\r\nconst _collisionCapsuleTail = new Vector3();\r\nconst _collisionCapsulePointDir = new Vector3();\r\nconst _collisionCapsulePtOnCol = new Vector3();\r\nconst _collisionCapsulePtOnLine = new Vector3();\r\nconst _collisionCapsuleDiff = new Vector3();\r\nconst _collisionCapsuleTempLineResult: LineCollisionResult = {\r\n hit: false,\r\n pointOnLine: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _nearestCross0 = new Vector3();\r\nconst _nearestCross1 = new Vector3();\r\nconst _nearestN1 = new Vector3();\r\nconst _nearestN2 = new Vector3();\r\nconst _nearestPosDiff = new Vector3();\r\nconst _nearestPointOnP = new Vector3();\r\nconst _nearestPointOnQ = new Vector3();\r\nconst _nearestPointDiff = new Vector3();\r\nconst _nearestResult: NearestPointsResult = {\r\n tP: 0,\r\n tQ: 0,\r\n pointOnP: new Vector3(),\r\n pointOnQ: new Vector3(),\r\n sqrDistance: 0\r\n};\r\nconst _surfaceNoHit: SurfaceCheckResult = {\r\n hit: false,\r\n intersectionPoint: new Vector3(),\r\n pushOut: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _surfaceTriCenter = new Vector3();\r\nconst _surfaceEdgeAB = new Vector3();\r\nconst _surfaceEdgeAC = new Vector3();\r\nconst _surfacePlaneNormal = new Vector3();\r\nconst _surfacePlaneNormalNeg = new Vector3();\r\nconst _surfaceColliderDir = new Vector3();\r\nconst _surfaceRayDir = new Vector3();\r\nconst _surfaceRayDirN = new Vector3();\r\nconst _surfaceTail = new Vector3();\r\nconst _surfaceIntersection = new Vector3();\r\nconst _surfacePushOut = new Vector3();\r\nconst _surfaceToCol = new Vector3();\r\nconst _surfaceEndVec = new Vector3();\r\nconst _surfaceColDirVec = new Vector3();\r\nconst _surfaceIntersecToEnd = new Vector3();\r\nconst _surfaceColToEnd = new Vector3();\r\nconst _surfaceColToIntersect = new Vector3();\r\nconst _surfaceEVec = new Vector3();\r\nconst _surfacePoc2 = new Vector3();\r\nconst _triangleAp = new Vector3();\r\nconst _triangleBp = new Vector3();\r\nconst _triangleCp = new Vector3();\r\nconst _triangleU = new Vector3();\r\nconst _triangleV = new Vector3();\r\nconst _triangleW = new Vector3();\r\n\r\nfunction writeCollisionResult(\r\n out: CollisionResult | undefined,\r\n hit: boolean,\r\n point: Vector3,\r\n copyPoint: boolean\r\n) {\r\n if (!out) {\r\n return { hit, point: copyPoint ? point.clone() : point };\r\n }\r\n if (!out.point) {\r\n out.point = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.point.set(point);\r\n return out;\r\n}\r\n\r\nfunction writeLineCollisionResult(\r\n out: LineCollisionResult | undefined,\r\n hit: boolean,\r\n pointOnLine: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n pointOnLine: copyVectors ? pointOnLine.clone() : pointOnLine,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.pointOnLine) {\r\n out.pointOnLine = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.pointOnLine.set(pointOnLine);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeSurfaceCheckResult(\r\n out: SurfaceCheckResult | undefined,\r\n hit: boolean,\r\n intersectionPoint: Vector3,\r\n pushOut: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n intersectionPoint: copyVectors ? intersectionPoint.clone() : intersectionPoint,\r\n pushOut: copyVectors ? pushOut.clone() : pushOut,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.intersectionPoint) {\r\n out.intersectionPoint = new Vector3();\r\n }\r\n if (!out.pushOut) {\r\n out.pushOut = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.intersectionPoint.set(intersectionPoint);\r\n out.pushOut.set(pushOut);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeNearestPointsResult(\r\n out: NearestPointsResult | undefined,\r\n tP: number,\r\n tQ: number,\r\n pointOnP: Vector3,\r\n pointOnQ: Vector3,\r\n sqrDistance: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n tP,\r\n tQ,\r\n pointOnP: copyVectors ? pointOnP.clone() : pointOnP,\r\n pointOnQ: copyVectors ? pointOnQ.clone() : pointOnQ,\r\n sqrDistance\r\n };\r\n }\r\n out.tP = tP;\r\n out.tQ = tQ;\r\n out.pointOnP.set(pointOnP);\r\n out.pointOnQ.set(pointOnQ);\r\n out.sqrDistance = sqrDistance;\r\n return out;\r\n}\r\n\r\n// Pushout (keep point outside collider)\r\n\r\nexport function pushoutFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n pointRadius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(point, center, _pushoutSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON) {\r\n const dirLen = Math.sqrt(sqrLen) - pointRadius;\r\n if (dirLen < radius) {\r\n const scaled = Vector3.scale(direction, radius / dirLen, _pushoutSphereScaled);\r\n Vector3.add(center, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\nexport function pushoutFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushoutFromSphere(colRW.positionCurrent, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n return pushoutFromCapsule(colR, colRW, point, ptR, out);\r\n}\r\n\r\nexport function pushoutFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushoutCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushoutCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushoutFromSphere(capsulePos, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n if (distOnVec >= colR.height) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushoutCapsuleTail);\r\n return pushoutFromSphere(tail, colRW.radius * colR.radiusTailScale, ptR.pointRadius, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushoutCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pushVec = Vector3.sub(point, posOnVec, _pushoutCapsulePushVec);\r\n const sqrPushDist = pushVec.magnitudeSq;\r\n if (sqrPushDist > EPSILON) {\r\n const pushDist = Math.sqrt(sqrPushDist) - ptR.pointRadius;\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / colR.height);\r\n if (pushDist < r) {\r\n const scaled = Vector3.scale(pushVec, r / pushDist, _pushoutCapsuleScaled);\r\n Vector3.add(posOnVec, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n// PushIn (keep point inside collider - inverse mode)\r\n\r\nexport function pushInFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(center, point, _pushInSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON && sqrLen > radius * radius) {\r\n const dirLen = Math.sqrt(sqrLen);\r\n const directionN = Vector3.normalize(direction, _pushInSphereDirectionN);\r\n const scaled = Vector3.scale(directionN, dirLen - radius, _pushInSphereScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\nexport function pushInFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushInFromSphere(colRW.positionCurrent, colRW.radius, point, out);\r\n }\r\n return pushInFromCapsule(colR, colRW, point, out);\r\n}\r\n\r\nexport function pushInFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushInCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushInCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushInFromSphere(capsulePos, colRW.radius, point, out);\r\n }\r\n if (distOnVec >= colR.height) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushInCapsuleTail);\r\n return pushInFromSphere(tail, colRW.radius * colR.radiusTailScale, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushInCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pullVec = Vector3.sub(posOnVec, point, _pushInCapsulePullVec);\r\n const sqrPullDist = pullVec.magnitudeSq;\r\n if (sqrPullDist > EPSILON) {\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, colR.height / distOnVec);\r\n if (sqrPullDist > r * r) {\r\n const pullDist = Math.sqrt(sqrPullDist);\r\n const pullVecN = Vector3.normalize(pullVec, _pushInCapsulePullVecN);\r\n const scaled = Vector3.scale(pullVecN, pullDist - r, _pushInCapsuleScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n// Line segment vs collider detection\r\n\r\nexport function collisionDetectionSphere(\r\n center: Vector3,\r\n radius: number,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const dir = Vector3.sub(point2, point1, _collisionSphereDir);\r\n const dirLen = dir.magnitude;\r\n if (dirLen < EPSILON) {\r\n return writeLineCollisionResult(out, false, point1, center, radius, !out);\r\n }\r\n const dirN = Vector3.scale(dir, 1 / dirLen, _collisionSphereDirN);\r\n const toCenter = Vector3.sub(center, point1, _collisionSphereToCenter);\r\n const dot = Vector3.dot(dirN, toCenter);\r\n const clamped = Math.max(0, Math.min(dot, dirLen));\r\n const ptOnLine = Vector3.scale(dirN, clamped, _collisionSphereScaled);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(center, ptOnLine, _collisionSphereDiff);\r\n const hit = diff.magnitudeSq <= radius * radius;\r\n return writeLineCollisionResult(out, hit, ptOnLine, center, radius, !out);\r\n}\r\n\r\nexport function collisionDetectionCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const capsuleDir = colRW.directionCurrent;\r\n const capsulePos = colRW.positionCurrent;\r\n\r\n let res = collisionDetectionSphere(capsulePos, colRW.radius, point1, point2, out);\r\n if (res.hit) {\r\n return res;\r\n }\r\n\r\n const tail = Vector3.add(capsulePos, capsuleDir, _collisionCapsuleTail);\r\n res = collisionDetectionSphere(\r\n tail,\r\n colRW.radius * colR.radiusTailScale,\r\n point1,\r\n point2,\r\n _collisionCapsuleTempLineResult\r\n );\r\n if (res.hit) {\r\n return writeLineCollisionResult(out, true, res.pointOnLine, res.pointOnCollider, res.radius, !out);\r\n }\r\n\r\n const pointDir = Vector3.sub(point2, point1, _collisionCapsulePointDir);\r\n const nearest = computeNearestPoints(capsulePos, capsuleDir, point1, pointDir, _nearestResult);\r\n const t1 = Math.max(0, Math.min(1, nearest.tP));\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, t1);\r\n\r\n if (nearest.sqrDistance > r * r) {\r\n return writeLineCollisionResult(out, false, point1, capsulePos, r, !out);\r\n }\r\n\r\n const t2 = Math.max(0, Math.min(1, nearest.tQ));\r\n const ptOnCol = Vector3.scale(capsuleDir, t1, _collisionCapsulePtOnCol);\r\n Vector3.add(capsulePos, ptOnCol, ptOnCol);\r\n const ptOnLine = Vector3.scale(pointDir, t2, _collisionCapsulePtOnLine);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(ptOnCol, ptOnLine, _collisionCapsuleDiff);\r\n const hit = diff.magnitudeSq <= r * r;\r\n return writeLineCollisionResult(out, hit, ptOnLine, ptOnCol, r, !out);\r\n}\r\n\r\nexport function collisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n return collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n}\r\n\r\nexport function pushInCollisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n const res = collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n res.hit = false;\r\n return res;\r\n}\r\n\r\n// Nearest points between two line segments\r\n\r\nexport function computeNearestPoints(\r\n posP: Vector3,\r\n dirP: Vector3,\r\n posQ: Vector3,\r\n dirQ: Vector3,\r\n out?: NearestPointsResult\r\n): {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n} {\r\n const cross0 = Vector3.cross(dirQ, dirP, _nearestCross0);\r\n const n1 = Vector3.cross(dirP, cross0, _nearestN1);\r\n const cross1 = Vector3.cross(dirP, dirQ, _nearestCross1);\r\n const n2 = Vector3.cross(dirQ, cross1, _nearestN2);\r\n const dP_n2 = Vector3.dot(dirP, n2);\r\n const dQ_n1 = Vector3.dot(dirQ, n1);\r\n const posDiff = Vector3.sub(posQ, posP, _nearestPosDiff);\r\n const tP = dP_n2 !== 0 ? Vector3.dot(posDiff, n2) / dP_n2 : 0;\r\n const tQ = dQ_n1 !== 0 ? Vector3.dot(Vector3.scale(posDiff, -1, posDiff), n1) / dQ_n1 : 0;\r\n const pointOnP = Vector3.scale(dirP, tP, _nearestPointOnP);\r\n Vector3.add(posP, pointOnP, pointOnP);\r\n const pointOnQ = Vector3.scale(dirQ, tQ, _nearestPointOnQ);\r\n Vector3.add(posQ, pointOnQ, pointOnQ);\r\n const diff = Vector3.sub(pointOnQ, pointOnP, _nearestPointDiff);\r\n return writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, diff.magnitudeSq, !out);\r\n}\r\n\r\n// Surface collision (triangle-based)\r\n\r\nexport function checkSurfaceCollision(\r\n ptA: Vector3,\r\n ptB: Vector3,\r\n ptC: Vector3,\r\n colliderPos: Vector3,\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n out?: SurfaceCheckResult\r\n): SurfaceCheckResult {\r\n _surfaceNoHit.hit = false;\r\n _surfaceNoHit.intersectionPoint.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pushOut.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pointOnCollider.set(colliderPos);\r\n _surfaceNoHit.radius = colRW.radius;\r\n\r\n let pointOnCollider = colliderPos;\r\n let radius = colRW.radius;\r\n const isCapsule = colR.height > EPSILON;\r\n\r\n const triCenter = centerOfTriangle(ptA, ptB, ptC, _surfaceTriCenter);\r\n const edgeAB = Vector3.sub(ptB, ptA, _surfaceEdgeAB);\r\n const edgeAC = Vector3.sub(ptC, ptA, _surfaceEdgeAC);\r\n const planeNormal = Vector3.cross(edgeAB, edgeAC, _surfacePlaneNormal);\r\n Vector3.normalize(planeNormal, planeNormal);\r\n Vector3.scale(planeNormal, -1, planeNormal);\r\n const planeNormalNeg = Vector3.scale(planeNormal, -1, _surfacePlaneNormalNeg);\r\n const planeDist = -Vector3.dot(planeNormalNeg, ptA);\r\n const colliderDir = Vector3.sub(colliderPos, triCenter, _surfaceColliderDir);\r\n Vector3.normalize(colliderDir, colliderDir);\r\n const dot = Vector3.dot(colliderDir, planeNormal);\r\n\r\n if (isCapsule) {\r\n const side = Vector3.dot(colRW.directionCurrent, planeNormal) * dot;\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const tempPOC = pointOnCollider;\r\n\r\n if (side < 0) {\r\n radius = colRW.radius * colR.radiusTailScale;\r\n pointOnCollider = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceTail);\r\n }\r\n\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n } else if (colR.forceType !== ColliderForce.Off) {\r\n pointOnCollider = tempPOC;\r\n let endVec = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceEndVec);\r\n _surfaceColDirVec.set(colRW.directionCurrent);\r\n let colDirVec = _surfaceColDirVec;\r\n if (colR.forceType === ColliderForce.Pull) {\r\n const tmp = pointOnCollider;\r\n pointOnCollider = endVec;\r\n endVec = tmp;\r\n colDirVec = Vector3.scale(colDirVec, -1, colDirVec);\r\n }\r\n const enter2 = raycast(planeNormalNeg, planeDist, pointOnCollider, colDirVec);\r\n if (enter2 !== null) {\r\n const ip = Vector3.scale(colDirVec, enter2, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const intersecToEnd = Vector3.sub(endVec, ip, _surfaceIntersecToEnd);\r\n const colToEnd = Vector3.sub(endVec, pointOnCollider, _surfaceColToEnd);\r\n const colToIntersect = Vector3.sub(ip, pointOnCollider, _surfaceColToIntersect);\r\n const pDot = Vector3.dot(intersecToEnd, colToIntersect);\r\n const lDot = Vector3.dot(colToEnd, colToEnd);\r\n if (!(pDot >= 0 && pDot <= lDot)) {\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n }\r\n const dotVal = Vector3.dot(colToEnd, colToIntersect);\r\n const s2eMag = Vector3.dot(colToEnd, colToEnd);\r\n const colToEndN = Vector3.normalize(colToEnd, colToEnd);\r\n const eVec = Vector3.scale(colToEndN, -radius, _surfaceEVec);\r\n Vector3.add(pointOnCollider, eVec, eVec);\r\n const pushOut = Vector3.sub(ip, eVec, _surfacePushOut);\r\n const poc2 = Vector3.scale(colToEnd, dotVal / s2eMag, _surfacePoc2);\r\n Vector3.add(pointOnCollider, poc2, poc2);\r\n const toCol = Vector3.sub(poc2, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, poc2, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n}\r\n\r\n// Helpers\r\n\r\nfunction raycast(normal: Vector3, planeDist: number, origin: Vector3, direction: Vector3): number | null {\r\n const vdot = Vector3.dot(direction, normal);\r\n const ndot = -Vector3.dot(origin, normal) - planeDist;\r\n if (Math.abs(vdot) <= EPSILON) {\r\n return null;\r\n }\r\n const enter = ndot / vdot;\r\n return enter > 0 ? enter : null;\r\n}\r\n\r\nfunction centerOfTriangle(a: Vector3, b: Vector3, c: Vector3, result?: Vector3): Vector3 {\r\n result = result || new Vector3();\r\n return result.setXYZ((a.x + b.x + c.x) / 3, (a.y + b.y + c.y) / 3, (a.z + b.z + c.z) / 3);\r\n}\r\n\r\nfunction triangleContainsPoint(a: Vector3, b: Vector3, c: Vector3, p: Vector3): boolean {\r\n const ap = Vector3.sub(a, p, _triangleAp);\r\n const bp = Vector3.sub(b, p, _triangleBp);\r\n const cp = Vector3.sub(c, p, _triangleCp);\r\n const u = Vector3.cross(ap, bp, _triangleU);\r\n const vv = Vector3.cross(bp, cp, _triangleV);\r\n const w = Vector3.cross(cp, ap, _triangleW);\r\n if (Vector3.dot(u, vv) < 0) {\r\n return false;\r\n }\r\n if (Vector3.dot(vv, w) < 0) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction lerp(a: number, b: number, t: number): number {\r\n return a + (b - a) * t;\r\n}\r\n"],"names":["_pushoutSphereDirection","Vector3","_pushoutSphereScaled","_pushoutCapsuleVecN","_pushoutCapsuleTargetVec","_pushoutCapsuleTail","_pushoutCapsulePosOnVec","_pushoutCapsulePushVec","_pushoutCapsuleScaled","_pushInSphereDirection","_pushInSphereDirectionN","_pushInSphereScaled","_pushInCapsuleVecN","_pushInCapsuleTargetVec","_pushInCapsuleTail","_pushInCapsulePosOnVec","_pushInCapsulePullVec","_pushInCapsulePullVecN","_pushInCapsuleScaled","_collisionSphereDir","_collisionSphereDirN","_collisionSphereToCenter","_collisionSphereScaled","_collisionSphereDiff","_collisionCapsuleTail","_collisionCapsulePointDir","_collisionCapsulePtOnCol","_collisionCapsulePtOnLine","_collisionCapsuleDiff","_collisionCapsuleTempLineResult","hit","pointOnLine","pointOnCollider","radius","_nearestCross0","_nearestCross1","_nearestN1","_nearestN2","_nearestPosDiff","_nearestPointOnP","_nearestPointOnQ","_nearestPointDiff","_nearestResult","tP","tQ","pointOnP","pointOnQ","sqrDistance","_surfaceNoHit","intersectionPoint","pushOut","_surfaceTriCenter","_surfaceEdgeAB","_surfaceEdgeAC","_surfacePlaneNormal","_surfacePlaneNormalNeg","_surfaceColliderDir","_surfaceRayDir","_surfaceRayDirN","_surfaceTail","_surfaceIntersection","_surfacePushOut","_surfaceToCol","_surfaceEndVec","_surfaceColDirVec","_surfaceIntersecToEnd","_surfaceColToEnd","_surfaceColToIntersect","_surfaceEVec","_surfacePoc2","_triangleAp","_triangleBp","_triangleCp","_triangleU","_triangleV","_triangleW","writeCollisionResult","out","point","copyPoint","clone","set","writeLineCollisionResult","copyVectors","writeSurfaceCheckResult","writeNearestPointsResult","pushoutFromSphere","center","pointRadius","direction","sub","sqrLen","magnitudeSq","EPSILON","dirLen","Math","sqrt","scaled","scale","add","pushoutFromCollider","colR","colRW","ptR","height","positionCurrent","pushoutFromCapsule","capsuleVec","directionCurrent","capsuleVecN","normalize","capsulePos","targetVec","distOnVec","dot","tail","radiusTailScale","posOnVec","pushVec","sqrPushDist","pushDist","r","lerp","pushInFromSphere","directionN","pushInFromCollider","pushInFromCapsule","pullVec","sqrPullDist","pullDist","pullVecN","collisionDetectionSphere","point1","point2","dir","magnitude","dirN","toCenter","clamped","max","min","ptOnLine","diff","collisionDetectionCapsule","capsuleDir","res","pointDir","nearest","computeNearestPoints","t1","t2","ptOnCol","collisionDetection","pushInCollisionDetection","posP","dirP","posQ","dirQ","cross0","cross","n1","cross1","n2","dP_n2","dQ_n1","posDiff","checkSurfaceCollision","ptA","ptB","ptC","colliderPos","setXYZ","isCapsule","triCenter","centerOfTriangle","edgeAB","edgeAC","planeNormal","planeNormalNeg","planeDist","colliderDir","side","rayDir","tempPOC","rayDirN","enter","raycast","ip","triangleContainsPoint","toCol","forceType","ColliderForce","Off","endVec","colDirVec","Pull","tmp","enter2","intersecToEnd","colToEnd","colToIntersect","pDot","lDot","dotVal","s2eMag","colToEndN","eVec","poc2","normal","origin","vdot","ndot","abs","a","b","c","result","x","y","z","p","ap","bp","cp","u","vv","w","t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collision.js","sources":["../../../src/animation/joint_dynamics/collision.ts"],"sourcesContent":["// Collision detection & response - direct port of SPCRJointDynamicsJob.cs Collision class\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { ColliderR, ColliderRW, PointR } from './types';\r\nimport { EPSILON, ColliderForce } from './types';\r\n\r\n/** @public */\r\nexport interface CollisionResult {\r\n hit: boolean;\r\n point: Vector3;\r\n}\r\n\r\n/** @public */\r\nexport interface LineCollisionResult {\r\n hit: boolean;\r\n pointOnLine: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\n/** @public */\r\nexport interface SurfaceCheckResult {\r\n hit: boolean;\r\n intersectionPoint: Vector3;\r\n pushOut: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\n/** @public */\r\nexport interface NearestPointsResult {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n}\r\n\r\nconst _pushoutSphereDirection = new Vector3();\r\nconst _pushoutSphereScaled = new Vector3();\r\nconst _pushoutCapsuleVecN = new Vector3();\r\nconst _pushoutCapsuleTargetVec = new Vector3();\r\nconst _pushoutCapsuleTail = new Vector3();\r\nconst _pushoutCapsulePosOnVec = new Vector3();\r\nconst _pushoutCapsulePushVec = new Vector3();\r\nconst _pushoutCapsuleScaled = new Vector3();\r\nconst _pushInSphereDirection = new Vector3();\r\nconst _pushInSphereDirectionN = new Vector3();\r\nconst _pushInSphereScaled = new Vector3();\r\nconst _pushInCapsuleVecN = new Vector3();\r\nconst _pushInCapsuleTargetVec = new Vector3();\r\nconst _pushInCapsuleTail = new Vector3();\r\nconst _pushInCapsulePosOnVec = new Vector3();\r\nconst _pushInCapsulePullVec = new Vector3();\r\nconst _pushInCapsulePullVecN = new Vector3();\r\nconst _pushInCapsuleScaled = new Vector3();\r\nconst _collisionSphereDir = new Vector3();\r\nconst _collisionSphereDirN = new Vector3();\r\nconst _collisionSphereToCenter = new Vector3();\r\nconst _collisionSphereScaled = new Vector3();\r\nconst _collisionSphereDiff = new Vector3();\r\nconst _collisionCapsuleTail = new Vector3();\r\nconst _collisionCapsulePointDir = new Vector3();\r\nconst _collisionCapsulePtOnCol = new Vector3();\r\nconst _collisionCapsulePtOnLine = new Vector3();\r\nconst _collisionCapsuleDiff = new Vector3();\r\nconst _collisionCapsuleTempLineResult: LineCollisionResult = {\r\n hit: false,\r\n pointOnLine: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _nearestCross0 = new Vector3();\r\nconst _nearestCross1 = new Vector3();\r\nconst _nearestN1 = new Vector3();\r\nconst _nearestN2 = new Vector3();\r\nconst _nearestPosDiff = new Vector3();\r\nconst _nearestPointOnP = new Vector3();\r\nconst _nearestPointOnQ = new Vector3();\r\nconst _nearestPointDiff = new Vector3();\r\nconst _nearestResult: NearestPointsResult = {\r\n tP: 0,\r\n tQ: 0,\r\n pointOnP: new Vector3(),\r\n pointOnQ: new Vector3(),\r\n sqrDistance: 0\r\n};\r\nconst _surfaceNoHit: SurfaceCheckResult = {\r\n hit: false,\r\n intersectionPoint: new Vector3(),\r\n pushOut: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _surfaceTriCenter = new Vector3();\r\nconst _surfaceEdgeAB = new Vector3();\r\nconst _surfaceEdgeAC = new Vector3();\r\nconst _surfacePlaneNormal = new Vector3();\r\nconst _surfacePlaneNormalNeg = new Vector3();\r\nconst _surfaceColliderDir = new Vector3();\r\nconst _surfaceRayDir = new Vector3();\r\nconst _surfaceRayDirN = new Vector3();\r\nconst _surfaceTail = new Vector3();\r\nconst _surfaceIntersection = new Vector3();\r\nconst _surfacePushOut = new Vector3();\r\nconst _surfaceToCol = new Vector3();\r\nconst _surfaceEndVec = new Vector3();\r\nconst _surfaceColDirVec = new Vector3();\r\nconst _surfaceIntersecToEnd = new Vector3();\r\nconst _surfaceColToEnd = new Vector3();\r\nconst _surfaceColToIntersect = new Vector3();\r\nconst _surfaceEVec = new Vector3();\r\nconst _surfacePoc2 = new Vector3();\r\nconst _triangleAp = new Vector3();\r\nconst _triangleBp = new Vector3();\r\nconst _triangleCp = new Vector3();\r\nconst _triangleU = new Vector3();\r\nconst _triangleV = new Vector3();\r\nconst _triangleW = new Vector3();\r\n\r\nfunction writeCollisionResult(\r\n out: CollisionResult | undefined,\r\n hit: boolean,\r\n point: Vector3,\r\n copyPoint: boolean\r\n) {\r\n if (!out) {\r\n return { hit, point: copyPoint ? point.clone() : point };\r\n }\r\n if (!out.point) {\r\n out.point = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.point.set(point);\r\n return out;\r\n}\r\n\r\nfunction writeLineCollisionResult(\r\n out: LineCollisionResult | undefined,\r\n hit: boolean,\r\n pointOnLine: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n pointOnLine: copyVectors ? pointOnLine.clone() : pointOnLine,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.pointOnLine) {\r\n out.pointOnLine = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.pointOnLine.set(pointOnLine);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeSurfaceCheckResult(\r\n out: SurfaceCheckResult | undefined,\r\n hit: boolean,\r\n intersectionPoint: Vector3,\r\n pushOut: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n intersectionPoint: copyVectors ? intersectionPoint.clone() : intersectionPoint,\r\n pushOut: copyVectors ? pushOut.clone() : pushOut,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.intersectionPoint) {\r\n out.intersectionPoint = new Vector3();\r\n }\r\n if (!out.pushOut) {\r\n out.pushOut = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.intersectionPoint.set(intersectionPoint);\r\n out.pushOut.set(pushOut);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeNearestPointsResult(\r\n out: NearestPointsResult | undefined,\r\n tP: number,\r\n tQ: number,\r\n pointOnP: Vector3,\r\n pointOnQ: Vector3,\r\n sqrDistance: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n tP,\r\n tQ,\r\n pointOnP: copyVectors ? pointOnP.clone() : pointOnP,\r\n pointOnQ: copyVectors ? pointOnQ.clone() : pointOnQ,\r\n sqrDistance\r\n };\r\n }\r\n out.tP = tP;\r\n out.tQ = tQ;\r\n out.pointOnP.set(pointOnP);\r\n out.pointOnQ.set(pointOnQ);\r\n out.sqrDistance = sqrDistance;\r\n return out;\r\n}\r\n\r\n// Pushout (keep point outside collider)\r\n\r\n/**\r\n * Pushes a point out of a sphere collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n pointRadius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(point, center, _pushoutSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON) {\r\n const dirLen = Math.sqrt(sqrLen) - pointRadius;\r\n if (dirLen < radius) {\r\n const scaled = Vector3.scale(direction, radius / dirLen, _pushoutSphereScaled);\r\n Vector3.add(center, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pushes a point out of a collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushoutFromSphere(colRW.positionCurrent, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n return pushoutFromCapsule(colR, colRW, point, ptR, out);\r\n}\r\n\r\n/**\r\n * Pushes a point out of a capsule collider.\r\n *\r\n * @public\r\n */\r\nexport function pushoutFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushoutCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushoutCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushoutFromSphere(capsulePos, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n if (distOnVec >= colR.height) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushoutCapsuleTail);\r\n return pushoutFromSphere(tail, colRW.radius * colR.radiusTailScale, ptR.pointRadius, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushoutCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pushVec = Vector3.sub(point, posOnVec, _pushoutCapsulePushVec);\r\n const sqrPushDist = pushVec.magnitudeSq;\r\n if (sqrPushDist > EPSILON) {\r\n const pushDist = Math.sqrt(sqrPushDist) - ptR.pointRadius;\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / colR.height);\r\n if (pushDist < r) {\r\n const scaled = Vector3.scale(pushVec, r / pushDist, _pushoutCapsuleScaled);\r\n Vector3.add(posOnVec, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n// PushIn (keep point inside collider - inverse mode)\r\n\r\n/**\r\n * Pulls a point inside a sphere collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(center, point, _pushInSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON && sqrLen > radius * radius) {\r\n const dirLen = Math.sqrt(sqrLen);\r\n const directionN = Vector3.normalize(direction, _pushInSphereDirectionN);\r\n const scaled = Vector3.scale(directionN, dirLen - radius, _pushInSphereScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushInFromSphere(colRW.positionCurrent, colRW.radius, point, out);\r\n }\r\n return pushInFromCapsule(colR, colRW, point, out);\r\n}\r\n\r\n/**\r\n * Pulls a point inside a capsule collider.\r\n *\r\n * @public\r\n */\r\nexport function pushInFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushInCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushInCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushInFromSphere(capsulePos, colRW.radius, point, out);\r\n }\r\n if (distOnVec >= colR.height) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushInCapsuleTail);\r\n return pushInFromSphere(tail, colRW.radius * colR.radiusTailScale, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushInCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pullVec = Vector3.sub(posOnVec, point, _pushInCapsulePullVec);\r\n const sqrPullDist = pullVec.magnitudeSq;\r\n if (sqrPullDist > EPSILON) {\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, colR.height / distOnVec);\r\n if (sqrPullDist > r * r) {\r\n const pullDist = Math.sqrt(sqrPullDist);\r\n const pullVecN = Vector3.normalize(pullVec, _pushInCapsulePullVecN);\r\n const scaled = Vector3.scale(pullVecN, pullDist - r, _pushInCapsuleScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n// Line segment vs collider detection\r\n\r\n/**\r\n * Performs sphere collision detection.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetectionSphere(\r\n center: Vector3,\r\n radius: number,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const dir = Vector3.sub(point2, point1, _collisionSphereDir);\r\n const dirLen = dir.magnitude;\r\n if (dirLen < EPSILON) {\r\n return writeLineCollisionResult(out, false, point1, center, radius, !out);\r\n }\r\n const dirN = Vector3.scale(dir, 1 / dirLen, _collisionSphereDirN);\r\n const toCenter = Vector3.sub(center, point1, _collisionSphereToCenter);\r\n const dot = Vector3.dot(dirN, toCenter);\r\n const clamped = Math.max(0, Math.min(dot, dirLen));\r\n const ptOnLine = Vector3.scale(dirN, clamped, _collisionSphereScaled);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(center, ptOnLine, _collisionSphereDiff);\r\n const hit = diff.magnitudeSq <= radius * radius;\r\n return writeLineCollisionResult(out, hit, ptOnLine, center, radius, !out);\r\n}\r\n\r\n/**\r\n * Performs capsule collision detection.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetectionCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const capsuleDir = colRW.directionCurrent;\r\n const capsulePos = colRW.positionCurrent;\r\n\r\n let res = collisionDetectionSphere(capsulePos, colRW.radius, point1, point2, out);\r\n if (res.hit) {\r\n return res;\r\n }\r\n\r\n const tail = Vector3.add(capsulePos, capsuleDir, _collisionCapsuleTail);\r\n res = collisionDetectionSphere(\r\n tail,\r\n colRW.radius * colR.radiusTailScale,\r\n point1,\r\n point2,\r\n _collisionCapsuleTempLineResult\r\n );\r\n if (res.hit) {\r\n return writeLineCollisionResult(out, true, res.pointOnLine, res.pointOnCollider, res.radius, !out);\r\n }\r\n\r\n const pointDir = Vector3.sub(point2, point1, _collisionCapsulePointDir);\r\n const nearest = computeNearestPoints(capsulePos, capsuleDir, point1, pointDir, _nearestResult);\r\n const t1 = Math.max(0, Math.min(1, nearest.tP));\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, t1);\r\n\r\n if (nearest.sqrDistance > r * r) {\r\n return writeLineCollisionResult(out, false, point1, capsulePos, r, !out);\r\n }\r\n\r\n const t2 = Math.max(0, Math.min(1, nearest.tQ));\r\n const ptOnCol = Vector3.scale(capsuleDir, t1, _collisionCapsulePtOnCol);\r\n Vector3.add(capsulePos, ptOnCol, ptOnCol);\r\n const ptOnLine = Vector3.scale(pointDir, t2, _collisionCapsulePtOnLine);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(ptOnCol, ptOnLine, _collisionCapsuleDiff);\r\n const hit = diff.magnitudeSq <= r * r;\r\n return writeLineCollisionResult(out, hit, ptOnLine, ptOnCol, r, !out);\r\n}\r\n\r\n/**\r\n * Performs collision detection against the specified collider.\r\n *\r\n * @public\r\n */\r\nexport function collisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n return collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n}\r\n\r\n/**\r\n * Performs inward collision detection.\r\n *\r\n * @public\r\n */\r\nexport function pushInCollisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n const res = collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n res.hit = false;\r\n return res;\r\n}\r\n\r\n// Nearest points between two line segments\r\n\r\n/**\r\n * Computes the nearest points between two segments.\r\n *\r\n * @public\r\n */\r\nexport function computeNearestPoints(\r\n posP: Vector3,\r\n dirP: Vector3,\r\n posQ: Vector3,\r\n dirQ: Vector3,\r\n out?: NearestPointsResult\r\n): {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n} {\r\n const cross0 = Vector3.cross(dirQ, dirP, _nearestCross0);\r\n const n1 = Vector3.cross(dirP, cross0, _nearestN1);\r\n const cross1 = Vector3.cross(dirP, dirQ, _nearestCross1);\r\n const n2 = Vector3.cross(dirQ, cross1, _nearestN2);\r\n const dP_n2 = Vector3.dot(dirP, n2);\r\n const dQ_n1 = Vector3.dot(dirQ, n1);\r\n const posDiff = Vector3.sub(posQ, posP, _nearestPosDiff);\r\n const tP = dP_n2 !== 0 ? Vector3.dot(posDiff, n2) / dP_n2 : 0;\r\n const tQ = dQ_n1 !== 0 ? Vector3.dot(Vector3.scale(posDiff, -1, posDiff), n1) / dQ_n1 : 0;\r\n const pointOnP = Vector3.scale(dirP, tP, _nearestPointOnP);\r\n Vector3.add(posP, pointOnP, pointOnP);\r\n const pointOnQ = Vector3.scale(dirQ, tQ, _nearestPointOnQ);\r\n Vector3.add(posQ, pointOnQ, pointOnQ);\r\n const diff = Vector3.sub(pointOnQ, pointOnP, _nearestPointDiff);\r\n return writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, diff.magnitudeSq, !out);\r\n}\r\n\r\n// Surface collision (triangle-based)\r\n\r\n/**\r\n * Checks triangle-surface collision against a collider.\r\n *\r\n * @public\r\n */\r\nexport function checkSurfaceCollision(\r\n ptA: Vector3,\r\n ptB: Vector3,\r\n ptC: Vector3,\r\n colliderPos: Vector3,\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n out?: SurfaceCheckResult\r\n): SurfaceCheckResult {\r\n _surfaceNoHit.hit = false;\r\n _surfaceNoHit.intersectionPoint.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pushOut.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pointOnCollider.set(colliderPos);\r\n _surfaceNoHit.radius = colRW.radius;\r\n\r\n let pointOnCollider = colliderPos;\r\n let radius = colRW.radius;\r\n const isCapsule = colR.height > EPSILON;\r\n\r\n const triCenter = centerOfTriangle(ptA, ptB, ptC, _surfaceTriCenter);\r\n const edgeAB = Vector3.sub(ptB, ptA, _surfaceEdgeAB);\r\n const edgeAC = Vector3.sub(ptC, ptA, _surfaceEdgeAC);\r\n const planeNormal = Vector3.cross(edgeAB, edgeAC, _surfacePlaneNormal);\r\n Vector3.normalize(planeNormal, planeNormal);\r\n Vector3.scale(planeNormal, -1, planeNormal);\r\n const planeNormalNeg = Vector3.scale(planeNormal, -1, _surfacePlaneNormalNeg);\r\n const planeDist = -Vector3.dot(planeNormalNeg, ptA);\r\n const colliderDir = Vector3.sub(colliderPos, triCenter, _surfaceColliderDir);\r\n Vector3.normalize(colliderDir, colliderDir);\r\n const dot = Vector3.dot(colliderDir, planeNormal);\r\n\r\n if (isCapsule) {\r\n const side = Vector3.dot(colRW.directionCurrent, planeNormal) * dot;\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const tempPOC = pointOnCollider;\r\n\r\n if (side < 0) {\r\n radius = colRW.radius * colR.radiusTailScale;\r\n pointOnCollider = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceTail);\r\n }\r\n\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n } else if (colR.forceType !== ColliderForce.Off) {\r\n pointOnCollider = tempPOC;\r\n let endVec = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceEndVec);\r\n _surfaceColDirVec.set(colRW.directionCurrent);\r\n let colDirVec = _surfaceColDirVec;\r\n if (colR.forceType === ColliderForce.Pull) {\r\n const tmp = pointOnCollider;\r\n pointOnCollider = endVec;\r\n endVec = tmp;\r\n colDirVec = Vector3.scale(colDirVec, -1, colDirVec);\r\n }\r\n const enter2 = raycast(planeNormalNeg, planeDist, pointOnCollider, colDirVec);\r\n if (enter2 !== null) {\r\n const ip = Vector3.scale(colDirVec, enter2, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const intersecToEnd = Vector3.sub(endVec, ip, _surfaceIntersecToEnd);\r\n const colToEnd = Vector3.sub(endVec, pointOnCollider, _surfaceColToEnd);\r\n const colToIntersect = Vector3.sub(ip, pointOnCollider, _surfaceColToIntersect);\r\n const pDot = Vector3.dot(intersecToEnd, colToIntersect);\r\n const lDot = Vector3.dot(colToEnd, colToEnd);\r\n if (!(pDot >= 0 && pDot <= lDot)) {\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n }\r\n const dotVal = Vector3.dot(colToEnd, colToIntersect);\r\n const s2eMag = Vector3.dot(colToEnd, colToEnd);\r\n const colToEndN = Vector3.normalize(colToEnd, colToEnd);\r\n const eVec = Vector3.scale(colToEndN, -radius, _surfaceEVec);\r\n Vector3.add(pointOnCollider, eVec, eVec);\r\n const pushOut = Vector3.sub(ip, eVec, _surfacePushOut);\r\n const poc2 = Vector3.scale(colToEnd, dotVal / s2eMag, _surfacePoc2);\r\n Vector3.add(pointOnCollider, poc2, poc2);\r\n const toCol = Vector3.sub(poc2, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, poc2, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n}\r\n\r\n// Helpers\r\n\r\nfunction raycast(normal: Vector3, planeDist: number, origin: Vector3, direction: Vector3): number | null {\r\n const vdot = Vector3.dot(direction, normal);\r\n const ndot = -Vector3.dot(origin, normal) - planeDist;\r\n if (Math.abs(vdot) <= EPSILON) {\r\n return null;\r\n }\r\n const enter = ndot / vdot;\r\n return enter > 0 ? enter : null;\r\n}\r\n\r\nfunction centerOfTriangle(a: Vector3, b: Vector3, c: Vector3, result?: Vector3): Vector3 {\r\n result = result || new Vector3();\r\n return result.setXYZ((a.x + b.x + c.x) / 3, (a.y + b.y + c.y) / 3, (a.z + b.z + c.z) / 3);\r\n}\r\n\r\nfunction triangleContainsPoint(a: Vector3, b: Vector3, c: Vector3, p: Vector3): boolean {\r\n const ap = Vector3.sub(a, p, _triangleAp);\r\n const bp = Vector3.sub(b, p, _triangleBp);\r\n const cp = Vector3.sub(c, p, _triangleCp);\r\n const u = Vector3.cross(ap, bp, _triangleU);\r\n const vv = Vector3.cross(bp, cp, _triangleV);\r\n const w = Vector3.cross(cp, ap, _triangleW);\r\n if (Vector3.dot(u, vv) < 0) {\r\n return false;\r\n }\r\n if (Vector3.dot(vv, w) < 0) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction lerp(a: number, b: number, t: number): number {\r\n return a + (b - a) * t;\r\n}\r\n"],"names":["_pushoutSphereDirection","Vector3","_pushoutSphereScaled","_pushoutCapsuleVecN","_pushoutCapsuleTargetVec","_pushoutCapsuleTail","_pushoutCapsulePosOnVec","_pushoutCapsulePushVec","_pushoutCapsuleScaled","_pushInSphereDirection","_pushInSphereDirectionN","_pushInSphereScaled","_pushInCapsuleVecN","_pushInCapsuleTargetVec","_pushInCapsuleTail","_pushInCapsulePosOnVec","_pushInCapsulePullVec","_pushInCapsulePullVecN","_pushInCapsuleScaled","_collisionSphereDir","_collisionSphereDirN","_collisionSphereToCenter","_collisionSphereScaled","_collisionSphereDiff","_collisionCapsuleTail","_collisionCapsulePointDir","_collisionCapsulePtOnCol","_collisionCapsulePtOnLine","_collisionCapsuleDiff","_collisionCapsuleTempLineResult","hit","pointOnLine","pointOnCollider","radius","_nearestCross0","_nearestCross1","_nearestN1","_nearestN2","_nearestPosDiff","_nearestPointOnP","_nearestPointOnQ","_nearestPointDiff","_nearestResult","tP","tQ","pointOnP","pointOnQ","sqrDistance","_surfaceNoHit","intersectionPoint","pushOut","_surfaceTriCenter","_surfaceEdgeAB","_surfaceEdgeAC","_surfacePlaneNormal","_surfacePlaneNormalNeg","_surfaceColliderDir","_surfaceRayDir","_surfaceRayDirN","_surfaceTail","_surfaceIntersection","_surfacePushOut","_surfaceToCol","_surfaceEndVec","_surfaceColDirVec","_surfaceIntersecToEnd","_surfaceColToEnd","_surfaceColToIntersect","_surfaceEVec","_surfacePoc2","_triangleAp","_triangleBp","_triangleCp","_triangleU","_triangleV","_triangleW","writeCollisionResult","out","point","copyPoint","clone","set","writeLineCollisionResult","copyVectors","writeSurfaceCheckResult","writeNearestPointsResult","pushoutFromSphere","center","pointRadius","direction","sub","sqrLen","magnitudeSq","EPSILON","dirLen","Math","sqrt","scaled","scale","add","pushoutFromCollider","colR","colRW","ptR","height","positionCurrent","pushoutFromCapsule","capsuleVec","directionCurrent","capsuleVecN","normalize","capsulePos","targetVec","distOnVec","dot","tail","radiusTailScale","posOnVec","pushVec","sqrPushDist","pushDist","r","lerp","pushInFromSphere","directionN","pushInFromCollider","pushInFromCapsule","pullVec","sqrPullDist","pullDist","pullVecN","collisionDetectionSphere","point1","point2","dir","magnitude","dirN","toCenter","clamped","max","min","ptOnLine","diff","collisionDetectionCapsule","capsuleDir","res","pointDir","nearest","computeNearestPoints","t1","t2","ptOnCol","collisionDetection","pushInCollisionDetection","posP","dirP","posQ","dirQ","cross0","cross","n1","cross1","n2","dP_n2","dQ_n1","posDiff","checkSurfaceCollision","ptA","ptB","ptC","colliderPos","setXYZ","isCapsule","triCenter","centerOfTriangle","edgeAB","edgeAC","planeNormal","planeNormalNeg","planeDist","colliderDir","side","rayDir","tempPOC","rayDirN","enter","raycast","ip","triangleContainsPoint","toCol","forceType","ColliderForce","Off","endVec","colDirVec","Pull","tmp","enter2","intersecToEnd","colToEnd","colToIntersect","pDot","lDot","dotVal","s2eMag","colToEndN","eVec","poc2","normal","origin","vdot","ndot","abs","a","b","c","result","x","y","z","p","ap","bp","cp","u","vv","w","t"],"mappings":"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"}
|
|
@@ -136,7 +136,11 @@ function createSurfaceFaces(a, b, out) {
|
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
// ── Public API ──
|
|
139
|
-
|
|
139
|
+
/**
|
|
140
|
+
* Builds solver constraints from the supplied root chains.
|
|
141
|
+
*
|
|
142
|
+
* @public
|
|
143
|
+
*/ function buildConstraints(rootPoints, options) {
|
|
140
144
|
const n = rootPoints.length;
|
|
141
145
|
const groups = [];
|
|
142
146
|
const addRaw = (raws, collide)=>{
|
|
@@ -227,7 +231,11 @@ function buildConstraints(rootPoints, options) {
|
|
|
227
231
|
// Flatten groups into single array
|
|
228
232
|
return groups.flat();
|
|
229
233
|
}
|
|
230
|
-
|
|
234
|
+
/**
|
|
235
|
+
* Builds triangle indices used for surface collision.
|
|
236
|
+
*
|
|
237
|
+
* @public
|
|
238
|
+
*/ function buildSurfaceFaces(rootPoints, isLoop) {
|
|
231
239
|
const out = [];
|
|
232
240
|
const n = rootPoints.length;
|
|
233
241
|
for(let i = 0; i < n - 1; i++){
|
|
@@ -238,7 +246,11 @@ function buildSurfaceFaces(rootPoints, isLoop) {
|
|
|
238
246
|
}
|
|
239
247
|
return out;
|
|
240
248
|
}
|
|
241
|
-
|
|
249
|
+
/**
|
|
250
|
+
* Computes the maximum chain depth among all root points.
|
|
251
|
+
*
|
|
252
|
+
* @public
|
|
253
|
+
*/ function computeMaxDepth(rootPoints) {
|
|
242
254
|
let max = 0;
|
|
243
255
|
function walk(node) {
|
|
244
256
|
if (node.depth > max) {
|
|
@@ -253,7 +265,11 @@ function computeMaxDepth(rootPoints) {
|
|
|
253
265
|
}
|
|
254
266
|
return max;
|
|
255
267
|
}
|
|
256
|
-
|
|
268
|
+
/**
|
|
269
|
+
* Sorts root points by proximity to the supplied reference position.
|
|
270
|
+
*
|
|
271
|
+
* @public
|
|
272
|
+
*/ function sortRootPointsByProximity(roots, ignoreY, fixedBeginEnd) {
|
|
257
273
|
if (roots.length <= 2) {
|
|
258
274
|
return [
|
|
259
275
|
...roots
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.js","sources":["../../../src/animation/joint_dynamics/constraints.ts"],"sourcesContent":["// Constraint creation utilities — port of SPCRJointDynamicsController constraint building\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport { ConstraintType, type Constraint, type BoneNode } from './types';\r\n\r\n/** Options for constraint generation from bone hierarchy */\r\nexport interface ConstraintBuildOptions {\r\n /** Generate parent→child vertical constraints */\r\n structuralVertical: boolean;\r\n /** Generate same-depth horizontal constraints across chains */\r\n structuralHorizontal: boolean;\r\n /** Generate diagonal cross-bracing constraints */\r\n shear: boolean;\r\n /** Generate skip-one vertical bending constraints */\r\n bendingVertical: boolean;\r\n /** Generate skip-one horizontal bending constraints */\r\n bendingHorizontal: boolean;\r\n /** Connect last root point back to first (for cylindrical topology like skirts) */\r\n isLoop: boolean;\r\n /** Enable per-constraint collision detection on structural vertical pairs */\r\n collideStructuralVertical: boolean;\r\n /** Enable per-constraint collision detection on structural horizontal pairs */\r\n collideStructuralHorizontal: boolean;\r\n /** Enable per-constraint collision detection on shear pairs */\r\n collideShear: boolean;\r\n /** Enable surface/triangle collision (overrides per-type collision flags) */\r\n enableSurfaceCollision: boolean;\r\n}\r\n\r\ninterface RawConstraint {\r\n type: ConstraintType;\r\n indexA: number;\r\n indexB: number;\r\n length: number;\r\n}\r\n\r\nfunction getFirstChild(node: BoneNode): BoneNode | null {\r\n return node.children.length > 0 ? node.children[0] : null;\r\n}\r\n\r\nfunction constraintLength(a: BoneNode, b: BoneNode): number {\r\n return Vector3.distance(a.position, b.position);\r\n}\r\n\r\n// ── Structural Vertical: parent→child chains ──\r\n\r\nfunction createStructuralVertical(node: BoneNode, out: RawConstraint[]) {\r\n for (const child of node.children) {\r\n out.push({\r\n type: ConstraintType.Structural_Vertical,\r\n indexA: node.index,\r\n indexB: child.index,\r\n length: constraintLength(node, child)\r\n });\r\n createStructuralVertical(child, out);\r\n }\r\n}\r\n\r\n// ── Structural Horizontal: same-depth siblings across chains ──\r\n\r\nfunction createHorizontal(\r\n a: BoneNode | null,\r\n b: BoneNode | null,\r\n type: ConstraintType,\r\n out: RawConstraint[]\r\n) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const childA = getFirstChild(a);\r\n const childB = getFirstChild(b);\r\n\r\n if (childA && childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: childB.index,\r\n length: constraintLength(childA, childB)\r\n });\r\n createHorizontal(childA, childB, type, out);\r\n } else if (childA && !childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: b.index,\r\n length: constraintLength(childA, b)\r\n });\r\n } else if (!childA && childB) {\r\n out.push({\r\n type,\r\n indexA: a.index,\r\n indexB: childB.index,\r\n length: constraintLength(a, childB)\r\n });\r\n }\r\n}\r\n\r\n// ── Shear: diagonal cross-bracing ──\r\n\r\nfunction createShear(a: BoneNode | null, b: BoneNode | null, out: RawConstraint[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n const cA2 = cA ? getFirstChild(cA) : null;\r\n const cB2 = cB ? getFirstChild(cB) : null;\r\n const cA3 = cA2 ? getFirstChild(cA2) : null;\r\n const cB3 = cB2 ? getFirstChild(cB2) : null;\r\n\r\n const target1 = cA ?? cA2 ?? cA3;\r\n if (target1) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: target1.index,\r\n indexB: b.index,\r\n length: constraintLength(target1, b)\r\n });\r\n }\r\n\r\n const target2 = cB ?? cB2 ?? cB3;\r\n if (target2) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: a.index,\r\n indexB: target2.index,\r\n length: constraintLength(a, target2)\r\n });\r\n }\r\n\r\n createShear(cA, cB, out);\r\n}\r\n\r\n// ── Bending Vertical: skip-one (grandparent→grandchild) ──\r\n\r\nfunction createBendingVertical(node: BoneNode, out: RawConstraint[]) {\r\n if (node.children.length !== 1) {\r\n return;\r\n }\r\n const childA = node.children[0];\r\n if (childA.children.length !== 1) {\r\n return;\r\n }\r\n const childB = childA.children[0];\r\n\r\n out.push({\r\n type: ConstraintType.Bending_Vertical,\r\n indexA: node.index,\r\n indexB: childB.index,\r\n length: constraintLength(node, childB)\r\n });\r\n createBendingVertical(childA, out);\r\n}\r\n\r\n// ── Constraint grouping (no shared point indices per group) ──\r\n\r\nfunction findSameIndex(group: Constraint[], c: Constraint): boolean {\r\n for (const g of group) {\r\n if (g.indexA === c.indexA || g.indexA === c.indexB || g.indexB === c.indexA || g.indexB === c.indexB) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction pushToGroups(groups: Constraint[][], c: Constraint) {\r\n for (const g of groups) {\r\n if (!findSameIndex(g, c)) {\r\n g.push(c);\r\n return;\r\n }\r\n }\r\n groups.push([c]);\r\n}\r\n\r\n// ── Surface faces (quads → 2 triangles of 3 indices) ──\r\n\r\nfunction createSurfaceFaces(a: BoneNode | null, b: BoneNode | null, out: number[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n if (cA && cB) {\r\n if (\r\n a.useForSurfaceCollision !== false &&\r\n b.useForSurfaceCollision !== false &&\r\n cA.useForSurfaceCollision !== false &&\r\n cB.useForSurfaceCollision !== false\r\n ) {\r\n // Quad ABCD → triangles ABC, CDA\r\n out.push(a.index, b.index, cB.index, cB.index, cA.index, a.index);\r\n }\r\n createSurfaceFaces(cA, cB, out);\r\n }\r\n}\r\n\r\n// ── Public API ──\r\n\r\nexport function buildConstraints(rootPoints: BoneNode[], options: ConstraintBuildOptions): Constraint[] {\r\n const n = rootPoints.length;\r\n const groups: Constraint[][] = [];\r\n\r\n const addRaw = (raws: RawConstraint[], collide: boolean) => {\r\n for (const r of raws) {\r\n const bothFixed = isBoneFixed(rootPoints, r.indexA) && isBoneFixed(rootPoints, r.indexB);\r\n pushToGroups(groups, {\r\n type: r.type,\r\n indexA: r.indexA,\r\n indexB: r.indexB,\r\n length: r.length,\r\n isCollision: !bothFixed && collide ? 1 : 0\r\n });\r\n }\r\n };\r\n\r\n // Bending Horizontal\r\n if (options.bendingHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 2) % n])\r\n : Array.from({ length: Math.max(0, n - 2) }, (_, i) => [i, i + 2]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Bending_Horizontal, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Bending Vertical\r\n if (options.bendingVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createBendingVertical(root, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Shear\r\n if (options.shear) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createShear(rootPoints[a], rootPoints[b], raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideShear);\r\n }\r\n\r\n // Structural Horizontal\r\n if (options.structuralHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Structural_Horizontal, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralHorizontal);\r\n }\r\n\r\n // Structural Vertical\r\n if (options.structuralVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createStructuralVertical(root, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralVertical);\r\n }\r\n\r\n // Flatten groups into single array\r\n return groups.flat();\r\n}\r\n\r\nexport function buildSurfaceFaces(rootPoints: BoneNode[], isLoop: boolean): number[] {\r\n const out: number[] = [];\r\n const n = rootPoints.length;\r\n for (let i = 0; i < n - 1; i++) {\r\n createSurfaceFaces(rootPoints[i], rootPoints[i + 1], out);\r\n }\r\n if (isLoop && n > 1) {\r\n createSurfaceFaces(rootPoints[n - 1], rootPoints[0], out);\r\n }\r\n return out;\r\n}\r\n\r\nexport function computeMaxDepth(rootPoints: BoneNode[]): number {\r\n let max = 0;\r\n function walk(node: BoneNode) {\r\n if (node.depth > max) {\r\n max = node.depth;\r\n }\r\n for (const c of node.children) {\r\n walk(c);\r\n }\r\n }\r\n for (const r of rootPoints) {\r\n walk(r);\r\n }\r\n return max;\r\n}\r\n\r\nexport function sortRootPointsByProximity(\r\n roots: BoneNode[],\r\n ignoreY: boolean,\r\n fixedBeginEnd: boolean\r\n): BoneNode[] {\r\n if (roots.length <= 2) {\r\n return [...roots];\r\n }\r\n const sorted: BoneNode[] = [];\r\n const remaining = [...roots];\r\n\r\n if (fixedBeginEnd) {\r\n sorted.push(remaining.shift()!);\r\n const last = remaining.pop()!;\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n sorted.push(last);\r\n } else {\r\n sorted.push(remaining.shift()!);\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n }\r\n return sorted;\r\n}\r\n\r\n// ── Helpers ──\r\n\r\nfunction distXYZ(a: Vector3, b: Vector3, ignoreY: boolean): number {\r\n const dx = a.x - b.x,\r\n dz = a.z - b.z;\r\n const dy = ignoreY ? 0 : a.y - b.y;\r\n return dx * dx + dy * dy + dz * dz;\r\n}\r\n\r\n// Walk all nodes to find if a given index is fixed\r\nfunction isBoneFixed(roots: BoneNode[], index: number): boolean {\r\n function find(node: BoneNode): boolean {\r\n if (node.index === index) {\r\n return node.isFixed;\r\n }\r\n for (const c of node.children) {\r\n const r = find(c);\r\n if (r !== undefined) {\r\n return r;\r\n }\r\n }\r\n return false;\r\n }\r\n for (const r of roots) {\r\n const res = find(r);\r\n if (res) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n"],"names":["getFirstChild","node","children","length","constraintLength","a","b","Vector3","distance","position","createStructuralVertical","out","child","push","type","ConstraintType","Structural_Vertical","indexA","index","indexB","createHorizontal","childA","childB","createShear","cA","cB","cA2","cB2","cA3","cB3","target1","Shear","target2","createBendingVertical","Bending_Vertical","findSameIndex","group","c","g","pushToGroups","groups","createSurfaceFaces","useForSurfaceCollision","buildConstraints","rootPoints","options","n","addRaw","raws","collide","r","bothFixed","isBoneFixed","isCollision","bendingHorizontal","raw","pairs","isLoop","Array","from","_","i","Math","max","Bending_Horizontal","bendingVertical","root","shear","enableSurfaceCollision","collideShear","structuralHorizontal","Structural_Horizontal","collideStructuralHorizontal","structuralVertical","collideStructuralVertical","flat","buildSurfaceFaces","computeMaxDepth","walk","depth","sortRootPointsByProximity","roots","ignoreY","fixedBeginEnd","sorted","remaining","shift","last","pop","cur","bestIdx","bestDist","Infinity","d","distXYZ","splice","dx","x","dz","z","dy","y","find","isFixed","undefined","res"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constraints.js","sources":["../../../src/animation/joint_dynamics/constraints.ts"],"sourcesContent":["// Constraint creation utilities — port of SPCRJointDynamicsController constraint building\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport { ConstraintType, type Constraint, type BoneNode } from './types';\r\n\r\n/**\r\n * Options for constraint generation from a bone hierarchy.\r\n *\r\n * @public\r\n */\r\nexport interface ConstraintBuildOptions {\r\n /** Generate parent→child vertical constraints */\r\n structuralVertical: boolean;\r\n /** Generate same-depth horizontal constraints across chains */\r\n structuralHorizontal: boolean;\r\n /** Generate diagonal cross-bracing constraints */\r\n shear: boolean;\r\n /** Generate skip-one vertical bending constraints */\r\n bendingVertical: boolean;\r\n /** Generate skip-one horizontal bending constraints */\r\n bendingHorizontal: boolean;\r\n /** Connect last root point back to first (for cylindrical topology like skirts) */\r\n isLoop: boolean;\r\n /** Enable per-constraint collision detection on structural vertical pairs */\r\n collideStructuralVertical: boolean;\r\n /** Enable per-constraint collision detection on structural horizontal pairs */\r\n collideStructuralHorizontal: boolean;\r\n /** Enable per-constraint collision detection on shear pairs */\r\n collideShear: boolean;\r\n /** Enable surface/triangle collision (overrides per-type collision flags) */\r\n enableSurfaceCollision: boolean;\r\n}\r\n\r\ninterface RawConstraint {\r\n type: ConstraintType;\r\n indexA: number;\r\n indexB: number;\r\n length: number;\r\n}\r\n\r\nfunction getFirstChild(node: BoneNode): BoneNode | null {\r\n return node.children.length > 0 ? node.children[0] : null;\r\n}\r\n\r\nfunction constraintLength(a: BoneNode, b: BoneNode): number {\r\n return Vector3.distance(a.position, b.position);\r\n}\r\n\r\n// ── Structural Vertical: parent→child chains ──\r\n\r\nfunction createStructuralVertical(node: BoneNode, out: RawConstraint[]) {\r\n for (const child of node.children) {\r\n out.push({\r\n type: ConstraintType.Structural_Vertical,\r\n indexA: node.index,\r\n indexB: child.index,\r\n length: constraintLength(node, child)\r\n });\r\n createStructuralVertical(child, out);\r\n }\r\n}\r\n\r\n// ── Structural Horizontal: same-depth siblings across chains ──\r\n\r\nfunction createHorizontal(\r\n a: BoneNode | null,\r\n b: BoneNode | null,\r\n type: ConstraintType,\r\n out: RawConstraint[]\r\n) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const childA = getFirstChild(a);\r\n const childB = getFirstChild(b);\r\n\r\n if (childA && childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: childB.index,\r\n length: constraintLength(childA, childB)\r\n });\r\n createHorizontal(childA, childB, type, out);\r\n } else if (childA && !childB) {\r\n out.push({\r\n type,\r\n indexA: childA.index,\r\n indexB: b.index,\r\n length: constraintLength(childA, b)\r\n });\r\n } else if (!childA && childB) {\r\n out.push({\r\n type,\r\n indexA: a.index,\r\n indexB: childB.index,\r\n length: constraintLength(a, childB)\r\n });\r\n }\r\n}\r\n\r\n// ── Shear: diagonal cross-bracing ──\r\n\r\nfunction createShear(a: BoneNode | null, b: BoneNode | null, out: RawConstraint[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n const cA2 = cA ? getFirstChild(cA) : null;\r\n const cB2 = cB ? getFirstChild(cB) : null;\r\n const cA3 = cA2 ? getFirstChild(cA2) : null;\r\n const cB3 = cB2 ? getFirstChild(cB2) : null;\r\n\r\n const target1 = cA ?? cA2 ?? cA3;\r\n if (target1) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: target1.index,\r\n indexB: b.index,\r\n length: constraintLength(target1, b)\r\n });\r\n }\r\n\r\n const target2 = cB ?? cB2 ?? cB3;\r\n if (target2) {\r\n out.push({\r\n type: ConstraintType.Shear,\r\n indexA: a.index,\r\n indexB: target2.index,\r\n length: constraintLength(a, target2)\r\n });\r\n }\r\n\r\n createShear(cA, cB, out);\r\n}\r\n\r\n// ── Bending Vertical: skip-one (grandparent→grandchild) ──\r\n\r\nfunction createBendingVertical(node: BoneNode, out: RawConstraint[]) {\r\n if (node.children.length !== 1) {\r\n return;\r\n }\r\n const childA = node.children[0];\r\n if (childA.children.length !== 1) {\r\n return;\r\n }\r\n const childB = childA.children[0];\r\n\r\n out.push({\r\n type: ConstraintType.Bending_Vertical,\r\n indexA: node.index,\r\n indexB: childB.index,\r\n length: constraintLength(node, childB)\r\n });\r\n createBendingVertical(childA, out);\r\n}\r\n\r\n// ── Constraint grouping (no shared point indices per group) ──\r\n\r\nfunction findSameIndex(group: Constraint[], c: Constraint): boolean {\r\n for (const g of group) {\r\n if (g.indexA === c.indexA || g.indexA === c.indexB || g.indexB === c.indexA || g.indexB === c.indexB) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction pushToGroups(groups: Constraint[][], c: Constraint) {\r\n for (const g of groups) {\r\n if (!findSameIndex(g, c)) {\r\n g.push(c);\r\n return;\r\n }\r\n }\r\n groups.push([c]);\r\n}\r\n\r\n// ── Surface faces (quads → 2 triangles of 3 indices) ──\r\n\r\nfunction createSurfaceFaces(a: BoneNode | null, b: BoneNode | null, out: number[]) {\r\n if (!a || !b || a === b) {\r\n return;\r\n }\r\n const cA = getFirstChild(a);\r\n const cB = getFirstChild(b);\r\n if (cA && cB) {\r\n if (\r\n a.useForSurfaceCollision !== false &&\r\n b.useForSurfaceCollision !== false &&\r\n cA.useForSurfaceCollision !== false &&\r\n cB.useForSurfaceCollision !== false\r\n ) {\r\n // Quad ABCD → triangles ABC, CDA\r\n out.push(a.index, b.index, cB.index, cB.index, cA.index, a.index);\r\n }\r\n createSurfaceFaces(cA, cB, out);\r\n }\r\n}\r\n\r\n// ── Public API ──\r\n\r\n/**\r\n * Builds solver constraints from the supplied root chains.\r\n *\r\n * @public\r\n */\r\nexport function buildConstraints(rootPoints: BoneNode[], options: ConstraintBuildOptions): Constraint[] {\r\n const n = rootPoints.length;\r\n const groups: Constraint[][] = [];\r\n\r\n const addRaw = (raws: RawConstraint[], collide: boolean) => {\r\n for (const r of raws) {\r\n const bothFixed = isBoneFixed(rootPoints, r.indexA) && isBoneFixed(rootPoints, r.indexB);\r\n pushToGroups(groups, {\r\n type: r.type,\r\n indexA: r.indexA,\r\n indexB: r.indexB,\r\n length: r.length,\r\n isCollision: !bothFixed && collide ? 1 : 0\r\n });\r\n }\r\n };\r\n\r\n // Bending Horizontal\r\n if (options.bendingHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 2) % n])\r\n : Array.from({ length: Math.max(0, n - 2) }, (_, i) => [i, i + 2]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Bending_Horizontal, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Bending Vertical\r\n if (options.bendingVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createBendingVertical(root, raw);\r\n }\r\n addRaw(raw, false);\r\n }\r\n\r\n // Shear\r\n if (options.shear) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createShear(rootPoints[a], rootPoints[b], raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideShear);\r\n }\r\n\r\n // Structural Horizontal\r\n if (options.structuralHorizontal) {\r\n const raw: RawConstraint[] = [];\r\n const pairs = options.isLoop\r\n ? Array.from({ length: n }, (_, i) => [i, (i + 1) % n])\r\n : Array.from({ length: Math.max(0, n - 1) }, (_, i) => [i, i + 1]);\r\n for (const [a, b] of pairs) {\r\n createHorizontal(rootPoints[a], rootPoints[b], ConstraintType.Structural_Horizontal, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralHorizontal);\r\n }\r\n\r\n // Structural Vertical\r\n if (options.structuralVertical) {\r\n const raw: RawConstraint[] = [];\r\n for (const root of rootPoints) {\r\n createStructuralVertical(root, raw);\r\n }\r\n addRaw(raw, options.enableSurfaceCollision || options.collideStructuralVertical);\r\n }\r\n\r\n // Flatten groups into single array\r\n return groups.flat();\r\n}\r\n\r\n/**\r\n * Builds triangle indices used for surface collision.\r\n *\r\n * @public\r\n */\r\nexport function buildSurfaceFaces(rootPoints: BoneNode[], isLoop: boolean): number[] {\r\n const out: number[] = [];\r\n const n = rootPoints.length;\r\n for (let i = 0; i < n - 1; i++) {\r\n createSurfaceFaces(rootPoints[i], rootPoints[i + 1], out);\r\n }\r\n if (isLoop && n > 1) {\r\n createSurfaceFaces(rootPoints[n - 1], rootPoints[0], out);\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Computes the maximum chain depth among all root points.\r\n *\r\n * @public\r\n */\r\nexport function computeMaxDepth(rootPoints: BoneNode[]): number {\r\n let max = 0;\r\n function walk(node: BoneNode) {\r\n if (node.depth > max) {\r\n max = node.depth;\r\n }\r\n for (const c of node.children) {\r\n walk(c);\r\n }\r\n }\r\n for (const r of rootPoints) {\r\n walk(r);\r\n }\r\n return max;\r\n}\r\n\r\n/**\r\n * Sorts root points by proximity to the supplied reference position.\r\n *\r\n * @public\r\n */\r\nexport function sortRootPointsByProximity(\r\n roots: BoneNode[],\r\n ignoreY: boolean,\r\n fixedBeginEnd: boolean\r\n): BoneNode[] {\r\n if (roots.length <= 2) {\r\n return [...roots];\r\n }\r\n const sorted: BoneNode[] = [];\r\n const remaining = [...roots];\r\n\r\n if (fixedBeginEnd) {\r\n sorted.push(remaining.shift()!);\r\n const last = remaining.pop()!;\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n sorted.push(last);\r\n } else {\r\n sorted.push(remaining.shift()!);\r\n while (remaining.length > 0) {\r\n const cur = sorted[sorted.length - 1];\r\n let bestIdx = 0,\r\n bestDist = Infinity;\r\n for (let i = 0; i < remaining.length; i++) {\r\n const d = distXYZ(cur.position, remaining[i].position, ignoreY);\r\n if (d < bestDist) {\r\n bestDist = d;\r\n bestIdx = i;\r\n }\r\n }\r\n sorted.push(remaining.splice(bestIdx, 1)[0]);\r\n }\r\n }\r\n return sorted;\r\n}\r\n\r\n// ── Helpers ──\r\n\r\nfunction distXYZ(a: Vector3, b: Vector3, ignoreY: boolean): number {\r\n const dx = a.x - b.x,\r\n dz = a.z - b.z;\r\n const dy = ignoreY ? 0 : a.y - b.y;\r\n return dx * dx + dy * dy + dz * dz;\r\n}\r\n\r\n// Walk all nodes to find if a given index is fixed\r\nfunction isBoneFixed(roots: BoneNode[], index: number): boolean {\r\n function find(node: BoneNode): boolean {\r\n if (node.index === index) {\r\n return node.isFixed;\r\n }\r\n for (const c of node.children) {\r\n const r = find(c);\r\n if (r !== undefined) {\r\n return r;\r\n }\r\n }\r\n return false;\r\n }\r\n for (const r of roots) {\r\n const res = find(r);\r\n if (res) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n"],"names":["getFirstChild","node","children","length","constraintLength","a","b","Vector3","distance","position","createStructuralVertical","out","child","push","type","ConstraintType","Structural_Vertical","indexA","index","indexB","createHorizontal","childA","childB","createShear","cA","cB","cA2","cB2","cA3","cB3","target1","Shear","target2","createBendingVertical","Bending_Vertical","findSameIndex","group","c","g","pushToGroups","groups","createSurfaceFaces","useForSurfaceCollision","buildConstraints","rootPoints","options","n","addRaw","raws","collide","r","bothFixed","isBoneFixed","isCollision","bendingHorizontal","raw","pairs","isLoop","Array","from","_","i","Math","max","Bending_Horizontal","bendingVertical","root","shear","enableSurfaceCollision","collideShear","structuralHorizontal","Structural_Horizontal","collideStructuralHorizontal","structuralVertical","collideStructuralVertical","flat","buildSurfaceFaces","computeMaxDepth","walk","depth","sortRootPointsByProximity","roots","ignoreY","fixedBeginEnd","sorted","remaining","shift","last","pop","cur","bestIdx","bestDist","Infinity","d","distXYZ","splice","dx","x","dz","z","dy","y","find","isFixed","undefined","res"],"mappings":"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"}
|