1 |
- {"ast":null,"code":"import { BuildArray } from \"../Misc/arrayTools.js\";\nimport { TmpVectors } from \"../Maths/math.vector.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\nimport { BoundingBox } from \"./boundingBox.js\";\nimport { BoundingSphere } from \"./boundingSphere.js\";\nconst _result0 = {\n min: 0,\n max: 0\n};\nconst _result1 = {\n min: 0,\n max: 0\n};\nconst computeBoxExtents = (axis, box, result) => {\n const p = Vector3.Dot(box.centerWorld, axis);\n const r0 = Math.abs(Vector3.Dot(box.directions[0], axis)) * box.extendSize.x;\n const r1 = Math.abs(Vector3.Dot(box.directions[1], axis)) * box.extendSize.y;\n const r2 = Math.abs(Vector3.Dot(box.directions[2], axis)) * box.extendSize.z;\n const r = r0 + r1 + r2;\n result.min = p - r;\n result.max = p + r;\n};\nconst axisOverlap = (axis, box0, box1) => {\n computeBoxExtents(axis, box0, _result0);\n computeBoxExtents(axis, box1, _result1);\n return !(_result0.min > _result1.max || _result1.min > _result0.max);\n};\n/**\n * Info for a bounding data of a mesh\n */\nexport class BoundingInfo {\n /**\n * Constructs bounding info\n * @param minimum min vector of the bounding box/sphere\n * @param maximum max vector of the bounding box/sphere\n * @param worldMatrix defines the new world matrix\n */\n constructor(minimum, maximum, worldMatrix) {\n this._isLocked = false;\n this.boundingBox = new BoundingBox(minimum, maximum, worldMatrix);\n this.boundingSphere = new BoundingSphere(minimum, maximum, worldMatrix);\n }\n /**\n * Recreates the entire bounding info from scratch as if we call the constructor in place\n * @param min defines the new minimum vector (in local space)\n * @param max defines the new maximum vector (in local space)\n * @param worldMatrix defines the new world matrix\n */\n reConstruct(min, max, worldMatrix) {\n this.boundingBox.reConstruct(min, max, worldMatrix);\n this.boundingSphere.reConstruct(min, max, worldMatrix);\n }\n /**\n * min vector of the bounding box/sphere\n */\n get minimum() {\n return this.boundingBox.minimum;\n }\n /**\n * max vector of the bounding box/sphere\n */\n get maximum() {\n return this.boundingBox.maximum;\n }\n /**\n * If the info is locked and won't be updated to avoid perf overhead\n */\n get isLocked() {\n return this._isLocked;\n }\n set isLocked(value) {\n this._isLocked = value;\n }\n // Methods\n /**\n * Updates the bounding sphere and box\n * @param world world matrix to be used to update\n */\n update(world) {\n if (this._isLocked) {\n return;\n }\n this.boundingBox._update(world);\n this.boundingSphere._update(world);\n }\n /**\n * Recreate the bounding info to be centered around a specific point given a specific extend.\n * @param center New center of the bounding info\n * @param extend New extend of the bounding info\n * @returns the current bounding info\n */\n centerOn(center, extend) {\n const minimum = BoundingInfo._TmpVector3[0].copyFrom(center).subtractInPlace(extend);\n const maximum = BoundingInfo._TmpVector3[1].copyFrom(center).addInPlace(extend);\n this.boundingBox.reConstruct(minimum, maximum, this.boundingBox.getWorldMatrix());\n this.boundingSphere.reConstruct(minimum, maximum, this.boundingBox.getWorldMatrix());\n return this;\n }\n /**\n * Grows the bounding info to include the given point.\n * @param point The point that will be included in the current bounding info (in local space)\n * @returns the current bounding info\n */\n encapsulate(point) {\n const minimum = Vector3.Minimize(this.minimum, point);\n const maximum = Vector3.Maximize(this.maximum, point);\n this.reConstruct(minimum, maximum, this.boundingBox.getWorldMatrix());\n return this;\n }\n /**\n * Grows the bounding info to encapsulate the given bounding info.\n * @param toEncapsulate The bounding info that will be encapsulated in the current bounding info\n * @returns the current bounding info\n */\n encapsulateBoundingInfo(toEncapsulate) {\n const invw = TmpVectors.Matrix[0];\n this.boundingBox.getWorldMatrix().invertToRef(invw);\n const v = TmpVectors.Vector3[0];\n Vector3.TransformCoordinatesToRef(toEncapsulate.boundingBox.minimumWorld, invw, v);\n this.encapsulate(v);\n Vector3.TransformCoordinatesToRef(toEncapsulate.boundingBox.maximumWorld, invw, v);\n this.encapsulate(v);\n return this;\n }\n /**\n * Scale the current bounding info by applying a scale factor\n * @param factor defines the scale factor to apply\n * @returns the current bounding info\n */\n scale(factor) {\n this.boundingBox.scale(factor);\n this.boundingSphere.scale(factor);\n return this;\n }\n /**\n * Returns `true` if the bounding info is within the frustum defined by the passed array of planes.\n * @param frustumPlanes defines the frustum to test\n * @param strategy defines the strategy to use for the culling (default is BABYLON.AbstractMesh.CULLINGSTRATEGY_STANDARD)\n * The different strategies available are:\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_STANDARD most accurate but slower @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_STANDARD\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY faster but less accurate @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION can be faster if always visible @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_OPTIMISTIC_INCLUSION\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY can be faster if always visible @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY\n * @returns true if the bounding info is in the frustum planes\n */\n isInFrustum(frustumPlanes, strategy = 0) {\n const inclusionTest = strategy === 2 || strategy === 3;\n if (inclusionTest) {\n if (this.boundingSphere.isCenterInFrustum(frustumPlanes)) {\n return true;\n }\n }\n if (!this.boundingSphere.isInFrustum(frustumPlanes)) {\n return false;\n }\n const bSphereOnlyTest = strategy === 1 || strategy === 3;\n if (bSphereOnlyTest) {\n return true;\n }\n return this.boundingBox.isInFrustum(frustumPlanes);\n }\n /**\n * Gets the world distance between the min and max points of the bounding box\n */\n get diagonalLength() {\n const boundingBox = this.boundingBox;\n const diag = boundingBox.maximumWorld.subtractToRef(boundingBox.minimumWorld, BoundingInfo._TmpVector3[0]);\n return diag.length();\n }\n /**\n * Checks if a cullable object (mesh...) is in the camera frustum\n * Unlike isInFrustum this checks the full bounding box\n * @param frustumPlanes Camera near/planes\n * @returns true if the object is in frustum otherwise false\n */\n isCompletelyInFrustum(frustumPlanes) {\n return this.boundingBox.isCompletelyInFrustum(frustumPlanes);\n }\n /**\n * @internal\n */\n _checkCollision(collider) {\n return collider._canDoCollision(this.boundingSphere.centerWorld, this.boundingSphere.radiusWorld, this.boundingBox.minimumWorld, this.boundingBox.maximumWorld);\n }\n /**\n * Checks if a point is inside the bounding box and bounding sphere or the mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/interactions/mesh_intersect\n * @param point the point to check intersection with\n * @returns if the point intersects\n */\n intersectsPoint(point) {\n if (!this.boundingSphere.centerWorld) {\n return false;\n }\n if (!this.boundingSphere.intersectsPoint(point)) {\n return false;\n }\n if (!this.boundingBox.intersectsPoint(point)) {\n return false;\n }\n return true;\n }\n /**\n * Checks if another bounding info intersects the bounding box and bounding sphere or the mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/interactions/mesh_intersect\n * @param boundingInfo the bounding info to check intersection with\n * @param precise if the intersection should be done using OBB\n * @returns if the bounding info intersects\n */\n intersects(boundingInfo, precise) {\n if (!BoundingSphere.Intersects(this.boundingSphere, boundingInfo.boundingSphere)) {\n return false;\n }\n if (!BoundingBox.Intersects(this.boundingBox, boundingInfo.boundingBox)) {\n return false;\n }\n if (!precise) {\n return true;\n }\n const box0 = this.boundingBox;\n const box1 = boundingInfo.boundingBox;\n if (!axisOverlap(box0.directions[0], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box0.directions[1], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box0.directions[2], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box1.directions[0], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box1.directions[1], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box1.directions[2], box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[0], box1.directions[0]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[0], box1.directions[1]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[0], box1.directions[2]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[1], box1.directions[0]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[1], box1.directions[1]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[1], box1.directions[2]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[2], box1.directions[0]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[2], box1.directions[1]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[2], box1.directions[2]), box0, box1)) {\n return false;\n }\n return true;\n }\n}\nBoundingInfo._TmpVector3 = BuildArray(2, Vector3.Zero);","map":{"version":3,"names":["BuildArray","TmpVectors","Vector3","BoundingBox","BoundingSphere","_result0","min","max","_result1","computeBoxExtents","axis","box","result","p","Dot","centerWorld","r0","Math","abs","directions","extendSize","x","r1","y","r2","z","r","axisOverlap","box0","box1","BoundingInfo","constructor","minimum","maximum","worldMatrix","_isLocked","boundingBox","boundingSphere","reConstruct","isLocked","value","update","world","_update","centerOn","center","extend","_TmpVector3","copyFrom","subtractInPlace","addInPlace","getWorldMatrix","encapsulate","point","Minimize","Maximize","encapsulateBoundingInfo","toEncapsulate","invw","Matrix","invertToRef","v","TransformCoordinatesToRef","minimumWorld","maximumWorld","scale","factor","isInFrustum","frustumPlanes","strategy","inclusionTest","isCenterInFrustum","bSphereOnlyTest","diagonalLength","diag","subtractToRef","length","isCompletelyInFrustum","_checkCollision","collider","_canDoCollision","radiusWorld","intersectsPoint","intersects","boundingInfo","precise","Intersects","Cross","Zero"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Culling/boundingInfo.js"],"sourcesContent":["import { BuildArray } from \"../Misc/arrayTools.js\";\nimport { TmpVectors } from \"../Maths/math.vector.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\n\nimport { BoundingBox } from \"./boundingBox.js\";\nimport { BoundingSphere } from \"./boundingSphere.js\";\nconst _result0 = { min: 0, max: 0 };\nconst _result1 = { min: 0, max: 0 };\nconst computeBoxExtents = (axis, box, result) => {\n const p = Vector3.Dot(box.centerWorld, axis);\n const r0 = Math.abs(Vector3.Dot(box.directions[0], axis)) * box.extendSize.x;\n const r1 = Math.abs(Vector3.Dot(box.directions[1], axis)) * box.extendSize.y;\n const r2 = Math.abs(Vector3.Dot(box.directions[2], axis)) * box.extendSize.z;\n const r = r0 + r1 + r2;\n result.min = p - r;\n result.max = p + r;\n};\nconst axisOverlap = (axis, box0, box1) => {\n computeBoxExtents(axis, box0, _result0);\n computeBoxExtents(axis, box1, _result1);\n return !(_result0.min > _result1.max || _result1.min > _result0.max);\n};\n/**\n * Info for a bounding data of a mesh\n */\nexport class BoundingInfo {\n /**\n * Constructs bounding info\n * @param minimum min vector of the bounding box/sphere\n * @param maximum max vector of the bounding box/sphere\n * @param worldMatrix defines the new world matrix\n */\n constructor(minimum, maximum, worldMatrix) {\n this._isLocked = false;\n this.boundingBox = new BoundingBox(minimum, maximum, worldMatrix);\n this.boundingSphere = new BoundingSphere(minimum, maximum, worldMatrix);\n }\n /**\n * Recreates the entire bounding info from scratch as if we call the constructor in place\n * @param min defines the new minimum vector (in local space)\n * @param max defines the new maximum vector (in local space)\n * @param worldMatrix defines the new world matrix\n */\n reConstruct(min, max, worldMatrix) {\n this.boundingBox.reConstruct(min, max, worldMatrix);\n this.boundingSphere.reConstruct(min, max, worldMatrix);\n }\n /**\n * min vector of the bounding box/sphere\n */\n get minimum() {\n return this.boundingBox.minimum;\n }\n /**\n * max vector of the bounding box/sphere\n */\n get maximum() {\n return this.boundingBox.maximum;\n }\n /**\n * If the info is locked and won't be updated to avoid perf overhead\n */\n get isLocked() {\n return this._isLocked;\n }\n set isLocked(value) {\n this._isLocked = value;\n }\n // Methods\n /**\n * Updates the bounding sphere and box\n * @param world world matrix to be used to update\n */\n update(world) {\n if (this._isLocked) {\n return;\n }\n this.boundingBox._update(world);\n this.boundingSphere._update(world);\n }\n /**\n * Recreate the bounding info to be centered around a specific point given a specific extend.\n * @param center New center of the bounding info\n * @param extend New extend of the bounding info\n * @returns the current bounding info\n */\n centerOn(center, extend) {\n const minimum = BoundingInfo._TmpVector3[0].copyFrom(center).subtractInPlace(extend);\n const maximum = BoundingInfo._TmpVector3[1].copyFrom(center).addInPlace(extend);\n this.boundingBox.reConstruct(minimum, maximum, this.boundingBox.getWorldMatrix());\n this.boundingSphere.reConstruct(minimum, maximum, this.boundingBox.getWorldMatrix());\n return this;\n }\n /**\n * Grows the bounding info to include the given point.\n * @param point The point that will be included in the current bounding info (in local space)\n * @returns the current bounding info\n */\n encapsulate(point) {\n const minimum = Vector3.Minimize(this.minimum, point);\n const maximum = Vector3.Maximize(this.maximum, point);\n this.reConstruct(minimum, maximum, this.boundingBox.getWorldMatrix());\n return this;\n }\n /**\n * Grows the bounding info to encapsulate the given bounding info.\n * @param toEncapsulate The bounding info that will be encapsulated in the current bounding info\n * @returns the current bounding info\n */\n encapsulateBoundingInfo(toEncapsulate) {\n const invw = TmpVectors.Matrix[0];\n this.boundingBox.getWorldMatrix().invertToRef(invw);\n const v = TmpVectors.Vector3[0];\n Vector3.TransformCoordinatesToRef(toEncapsulate.boundingBox.minimumWorld, invw, v);\n this.encapsulate(v);\n Vector3.TransformCoordinatesToRef(toEncapsulate.boundingBox.maximumWorld, invw, v);\n this.encapsulate(v);\n return this;\n }\n /**\n * Scale the current bounding info by applying a scale factor\n * @param factor defines the scale factor to apply\n * @returns the current bounding info\n */\n scale(factor) {\n this.boundingBox.scale(factor);\n this.boundingSphere.scale(factor);\n return this;\n }\n /**\n * Returns `true` if the bounding info is within the frustum defined by the passed array of planes.\n * @param frustumPlanes defines the frustum to test\n * @param strategy defines the strategy to use for the culling (default is BABYLON.AbstractMesh.CULLINGSTRATEGY_STANDARD)\n * The different strategies available are:\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_STANDARD most accurate but slower @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_STANDARD\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY faster but less accurate @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION can be faster if always visible @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_OPTIMISTIC_INCLUSION\n * * BABYLON.AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY can be faster if always visible @see https://doc.babylonjs.com/typedoc/classes/BABYLON.AbstractMesh#CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY\n * @returns true if the bounding info is in the frustum planes\n */\n isInFrustum(frustumPlanes, strategy = 0) {\n const inclusionTest = strategy === 2 || strategy === 3;\n if (inclusionTest) {\n if (this.boundingSphere.isCenterInFrustum(frustumPlanes)) {\n return true;\n }\n }\n if (!this.boundingSphere.isInFrustum(frustumPlanes)) {\n return false;\n }\n const bSphereOnlyTest = strategy === 1 || strategy === 3;\n if (bSphereOnlyTest) {\n return true;\n }\n return this.boundingBox.isInFrustum(frustumPlanes);\n }\n /**\n * Gets the world distance between the min and max points of the bounding box\n */\n get diagonalLength() {\n const boundingBox = this.boundingBox;\n const diag = boundingBox.maximumWorld.subtractToRef(boundingBox.minimumWorld, BoundingInfo._TmpVector3[0]);\n return diag.length();\n }\n /**\n * Checks if a cullable object (mesh...) is in the camera frustum\n * Unlike isInFrustum this checks the full bounding box\n * @param frustumPlanes Camera near/planes\n * @returns true if the object is in frustum otherwise false\n */\n isCompletelyInFrustum(frustumPlanes) {\n return this.boundingBox.isCompletelyInFrustum(frustumPlanes);\n }\n /**\n * @internal\n */\n _checkCollision(collider) {\n return collider._canDoCollision(this.boundingSphere.centerWorld, this.boundingSphere.radiusWorld, this.boundingBox.minimumWorld, this.boundingBox.maximumWorld);\n }\n /**\n * Checks if a point is inside the bounding box and bounding sphere or the mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/interactions/mesh_intersect\n * @param point the point to check intersection with\n * @returns if the point intersects\n */\n intersectsPoint(point) {\n if (!this.boundingSphere.centerWorld) {\n return false;\n }\n if (!this.boundingSphere.intersectsPoint(point)) {\n return false;\n }\n if (!this.boundingBox.intersectsPoint(point)) {\n return false;\n }\n return true;\n }\n /**\n * Checks if another bounding info intersects the bounding box and bounding sphere or the mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/interactions/mesh_intersect\n * @param boundingInfo the bounding info to check intersection with\n * @param precise if the intersection should be done using OBB\n * @returns if the bounding info intersects\n */\n intersects(boundingInfo, precise) {\n if (!BoundingSphere.Intersects(this.boundingSphere, boundingInfo.boundingSphere)) {\n return false;\n }\n if (!BoundingBox.Intersects(this.boundingBox, boundingInfo.boundingBox)) {\n return false;\n }\n if (!precise) {\n return true;\n }\n const box0 = this.boundingBox;\n const box1 = boundingInfo.boundingBox;\n if (!axisOverlap(box0.directions[0], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box0.directions[1], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box0.directions[2], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box1.directions[0], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box1.directions[1], box0, box1)) {\n return false;\n }\n if (!axisOverlap(box1.directions[2], box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[0], box1.directions[0]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[0], box1.directions[1]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[0], box1.directions[2]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[1], box1.directions[0]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[1], box1.directions[1]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[1], box1.directions[2]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[2], box1.directions[0]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[2], box1.directions[1]), box0, box1)) {\n return false;\n }\n if (!axisOverlap(Vector3.Cross(box0.directions[2], box1.directions[2]), box0, box1)) {\n return false;\n }\n return true;\n }\n}\nBoundingInfo._TmpVector3 = BuildArray(2, Vector3.Zero);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|