@carbonenginejs/runtime-resource 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +3 -2
- package/README.md +47 -6
- package/dist/CjsMotherLode.js +88 -88
- package/dist/CjsMotherLode.js.map +1 -1
- package/dist/CjsResMan.js +718 -229
- package/dist/CjsResMan.js.map +1 -1
- package/dist/CjsResManFetchProvider.js +94 -0
- package/dist/CjsResManFetchProvider.js.map +1 -0
- package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
- package/dist/CjsResManWorkQueue.js.map +1 -0
- package/dist/format/CjsBlueReader.js +91 -2
- package/dist/format/CjsBlueReader.js.map +1 -1
- package/dist/format/CjsFormat.js +47 -21
- package/dist/format/CjsFormat.js.map +1 -1
- package/dist/format/CjsReader.js +4 -0
- package/dist/format/CjsReader.js.map +1 -1
- package/dist/format/CjsResourceProbe.js +4 -2
- package/dist/format/CjsResourceProbe.js.map +1 -1
- package/dist/format/payloadContract.js +20 -0
- package/dist/format/payloadContract.js.map +1 -1
- package/dist/formats/black/CjsBlackFormat.js +15 -1
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +62 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
- package/dist/formats/black/core/CjsBlackReader.js +127 -2
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
- package/dist/formats/black/core/helpers.js +17 -0
- package/dist/formats/black/core/helpers.js.map +1 -1
- package/dist/formats/bnk/CjsBnkFormat.js +8 -0
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/helpers.js +20 -0
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +40 -3
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
- package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
- package/dist/formats/cmf/core/binary.js +71 -0
- package/dist/formats/cmf/core/binary.js.map +1 -1
- package/dist/formats/cmf/core/buffers.js +4 -0
- package/dist/formats/cmf/core/buffers.js.map +1 -1
- package/dist/formats/cmf/core/helpers.js +31 -0
- package/dist/formats/cmf/core/helpers.js.map +1 -1
- package/dist/formats/cmf/core/schema.js +10 -0
- package/dist/formats/cmf/core/schema.js.map +1 -1
- package/dist/formats/cmf/core/shared.js +9 -0
- package/dist/formats/cmf/core/shared.js.map +1 -1
- package/dist/formats/cmf/core/writer.js +54 -0
- package/dist/formats/cmf/core/writer.js.map +1 -1
- package/dist/formats/dds/core/bc6h.js +10 -0
- package/dist/formats/dds/core/bc6h.js.map +1 -1
- package/dist/formats/dds/core/bc7.js +16 -0
- package/dist/formats/dds/core/bc7.js.map +1 -1
- package/dist/formats/dds/core/helpers.js +47 -0
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/fbx/core/helpers.js +22 -1
- package/dist/formats/fbx/core/helpers.js.map +1 -1
- package/dist/formats/flac/CjsFlacFormat.js +49 -0
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/formats/flac/core/helpers.js +20 -0
- package/dist/formats/flac/core/helpers.js.map +1 -1
- package/dist/formats/gif/CjsGifFormat.js +49 -0
- package/dist/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/formats/gif/core/helpers.js +20 -0
- package/dist/formats/gif/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +18 -3
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/parser.js +13 -0
- package/dist/formats/gltf/core/parser.js.map +1 -1
- package/dist/formats/gltf/core/targets.js +10 -0
- package/dist/formats/gltf/core/targets.js.map +1 -1
- package/dist/formats/gr2/core/bitknit2.js +2 -0
- package/dist/formats/gr2/core/bitknit2.js.map +1 -1
- package/dist/formats/gr2/core/helpers.js +20 -0
- package/dist/formats/gr2/core/helpers.js.map +1 -1
- package/dist/formats/gr2/core/tangents.js +9 -9
- package/dist/formats/gr2/core/tangents.js.map +1 -1
- package/dist/formats/gr2/core/targets.js +10 -0
- package/dist/formats/gr2/core/targets.js.map +1 -1
- package/dist/formats/index.js +4 -4
- package/dist/formats/jpeg/core/helpers.js +52 -0
- package/dist/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/formats/jpeg/core/jpeg.js +93 -0
- package/dist/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/formats/mp3/core/helpers.js +37 -0
- package/dist/formats/mp3/core/helpers.js.map +1 -1
- package/dist/formats/mp4/core/helpers.js +35 -0
- package/dist/formats/mp4/core/helpers.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +2 -2
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/ogg/CjsOggFormat.js +49 -0
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/formats/ogg/core/helpers.js +23 -0
- package/dist/formats/ogg/core/helpers.js.map +1 -1
- package/dist/formats/ogg/core/vorbis.js +13 -0
- package/dist/formats/ogg/core/vorbis.js.map +1 -1
- package/dist/formats/png/core/helpers.js +52 -0
- package/dist/formats/png/core/helpers.js.map +1 -1
- package/dist/formats/red/CjsRedFormat.js +3 -1
- package/dist/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/formats/red/core/CjsRedReader.js +52 -0
- package/dist/formats/red/core/CjsRedReader.js.map +1 -1
- package/dist/formats/red/core/helpers.js +19 -0
- package/dist/formats/red/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/stl.js +10 -2
- package/dist/formats/stl/core/stl.js.map +1 -1
- package/dist/formats/stl/core/targets.js +10 -0
- package/dist/formats/stl/core/targets.js.map +1 -1
- package/dist/formats/tga/core/helpers.js +47 -0
- package/dist/formats/tga/core/helpers.js.map +1 -1
- package/dist/formats/wav/core/helpers.js +37 -0
- package/dist/formats/wav/core/helpers.js.map +1 -1
- package/dist/formats/webm/core/helpers.js +35 -0
- package/dist/formats/webm/core/helpers.js.map +1 -1
- package/dist/formats/webp/CjsWebpFormat.js +49 -0
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/formats/webp/core/helpers.js +23 -0
- package/dist/formats/webp/core/helpers.js.map +1 -1
- package/dist/formats/wem/CjsWemFormat.js +8 -0
- package/dist/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/formats/wem/core/bitStream.js +2 -0
- package/dist/formats/wem/core/bitStream.js.map +1 -1
- package/dist/formats/wem/core/helpers.js +20 -0
- package/dist/formats/wem/core/helpers.js.map +1 -1
- package/dist/formats/yaml/CjsYamlFormat.js +45 -0
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +10 -0
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/index.js +57 -44
- package/dist/index.js.map +1 -1
- package/dist/{CjsResource.js → resource/CjsResource.js} +234 -19
- package/dist/resource/CjsResource.js.map +1 -0
- package/dist/{resources → resource}/Tr2LightProfileRes.js +5 -4
- package/dist/resource/Tr2LightProfileRes.js.map +1 -0
- package/dist/{resources → resource/audio}/AudioGeometryResData.js +4 -4
- package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
- package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
- package/dist/resource/audio/CjsAudioRes.js +213 -0
- package/dist/resource/audio/CjsAudioRes.js.map +1 -0
- package/dist/resource/audio/index.js +4 -0
- package/dist/resource/audio/index.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalData.js +3 -3
- package/dist/resource/geometry/MeshDecalData.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalLodData.js +3 -3
- package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
- package/dist/resource/geometry/TriGeometryRes.js +656 -0
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +4 -4
- package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +4 -4
- package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +3 -3
- package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +5 -5
- package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +3 -3
- package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriJointBinding.js +4 -4
- package/dist/resource/geometry/TriJointBinding.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +3 -3
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +3 -3
- package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +3 -3
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +5 -5
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +7 -6
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +7 -6
- package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
- package/dist/resource/geometry/granny/enums.js.map +1 -0
- package/dist/resource/geometry/granny/index.js +6 -0
- package/dist/resource/geometry/granny/index.js.map +1 -0
- package/dist/resource/geometry/index.js +17 -0
- package/dist/resource/geometry/index.js.map +1 -0
- package/dist/resource/index.js +52 -0
- package/dist/resource/index.js.map +1 -0
- package/dist/resource/resourceBoundary.js +64 -0
- package/dist/resource/resourceBoundary.js.map +1 -0
- package/dist/resource/shader/Tr2EffectRes.js +420 -0
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialArea.js +11 -6
- package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialMesh.js +10 -5
- package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialRes.js +12 -6
- package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
- package/dist/resource/shader/Tr2Shader.js +250 -0
- package/dist/resource/shader/Tr2Shader.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2ShaderPermutation.js +15 -9
- package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
- package/dist/resource/shader/index.js +17 -0
- package/dist/resource/shader/index.js.map +1 -0
- package/dist/resource/shader/portable.js +33 -0
- package/dist/resource/shader/portable.js.map +1 -0
- package/dist/resource/shader/portableValidation.js +461 -0
- package/dist/resource/shader/portableValidation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +100 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +34 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +113 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +141 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +107 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js +90 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +235 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +71 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2Pass.js +111 -0
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +80 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
- package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +84 -7
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
- package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +57 -11
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2ImageRes.js +7 -5
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +5 -3
- package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +3 -3
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +3 -3
- package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +8 -6
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/{resources → resource/texture}/TriTextureRes.js +43 -27
- package/dist/resource/texture/TriTextureRes.js.map +1 -0
- package/dist/resource/texture/index.js +15 -0
- package/dist/resource/texture/index.js.map +1 -0
- package/dist/{resources → resource/texture}/texturePipelineBehavior.js +61 -61
- package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
- package/dist/worker/CjsResManMainThreadLoader.js +87 -0
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
- package/dist/worker/CjsResManWorker.js +217 -0
- package/dist/worker/CjsResManWorker.js.map +1 -0
- package/dist/worker/CjsResManWorkerLoader.js +434 -0
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
- package/dist/worker/protocol.js +12 -0
- package/dist/worker/protocol.js.map +1 -0
- package/docs/README.md +18 -5
- package/docs/architecture.md +40 -17
- package/docs/concepts/resource-lifecycle.md +2 -1
- package/docs/formats/README.md +4 -0
- package/docs/reference/classes/README.md +6 -4
- package/docs/reference/classes/audio.md +30 -0
- package/docs/reference/classes/core.md +31 -11
- package/docs/reference/classes/formats.md +1 -1
- package/docs/reference/classes/resources.md +151 -41
- package/docs/reference/classes/texture.md +7 -7
- package/docs/reference/events.md +1 -1
- package/docs/reference/motherlode-cache.md +17 -0
- package/docs/reference/queues.md +9 -1
- package/docs/reference/workers.md +135 -0
- package/docs/roadmap.md +27 -1
- package/format-notices/black/NOTICE +1 -1
- package/package.json +9 -4
- package/dist/CjsResManQueue.js.map +0 -1
- package/dist/CjsResource.js.map +0 -1
- package/dist/CjsResourceSource.js +0 -68
- package/dist/CjsResourceSource.js.map +0 -1
- package/dist/resourcePath.js +0 -18
- package/dist/resourcePath.js.map +0 -1
- package/dist/resourceStates.js +0 -9
- package/dist/resourceStates.js.map +0 -1
- package/dist/resources/AudioGeometryResData.js.map +0 -1
- package/dist/resources/GStateBindingCallbackData.js.map +0 -1
- package/dist/resources/MeshDecalData.js.map +0 -1
- package/dist/resources/MeshDecalLodData.js.map +0 -1
- package/dist/resources/Tr2EffectRes.js +0 -71
- package/dist/resources/Tr2EffectRes.js.map +0 -1
- package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
- package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
- package/dist/resources/Tr2ImageRes.js.map +0 -1
- package/dist/resources/Tr2LightProfileRes.js.map +0 -1
- package/dist/resources/Tr2MaterialArea.js.map +0 -1
- package/dist/resources/Tr2MaterialMesh.js.map +0 -1
- package/dist/resources/Tr2MaterialRes.js.map +0 -1
- package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
- package/dist/resources/Tr2TextureLodManager.js.map +0 -1
- package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
- package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
- package/dist/resources/Tr2TexturePipeline.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
- package/dist/resources/TriGeometryRes.js +0 -239
- package/dist/resources/TriGeometryRes.js.map +0 -1
- package/dist/resources/TriGeometryResAreaData.js.map +0 -1
- package/dist/resources/TriGeometryResJointData.js.map +0 -1
- package/dist/resources/TriGeometryResLodData.js.map +0 -1
- package/dist/resources/TriGeometryResMeshData.js.map +0 -1
- package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
- package/dist/resources/TriGrannyRes.js.map +0 -1
- package/dist/resources/TriJointBinding.js.map +0 -1
- package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
- package/dist/resources/TriRtGeometryConstants.js.map +0 -1
- package/dist/resources/TriTextureRes.js.map +0 -1
- package/dist/resources/enums.js.map +0 -1
- package/dist/resources/resourceBoundary.js +0 -47
- package/dist/resources/resourceBoundary.js.map +0 -1
- package/dist/resources/texturePipelineBehavior.js.map +0 -1
- package/dist/texture/CjsTextureArrayRes.js.map +0 -1
- package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
|
@@ -0,0 +1,656 @@
|
|
|
1
|
+
import { identity as _identity, applyDecs2311 as _applyDecs2311 } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { io, type, carbon, impl } from '@carbonenginejs/runtime-utils/schema';
|
|
3
|
+
import { box3 } from '@carbonenginejs/runtime-utils/box3';
|
|
4
|
+
import { triangleNormalTo } from '@carbonenginejs/runtime-utils/mesh';
|
|
5
|
+
import { ray3 } from '@carbonenginejs/runtime-utils/ray3';
|
|
6
|
+
import { sph3 } from '@carbonenginejs/runtime-utils/sph3';
|
|
7
|
+
import { vec3 } from '@carbonenginejs/runtime-utils/vec3';
|
|
8
|
+
import { vec4 } from '@carbonenginejs/runtime-utils/vec4';
|
|
9
|
+
import { CjsResource as _CjsResource } from '../CjsResource.js';
|
|
10
|
+
import { assertResourcePayloadObject, assertResourcePayloadArray, resourcePayloadError, resourceBoundaryError } from '../resourceBoundary.js';
|
|
11
|
+
|
|
12
|
+
let _initProto, _initClass, _init_forceLod, _init_extra_forceLod, _init_forcedLodIndex, _init_extra_forcedLodIndex, _init_name, _init_extra_name;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Resource record that owns geometry payload facts (meshes, optional
|
|
16
|
+
* skeletons and animations) and LOD-force metadata, while engine packages
|
|
17
|
+
* decide device buffers, vertex declarations, and draw-time state.
|
|
18
|
+
*
|
|
19
|
+
* Geometry inspection composes the generic math supplied by runtime-utils
|
|
20
|
+
* with resource-specific payload traversal.
|
|
21
|
+
*/
|
|
22
|
+
let _TriGeometryRes;
|
|
23
|
+
new class extends _identity {
|
|
24
|
+
static [class TriGeometryRes extends _CjsResource {
|
|
25
|
+
static {
|
|
26
|
+
({
|
|
27
|
+
e: [_init_forceLod, _init_extra_forceLod, _init_forcedLodIndex, _init_extra_forcedLodIndex, _init_name, _init_extra_name, _initProto],
|
|
28
|
+
c: [_TriGeometryRes, _initClass]
|
|
29
|
+
} = _applyDecs2311(this, [type.define({
|
|
30
|
+
className: "TriGeometryRes",
|
|
31
|
+
family: "resources"
|
|
32
|
+
})], [[[io, io.readwrite, type, type.boolean], 16, "forceLod"], [[io, io.readwrite, type, type.int32], 16, "forcedLodIndex"], [[io, io.readwrite, type, type.string], 16, "name"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetAnimationCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetSkeletonCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetSkeletonData"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshAreaCount"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshName"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshAreaName"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetAreaBoundingBox"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetBoundingBox"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetBoundingSphere"], [[carbon, carbon.method, impl, impl.adapted], 18, "CalculateBoundingBoxFromTransform"], [[carbon, carbon.method, impl, impl.adapted], 18, "RecalculateBoundingSphere"], [[carbon, carbon.method, impl, impl.notSupported], 18, "Reload"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetIntersectionPointNormalBone"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetAreaIntersectionPointNormalBone"], [[carbon, carbon.method, impl, impl.adapted], 18, "GetMeshVertexElements"], [[carbon, carbon.method, impl, impl.notSupported], 18, "SaveMesh"]], 0, void 0, _CjsResource));
|
|
33
|
+
}
|
|
34
|
+
forceLod = (_initProto(this), _init_forceLod(this, false));
|
|
35
|
+
forcedLodIndex = (_init_extra_forceLod(this), _init_forcedLodIndex(this, -1));
|
|
36
|
+
name = (_init_extra_forcedLodIndex(this), _init_name(this, ""));
|
|
37
|
+
|
|
38
|
+
/** Creates a TriGeometryRes with caller-provided initial state. */
|
|
39
|
+
constructor(values = null) {
|
|
40
|
+
super(), _init_extra_name(this);
|
|
41
|
+
this.SetValues(values || {}, {
|
|
42
|
+
markDirty: false,
|
|
43
|
+
skipUpdate: true,
|
|
44
|
+
skipEvents: true
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Attach a plain geometry payload.
|
|
50
|
+
*
|
|
51
|
+
* @param {object|null} payload
|
|
52
|
+
* @param {object|null} options
|
|
53
|
+
* @returns {TriGeometryRes}
|
|
54
|
+
*/
|
|
55
|
+
SetPayload(payload = null, options = null) {
|
|
56
|
+
if (payload === null) {
|
|
57
|
+
super.SetPayload(null);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
assertResourcePayloadObject("TriGeometryRes", payload);
|
|
61
|
+
assertResourcePayloadArray("TriGeometryRes", payload, "meshes");
|
|
62
|
+
for (const field of ["skeletons", "animations"]) {
|
|
63
|
+
if (payload[field] !== undefined && !Array.isArray(payload[field])) {
|
|
64
|
+
throw resourcePayloadError("TriGeometryRes", "Expected an array when provided.", field);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
super.SetPayload(payload);
|
|
68
|
+
this.SetValues(options || {});
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Get mesh count from the CPU geometry payload.
|
|
74
|
+
*
|
|
75
|
+
* @returns {number}
|
|
76
|
+
*/
|
|
77
|
+
GetMeshCount() {
|
|
78
|
+
return this.GetPayload()?.meshes?.length || 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Get animation count from the CPU geometry payload.
|
|
83
|
+
*
|
|
84
|
+
* @returns {number}
|
|
85
|
+
*/
|
|
86
|
+
GetAnimationCount() {
|
|
87
|
+
return this.GetPayload()?.animations?.length || 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Get skeleton count from the CPU geometry payload.
|
|
92
|
+
*
|
|
93
|
+
* @returns {number}
|
|
94
|
+
*/
|
|
95
|
+
GetSkeletonCount() {
|
|
96
|
+
return this.GetPayload()?.skeletons?.length || 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Get one resource-owned skeleton from the CPU geometry payload.
|
|
101
|
+
*
|
|
102
|
+
* @param {number} skeletonIndex
|
|
103
|
+
* @returns {*}
|
|
104
|
+
*/
|
|
105
|
+
GetSkeletonData(skeletonIndex = 0) {
|
|
106
|
+
const index = Number(skeletonIndex);
|
|
107
|
+
if (!Number.isInteger(index) || index < 0) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return this.GetPayload()?.skeletons?.[index] || null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get mesh area count from a CPU geometry payload mesh.
|
|
115
|
+
*
|
|
116
|
+
* @param {number} meshIndex
|
|
117
|
+
* @returns {number}
|
|
118
|
+
*/
|
|
119
|
+
GetMeshAreaCount(meshIndex = 0) {
|
|
120
|
+
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
121
|
+
return mesh?.areas?.length || 0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get mesh name from a CPU geometry payload.
|
|
126
|
+
*
|
|
127
|
+
* @param {number} meshIndex
|
|
128
|
+
* @returns {string}
|
|
129
|
+
*/
|
|
130
|
+
GetMeshName(meshIndex = 0) {
|
|
131
|
+
return this.GetPayload()?.meshes?.[meshIndex]?.name || "";
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get mesh area name from a CPU geometry payload.
|
|
136
|
+
*
|
|
137
|
+
* @param {number} meshIndex
|
|
138
|
+
* @param {number} areaIndex
|
|
139
|
+
* @returns {string}
|
|
140
|
+
*/
|
|
141
|
+
GetMeshAreaName(meshIndex = 0, areaIndex = 0) {
|
|
142
|
+
return this.GetPayload()?.meshes?.[meshIndex]?.areas?.[areaIndex]?.name || "";
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Get area bounding box from geometry payload data.
|
|
147
|
+
*
|
|
148
|
+
* @param {number} meshIndex
|
|
149
|
+
* @param {number} areaIndex
|
|
150
|
+
* @param {ArrayLike<number>|null} outMin
|
|
151
|
+
* @param {ArrayLike<number>|null} outMax
|
|
152
|
+
* @returns {*|boolean}
|
|
153
|
+
*/
|
|
154
|
+
GetAreaBoundingBox(meshIndex = 0, areaIndex = 0, outMin = null, outMax = null) {
|
|
155
|
+
const area = _TriGeometryRes.getMeshAreas(this.GetPayload()?.meshes?.[meshIndex])?.[areaIndex];
|
|
156
|
+
const bounds = _TriGeometryRes.getBounds(area);
|
|
157
|
+
return _TriGeometryRes.copyBounds(bounds, outMin, outMax);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Get mesh bounding box from geometry payload data.
|
|
162
|
+
* @param {number} meshIndex
|
|
163
|
+
* @param {ArrayLike<number>|null} outMin
|
|
164
|
+
* @param {ArrayLike<number>|null} outMax
|
|
165
|
+
* @returns {*|boolean}
|
|
166
|
+
*/
|
|
167
|
+
GetBoundingBox(meshIndex = 0, outMin = null, outMax = null) {
|
|
168
|
+
const payload = this.GetPayload();
|
|
169
|
+
const bounds = _TriGeometryRes.getBounds(payload?.meshes?.[meshIndex]) || _TriGeometryRes.getBounds(payload);
|
|
170
|
+
return _TriGeometryRes.copyBounds(bounds, outMin, outMax);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Get mesh bounding sphere from geometry payload data.
|
|
175
|
+
* @param {number} meshIndex
|
|
176
|
+
* @param {ArrayLike<number>|null} out
|
|
177
|
+
* @returns {*|boolean}
|
|
178
|
+
*/
|
|
179
|
+
GetBoundingSphere(meshIndex = 0, out = null) {
|
|
180
|
+
const payload = this.GetPayload();
|
|
181
|
+
const sphere = _TriGeometryRes.getSphere(payload?.meshes?.[meshIndex]) || _TriGeometryRes.getSphere(payload);
|
|
182
|
+
if (!out) return sphere;
|
|
183
|
+
if (!sphere) return false;
|
|
184
|
+
vec4.copy(out, sphere);
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Calculate a transformed bounding box from canonical CPU vertex data.
|
|
190
|
+
*
|
|
191
|
+
* Carbon stores the same matrix bytes as gl-matrix; transforming one point
|
|
192
|
+
* therefore uses the ordinary column-vector index layout.
|
|
193
|
+
*
|
|
194
|
+
* @param {number} meshIndex
|
|
195
|
+
* @param {ArrayLike<number>} transform
|
|
196
|
+
* @returns {{min: number[], max: number[]}|null}
|
|
197
|
+
*/
|
|
198
|
+
CalculateBoundingBoxFromTransform(meshIndex = 0, transform = null) {
|
|
199
|
+
if (!transform || transform.length < 16) {
|
|
200
|
+
throw new TypeError("TriGeometryRes transform must contain 16 matrix elements.");
|
|
201
|
+
}
|
|
202
|
+
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
203
|
+
if (!mesh) return null;
|
|
204
|
+
const positions = _TriGeometryRes.getMeshPositions(mesh);
|
|
205
|
+
const sourceBounds = _TriGeometryRes.getBounds(mesh);
|
|
206
|
+
if (!positions && !sourceBounds) return null;
|
|
207
|
+
const bounds = box3.alloc(),
|
|
208
|
+
point = vec3.alloc();
|
|
209
|
+
try {
|
|
210
|
+
if (!_TriGeometryRes.setBoundsFromPositions(bounds, positions, point)) {
|
|
211
|
+
if (!sourceBounds) return null;
|
|
212
|
+
box3.fromBounds(bounds, sourceBounds.min, sourceBounds.max);
|
|
213
|
+
}
|
|
214
|
+
box3.transformMat4(bounds, bounds, transform);
|
|
215
|
+
return {
|
|
216
|
+
min: [bounds[0], bounds[1], bounds[2]],
|
|
217
|
+
max: [bounds[3], bounds[4], bounds[5]]
|
|
218
|
+
};
|
|
219
|
+
} finally {
|
|
220
|
+
vec3.unalloc(point);
|
|
221
|
+
box3.unalloc(bounds);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Recalculate bounding sphere data from canonical CPU vertex positions.
|
|
227
|
+
*
|
|
228
|
+
* @returns {boolean}
|
|
229
|
+
*/
|
|
230
|
+
RecalculateBoundingSphere() {
|
|
231
|
+
let updated = false;
|
|
232
|
+
const sphere = sph3.alloc(),
|
|
233
|
+
point = vec3.alloc();
|
|
234
|
+
try {
|
|
235
|
+
for (const mesh of this.GetPayload()?.meshes || []) {
|
|
236
|
+
if (!_TriGeometryRes.calculateMeshSphere(sphere, mesh, point)) continue;
|
|
237
|
+
_TriGeometryRes.setMeshSphere(mesh, sphere);
|
|
238
|
+
updated = true;
|
|
239
|
+
}
|
|
240
|
+
return updated;
|
|
241
|
+
} finally {
|
|
242
|
+
vec3.unalloc(point);
|
|
243
|
+
sph3.unalloc(sphere);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Reloading belongs to the resource manager because it owns source and
|
|
249
|
+
* canonical replacement policy.
|
|
250
|
+
*
|
|
251
|
+
* @throws {Error}
|
|
252
|
+
*/
|
|
253
|
+
Reload() {
|
|
254
|
+
throw resourceBoundaryError("TriGeometryRes", "Reload", "Request a reload through CjsResMan so source reads and canonical replacement remain manager-owned.");
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Intersect a ray with canonical CPU triangle data.
|
|
259
|
+
*
|
|
260
|
+
* @param {ArrayLike<number>} position
|
|
261
|
+
* @param {ArrayLike<number>} direction
|
|
262
|
+
* @returns {object}
|
|
263
|
+
*/
|
|
264
|
+
GetIntersectionPointNormalBone(position, direction) {
|
|
265
|
+
return _TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, -1);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Intersect a ray with one area index across canonical CPU meshes.
|
|
270
|
+
*
|
|
271
|
+
* @param {ArrayLike<number>} position
|
|
272
|
+
* @param {ArrayLike<number>} direction
|
|
273
|
+
* @param {number} areaIndex
|
|
274
|
+
* @returns {object}
|
|
275
|
+
*/
|
|
276
|
+
GetAreaIntersectionPointNormalBone(position, direction, areaIndex = -1) {
|
|
277
|
+
if (!Number.isInteger(areaIndex) || areaIndex < -1) {
|
|
278
|
+
throw new RangeError("TriGeometryRes area index must be -1 or a non-negative integer.");
|
|
279
|
+
}
|
|
280
|
+
return _TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, areaIndex);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Get vertex element descriptors for a mesh.
|
|
285
|
+
*
|
|
286
|
+
* @param {number} meshIndex
|
|
287
|
+
* @returns {Array<*>}
|
|
288
|
+
*/
|
|
289
|
+
GetMeshVertexElements(meshIndex = 0) {
|
|
290
|
+
return this.GetPayload()?.meshes?.[meshIndex]?.vertexElements || [];
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Saving belongs to the selected geometry format writer and destination.
|
|
295
|
+
*
|
|
296
|
+
* @throws {Error}
|
|
297
|
+
*/
|
|
298
|
+
SaveMesh() {
|
|
299
|
+
throw resourceBoundaryError("TriGeometryRes", "SaveMesh", "Use a geometry format writer with the resource payload and a caller-owned destination.");
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Gets the canonical area list from a mesh or its first LOD.
|
|
303
|
+
*
|
|
304
|
+
* @param {object|null} mesh
|
|
305
|
+
* @returns {Array<*>|null}
|
|
306
|
+
*/
|
|
307
|
+
static getMeshAreas(mesh) {
|
|
308
|
+
return mesh?.areas || mesh?.lods?.[0]?.areas || null;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Gets canonical bounds from a geometry payload object.
|
|
313
|
+
*
|
|
314
|
+
* @param {object|null} value
|
|
315
|
+
* @returns {{min: ArrayLike<number>, max: ArrayLike<number>}|null}
|
|
316
|
+
*/
|
|
317
|
+
static getBounds(value) {
|
|
318
|
+
if (!value || typeof value !== "object") return null;
|
|
319
|
+
if (value.bounds?.min && value.bounds?.max) return value.bounds;
|
|
320
|
+
if (value.minBounds && value.maxBounds) {
|
|
321
|
+
return {
|
|
322
|
+
min: value.minBounds,
|
|
323
|
+
max: value.maxBounds
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Gets the canonical bounding sphere from a geometry payload object.
|
|
331
|
+
*
|
|
332
|
+
* @param {object|null} value
|
|
333
|
+
* @returns {ArrayLike<number>|null}
|
|
334
|
+
*/
|
|
335
|
+
static getSphere(value) {
|
|
336
|
+
if (!value || typeof value !== "object") return null;
|
|
337
|
+
return value.sphere || value.boundingSphere || null;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Copies bounds into caller-owned outputs, or returns the source object.
|
|
342
|
+
*
|
|
343
|
+
* @param {{min: ArrayLike<number>, max: ArrayLike<number>}|null} bounds
|
|
344
|
+
* @param {ArrayLike<number>|null} outMin
|
|
345
|
+
* @param {ArrayLike<number>|null} outMax
|
|
346
|
+
* @returns {*|boolean}
|
|
347
|
+
*/
|
|
348
|
+
static copyBounds(bounds, outMin, outMax) {
|
|
349
|
+
if (!outMin && !outMax) return bounds;
|
|
350
|
+
if (!bounds || !outMin || !outMax) return false;
|
|
351
|
+
vec3.copy(outMin, bounds.min);
|
|
352
|
+
vec3.copy(outMax, bounds.max);
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Gets canonical positions from a mesh or its first LOD.
|
|
358
|
+
*
|
|
359
|
+
* @param {object|null} mesh
|
|
360
|
+
* @returns {ArrayLike<number>|Array<ArrayLike<number>>|null}
|
|
361
|
+
*/
|
|
362
|
+
static getMeshPositions(mesh) {
|
|
363
|
+
return mesh?.vertex?.position || mesh?.positions || mesh?.lods?.[0]?.vertex?.position || mesh?.lods?.[0]?.positions || null;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Gets the number of vertices represented by flat or nested positions.
|
|
368
|
+
*
|
|
369
|
+
* @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
|
|
370
|
+
* @returns {number}
|
|
371
|
+
*/
|
|
372
|
+
static getPositionCount(positions) {
|
|
373
|
+
if (!positions) return 0;
|
|
374
|
+
return typeof positions[0] === "number" ? Math.floor(positions.length / 3) : positions.length;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Calculates bounds from canonical positions using caller-owned scratch.
|
|
379
|
+
*
|
|
380
|
+
* @param {ArrayLike<number>} out
|
|
381
|
+
* @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
|
|
382
|
+
* @param {ArrayLike<number>} point
|
|
383
|
+
* @returns {boolean}
|
|
384
|
+
*/
|
|
385
|
+
static setBoundsFromPositions(out, positions, point) {
|
|
386
|
+
const count = this.getPositionCount(positions);
|
|
387
|
+
let found = false;
|
|
388
|
+
for (let index = 0; index < count; index++) {
|
|
389
|
+
if (!this.copyPosition(point, positions, index)) continue;
|
|
390
|
+
if (!found) {
|
|
391
|
+
out[0] = out[3] = point[0];
|
|
392
|
+
out[1] = out[4] = point[1];
|
|
393
|
+
out[2] = out[5] = point[2];
|
|
394
|
+
found = true;
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
out[0] = Math.min(out[0], point[0]);
|
|
398
|
+
out[1] = Math.min(out[1], point[1]);
|
|
399
|
+
out[2] = Math.min(out[2], point[2]);
|
|
400
|
+
out[3] = Math.max(out[3], point[0]);
|
|
401
|
+
out[4] = Math.max(out[4], point[1]);
|
|
402
|
+
out[5] = Math.max(out[5], point[2]);
|
|
403
|
+
}
|
|
404
|
+
return found;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Calculates a bounding sphere from positions using caller-owned scratch.
|
|
409
|
+
*
|
|
410
|
+
* @param {ArrayLike<number>} out
|
|
411
|
+
* @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
|
|
412
|
+
* @param {ArrayLike<number>} point
|
|
413
|
+
* @returns {boolean}
|
|
414
|
+
*/
|
|
415
|
+
static setSphereFromPositions(out, positions, point) {
|
|
416
|
+
const count = this.getPositionCount(positions);
|
|
417
|
+
let found = false,
|
|
418
|
+
minX = Infinity,
|
|
419
|
+
minY = Infinity,
|
|
420
|
+
minZ = Infinity,
|
|
421
|
+
maxX = -Infinity,
|
|
422
|
+
maxY = -Infinity,
|
|
423
|
+
maxZ = -Infinity;
|
|
424
|
+
for (let index = 0; index < count; index++) {
|
|
425
|
+
if (!this.copyPosition(point, positions, index)) continue;
|
|
426
|
+
minX = Math.min(minX, point[0]);
|
|
427
|
+
minY = Math.min(minY, point[1]);
|
|
428
|
+
minZ = Math.min(minZ, point[2]);
|
|
429
|
+
maxX = Math.max(maxX, point[0]);
|
|
430
|
+
maxY = Math.max(maxY, point[1]);
|
|
431
|
+
maxZ = Math.max(maxZ, point[2]);
|
|
432
|
+
found = true;
|
|
433
|
+
}
|
|
434
|
+
if (!found) return false;
|
|
435
|
+
out[0] = (minX + maxX) * 0.5;
|
|
436
|
+
out[1] = (minY + maxY) * 0.5;
|
|
437
|
+
out[2] = (minZ + maxZ) * 0.5;
|
|
438
|
+
let maxSquaredRadius = 0;
|
|
439
|
+
for (let index = 0; index < count; index++) {
|
|
440
|
+
if (!this.copyPosition(point, positions, index)) continue;
|
|
441
|
+
const x = out[0] - point[0],
|
|
442
|
+
y = out[1] - point[1],
|
|
443
|
+
z = out[2] - point[2];
|
|
444
|
+
maxSquaredRadius = Math.max(maxSquaredRadius, x * x + y * y + z * z);
|
|
445
|
+
}
|
|
446
|
+
out[3] = Math.sqrt(maxSquaredRadius);
|
|
447
|
+
return true;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Calculates a mesh sphere from positions or existing bounds.
|
|
452
|
+
*
|
|
453
|
+
* @param {ArrayLike<number>} out
|
|
454
|
+
* @param {object} mesh
|
|
455
|
+
* @param {ArrayLike<number>} point
|
|
456
|
+
* @returns {boolean}
|
|
457
|
+
*/
|
|
458
|
+
static calculateMeshSphere(out, mesh, point) {
|
|
459
|
+
if (this.setSphereFromPositions(out, this.getMeshPositions(mesh), point)) return true;
|
|
460
|
+
const bounds = this.getBounds(mesh);
|
|
461
|
+
if (!bounds) return false;
|
|
462
|
+
sph3.fromBounds(out, bounds.min, bounds.max);
|
|
463
|
+
return true;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Stores a calculated sphere in the mesh's canonical sphere fields.
|
|
468
|
+
*
|
|
469
|
+
* @param {object} mesh
|
|
470
|
+
* @param {ArrayLike<number>} sphere
|
|
471
|
+
* @returns {void}
|
|
472
|
+
*/
|
|
473
|
+
static setMeshSphere(mesh, sphere) {
|
|
474
|
+
if (mesh.sphere && typeof mesh.sphere.set === "function") mesh.sphere.set(sphere);else mesh.sphere = [...sphere];
|
|
475
|
+
if (mesh.boundingSphere && typeof mesh.boundingSphere.set === "function") {
|
|
476
|
+
mesh.boundingSphere.set(sphere);
|
|
477
|
+
} else if ("boundingSphere" in mesh) {
|
|
478
|
+
mesh.boundingSphere = [...sphere];
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Intersects a ray with canonical CPU geometry.
|
|
484
|
+
*
|
|
485
|
+
* @param {Array<object>|null} meshes
|
|
486
|
+
* @param {ArrayLike<number>} position
|
|
487
|
+
* @param {ArrayLike<number>} direction
|
|
488
|
+
* @param {number} areaIndex
|
|
489
|
+
* @returns {object}
|
|
490
|
+
*/
|
|
491
|
+
static intersectGeometry(meshes, position, direction, areaIndex) {
|
|
492
|
+
this.validateRayVector(position, "position");
|
|
493
|
+
this.validateRayVector(direction, "direction");
|
|
494
|
+
const ray = ray3.from(ray3.alloc(), position, direction),
|
|
495
|
+
point = vec3.alloc(),
|
|
496
|
+
vertexA = vec3.alloc(),
|
|
497
|
+
vertexB = vec3.alloc(),
|
|
498
|
+
vertexC = vec3.alloc(),
|
|
499
|
+
normal = vec3.alloc();
|
|
500
|
+
let nearest = null;
|
|
501
|
+
try {
|
|
502
|
+
for (let meshIndex = 0; meshIndex < (meshes?.length || 0); meshIndex++) {
|
|
503
|
+
const mesh = meshes[meshIndex];
|
|
504
|
+
const positions = this.getMeshPositions(mesh);
|
|
505
|
+
if (!positions) continue;
|
|
506
|
+
const groups = mesh?.indices || mesh?.lods?.[0]?.indices || null;
|
|
507
|
+
if (ArrayBuffer.isView(groups) || Array.isArray(groups) && typeof groups[0] === "number") {
|
|
508
|
+
if (areaIndex !== -1 && areaIndex !== 0) continue;
|
|
509
|
+
nearest = this.intersectFaces(nearest, groups, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
510
|
+
continue;
|
|
511
|
+
}
|
|
512
|
+
if (Array.isArray(groups)) {
|
|
513
|
+
for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {
|
|
514
|
+
if (areaIndex !== -1 && areaIndex !== groupIndex) continue;
|
|
515
|
+
const faces = groups[groupIndex]?.faces || groups[groupIndex]?.indices || [];
|
|
516
|
+
nearest = this.intersectFaces(nearest, faces, groupIndex, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
517
|
+
}
|
|
518
|
+
continue;
|
|
519
|
+
}
|
|
520
|
+
if (areaIndex === -1 || areaIndex === 0) {
|
|
521
|
+
nearest = this.intersectFaces(nearest, null, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return nearest || {
|
|
525
|
+
hit: false,
|
|
526
|
+
boneIndex: -1,
|
|
527
|
+
point: [0, 0, 0],
|
|
528
|
+
normal: [0, 0, 0],
|
|
529
|
+
distance: Infinity,
|
|
530
|
+
meshIndex: -1,
|
|
531
|
+
areaIndex
|
|
532
|
+
};
|
|
533
|
+
} finally {
|
|
534
|
+
vec3.unalloc(normal);
|
|
535
|
+
vec3.unalloc(vertexC);
|
|
536
|
+
vec3.unalloc(vertexB);
|
|
537
|
+
vec3.unalloc(vertexA);
|
|
538
|
+
vec3.unalloc(point);
|
|
539
|
+
ray3.unalloc(ray);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* Validates a caller-provided ray vector.
|
|
545
|
+
*
|
|
546
|
+
* @param {ArrayLike<number>} value
|
|
547
|
+
* @param {string} name
|
|
548
|
+
* @returns {void}
|
|
549
|
+
*/
|
|
550
|
+
static validateRayVector(value, name) {
|
|
551
|
+
if (!value || value.length < 3 || !Number.isFinite(value[0]) || !Number.isFinite(value[1]) || !Number.isFinite(value[2])) {
|
|
552
|
+
throw new TypeError(`TriGeometryRes ray ${name} must contain three finite numbers.`);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Intersects a ray with one flat face list.
|
|
558
|
+
*
|
|
559
|
+
* @param {object|null} nearest
|
|
560
|
+
* @param {ArrayLike<number>|null} faces
|
|
561
|
+
* @param {number} areaIndex
|
|
562
|
+
* @param {object} mesh
|
|
563
|
+
* @param {number} meshIndex
|
|
564
|
+
* @param {ArrayLike<number>|Array<ArrayLike<number>>} positions
|
|
565
|
+
* @param {ArrayLike<number>} rayOrigin
|
|
566
|
+
* @param {ArrayLike<number>} ray
|
|
567
|
+
* @param {ArrayLike<number>} point
|
|
568
|
+
* @param {ArrayLike<number>} vertexA
|
|
569
|
+
* @param {ArrayLike<number>} vertexB
|
|
570
|
+
* @param {ArrayLike<number>} vertexC
|
|
571
|
+
* @param {ArrayLike<number>} normal
|
|
572
|
+
* @returns {object|null}
|
|
573
|
+
*/
|
|
574
|
+
static intersectFaces(nearest, faces, areaIndex, mesh, meshIndex, positions, rayOrigin, ray, point, vertexA, vertexB, vertexC, normal) {
|
|
575
|
+
const count = faces?.length ?? this.getPositionCount(positions);
|
|
576
|
+
for (let index = 0; index + 2 < count; index += 3) {
|
|
577
|
+
const vertexIndexA = faces ? faces[index] : index,
|
|
578
|
+
vertexIndexB = faces ? faces[index + 1] : index + 1,
|
|
579
|
+
vertexIndexC = faces ? faces[index + 2] : index + 2;
|
|
580
|
+
if (!this.copyPosition(vertexA, positions, vertexIndexA) || !this.copyPosition(vertexB, positions, vertexIndexB) || !this.copyPosition(vertexC, positions, vertexIndexC) || !ray3.getIntersectVertices(point, ray, vertexA, vertexB, vertexC, false)) {
|
|
581
|
+
continue;
|
|
582
|
+
}
|
|
583
|
+
const distance = vec3.distance(rayOrigin, point);
|
|
584
|
+
if (nearest && nearest.distance <= distance) continue;
|
|
585
|
+
if (!nearest) {
|
|
586
|
+
nearest = {
|
|
587
|
+
hit: true,
|
|
588
|
+
boneIndex: -1,
|
|
589
|
+
point: [0, 0, 0],
|
|
590
|
+
normal: [0, 0, 0],
|
|
591
|
+
distance,
|
|
592
|
+
meshIndex,
|
|
593
|
+
areaIndex
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
nearest.boneIndex = this.getMeshBoneIndex(mesh, vertexIndexA);
|
|
597
|
+
vec3.copy(nearest.point, point);
|
|
598
|
+
triangleNormalTo(normal, vertexA, vertexB, vertexC);
|
|
599
|
+
vec3.copy(nearest.normal, normal);
|
|
600
|
+
nearest.distance = distance;
|
|
601
|
+
nearest.meshIndex = meshIndex;
|
|
602
|
+
nearest.areaIndex = areaIndex;
|
|
603
|
+
}
|
|
604
|
+
return nearest;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* Copies one flat or nested position into caller-owned output.
|
|
609
|
+
*
|
|
610
|
+
* @param {ArrayLike<number>} out
|
|
611
|
+
* @param {ArrayLike<number>|Array<ArrayLike<number>>} positions
|
|
612
|
+
* @param {number} index
|
|
613
|
+
* @returns {boolean}
|
|
614
|
+
*/
|
|
615
|
+
static copyPosition(out, positions, index) {
|
|
616
|
+
if (!Number.isInteger(index) || index < 0) return false;
|
|
617
|
+
if (typeof positions[0] === "number") {
|
|
618
|
+
const offset = index * 3;
|
|
619
|
+
if (offset + 2 >= positions.length) return false;
|
|
620
|
+
out[0] = positions[offset];
|
|
621
|
+
out[1] = positions[offset + 1];
|
|
622
|
+
out[2] = positions[offset + 2];
|
|
623
|
+
return true;
|
|
624
|
+
}
|
|
625
|
+
const point = positions[index];
|
|
626
|
+
if (!point || point.length < 3) return false;
|
|
627
|
+
out[0] = point[0];
|
|
628
|
+
out[1] = point[1];
|
|
629
|
+
out[2] = point[2];
|
|
630
|
+
return true;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/**
|
|
634
|
+
* Gets the first blend index for a mesh vertex.
|
|
635
|
+
*
|
|
636
|
+
* @param {object} mesh
|
|
637
|
+
* @param {number} vertexIndex
|
|
638
|
+
* @returns {number}
|
|
639
|
+
*/
|
|
640
|
+
static getMeshBoneIndex(mesh, vertexIndex) {
|
|
641
|
+
const indices = mesh?.vertex?.blendIndices || mesh?.blendIndices;
|
|
642
|
+
if (!indices) return -1;
|
|
643
|
+
if (typeof indices[0] === "number") {
|
|
644
|
+
return Number(indices[vertexIndex * 4] ?? indices[vertexIndex] ?? -1);
|
|
645
|
+
}
|
|
646
|
+
return Number(indices[vertexIndex]?.[0] ?? -1);
|
|
647
|
+
}
|
|
648
|
+
}];
|
|
649
|
+
payload = "geometry";
|
|
650
|
+
constructor() {
|
|
651
|
+
super(_TriGeometryRes), _initClass();
|
|
652
|
+
}
|
|
653
|
+
}();
|
|
654
|
+
|
|
655
|
+
export { _TriGeometryRes as TriGeometryRes };
|
|
656
|
+
//# sourceMappingURL=TriGeometryRes.js.map
|