@navaramap/three 0.0.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/LICENSE +8 -0
- package/dist/assets/atmosphere/README.md +1 -0
- package/dist/assets/atmosphere/higher_order_scattering.bin +0 -0
- package/dist/assets/atmosphere/higher_order_scattering.exr +0 -0
- package/dist/assets/atmosphere/irradiance.bin +0 -0
- package/dist/assets/atmosphere/irradiance.exr +0 -0
- package/dist/assets/atmosphere/scattering.bin +0 -0
- package/dist/assets/atmosphere/scattering.exr +0 -0
- package/dist/assets/atmosphere/single_mie_scattering.bin +0 -0
- package/dist/assets/atmosphere/single_mie_scattering.exr +0 -0
- package/dist/assets/atmosphere/stars.bin +0 -0
- package/dist/assets/atmosphere/transmittance.bin +0 -0
- package/dist/assets/atmosphere/transmittance.exr +0 -0
- package/dist/assets/cloud/README.md +1 -0
- package/dist/assets/cloud/local_weather.png +0 -0
- package/dist/assets/cloud/shape.bin +1 -0
- package/dist/assets/cloud/shape_detail.bin +1 -0
- package/dist/assets/cloud/turbulence.png +0 -0
- package/dist/assets/fontWorker-CEJEfRpb.js +2 -0
- package/dist/assets/fontWorker-CEJEfRpb.js.map +1 -0
- package/dist/assets/index-BUB-ijMO.js +12 -0
- package/dist/assets/index-BUB-ijMO.js.map +1 -0
- package/dist/assets/navara_wasm_font_worker_bg-665OLxjy.wasm +0 -0
- package/dist/assets/navara_wasm_worker_bg-BXhKC5bE.wasm +0 -0
- package/dist/assets/noise/README.md +1 -0
- package/dist/assets/noise/stbn.bin +0 -0
- package/dist/assets/water/README.md +3 -0
- package/dist/assets/water/waternormals.jpg +0 -0
- package/dist/index.d.ts +10114 -0
- package/dist/index.js +34481 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.cjs +6345 -0
- package/dist/index.umd.cjs.map +1 -0
- package/package.json +95 -0
- package/src/Color.ts +111 -0
- package/src/ShadowMapViewers.ts +49 -0
- package/src/atmosphere.test.ts +76 -0
- package/src/atmosphere.ts +364 -0
- package/src/bufferView.ts +90 -0
- package/src/camera.ts +182 -0
- package/src/concurrency.ts +15 -0
- package/src/constants/assets.ts +30 -0
- package/src/constants/decoder.ts +7 -0
- package/src/constants/index.ts +2 -0
- package/src/core/BaseDesc.ts +142 -0
- package/src/core/BaseHandle.ts +126 -0
- package/src/core/DescRegistry.ts +88 -0
- package/src/core/EffectDesc.ts +343 -0
- package/src/core/EffectDescRegistry.ts +31 -0
- package/src/core/InstancedMeshDesc.ts +413 -0
- package/src/core/LightDesc.ts +216 -0
- package/src/core/LightDescRegistry.ts +32 -0
- package/src/core/MeshDesc.ts +457 -0
- package/src/core/MeshDescRegistry.ts +32 -0
- package/src/core/MeshDescWithSelectiveEffect.ts +129 -0
- package/src/core/Registries.ts +59 -0
- package/src/core/SelectiveEffectRegistry.ts +90 -0
- package/src/core/ViewContext.ts +235 -0
- package/src/core/errors.ts +16 -0
- package/src/core/index.ts +50 -0
- package/src/device.ts +414 -0
- package/src/effects/CustomEffectPass.ts +28 -0
- package/src/effects/copy.ts +10 -0
- package/src/effects/effect.ts +87 -0
- package/src/effects/index.ts +4 -0
- package/src/effects/render.ts +10 -0
- package/src/evaluations/FeatureEvaluator.ts +529 -0
- package/src/evaluations/index.ts +1 -0
- package/src/event/HillshadeContext.test.ts +232 -0
- package/src/event/HillshadeContext.ts +299 -0
- package/src/event/context.ts +279 -0
- package/src/event/feature.ts +357 -0
- package/src/event/featureEvent.ts +81 -0
- package/src/event/features/billboard.ts +30 -0
- package/src/event/features/model.ts +192 -0
- package/src/event/features/modelGpuBytes.test.ts +69 -0
- package/src/event/features/modelGpuBytes.ts +87 -0
- package/src/event/features/point.ts +25 -0
- package/src/event/features/polygon.ts +23 -0
- package/src/event/features/polygonOutline.ts +19 -0
- package/src/event/features/polyline.ts +19 -0
- package/src/event/features/text.ts +71 -0
- package/src/event/hillshade.test.ts +842 -0
- package/src/event/hillshade.ts +588 -0
- package/src/event/index.ts +700 -0
- package/src/event/loaders.ts +53 -0
- package/src/event/tile.ts +19 -0
- package/src/event/worker.ts +999 -0
- package/src/event/workerTaskSettlement.test.ts +243 -0
- package/src/event/workerTaskSettlement.ts +128 -0
- package/src/inMemoryBufferStore.test.ts +60 -0
- package/src/inMemoryBufferStore.ts +67 -0
- package/src/index.iife.ts +11 -0
- package/src/index.ts +2556 -0
- package/src/input.ts +144 -0
- package/src/layer.ts +183 -0
- package/src/layers/effect/FinalCopyEffectDesc.ts +29 -0
- package/src/layers/effect/MRTPassEffectDesc.ts +105 -0
- package/src/layers/effect/README.md +9 -0
- package/src/layers/effect/SelectiveEffectDesc.ts +113 -0
- package/src/layers/effect/SkyEnvMapEffectDesc.ts +58 -0
- package/src/layers/effect/TransparentPassEffectDesc.ts +62 -0
- package/src/layers/effect/index.ts +5 -0
- package/src/layers/index.ts +1 -0
- package/src/layersManager.ts +63 -0
- package/src/light.ts +15 -0
- package/src/loaders/AbortableImageLoader.ts +203 -0
- package/src/loaders/AbortableTextureLoader.ts +74 -0
- package/src/loaders/index.ts +5 -0
- package/src/material/enhancer/DESIGN.md +300 -0
- package/src/material/enhancer/MaterialEnhancer.ts +112 -0
- package/src/material/enhancer/ShaderReplacer.test.ts +114 -0
- package/src/material/enhancer/ShaderReplacer.ts +97 -0
- package/src/material/enhancer/batchTexture.ts +8 -0
- package/src/material/enhancer/index.ts +46 -0
- package/src/material/enhancer/instancedSprite/index.ts +7 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.test.ts +214 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.ts +134 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/markers.ts +21 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/material.ts +32 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.test.ts +277 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.ts +151 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.test.ts +114 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.ts +49 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.test.ts +82 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.ts +80 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/types.ts +146 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteMaterialEnhancer.ts +105 -0
- package/src/material/enhancer/model/index.ts +25 -0
- package/src/material/enhancer/model/modelBaseEnhancer/index.test.ts +74 -0
- package/src/material/enhancer/model/modelBaseEnhancer/index.ts +110 -0
- package/src/material/enhancer/model/modelBaseEnhancer/markers.ts +27 -0
- package/src/material/enhancer/model/modelBaseEnhancer/material.test.ts +66 -0
- package/src/material/enhancer/model/modelBaseEnhancer/material.ts +44 -0
- package/src/material/enhancer/model/modelBaseEnhancer/mutates.test.ts +84 -0
- package/src/material/enhancer/model/modelBaseEnhancer/mutates.ts +47 -0
- package/src/material/enhancer/model/modelBaseEnhancer/shader.test.ts +24 -0
- package/src/material/enhancer/model/modelBaseEnhancer/shader.ts +162 -0
- package/src/material/enhancer/model/modelBaseEnhancer/state.test.ts +103 -0
- package/src/material/enhancer/model/modelBaseEnhancer/state.ts +52 -0
- package/src/material/enhancer/model/modelBaseEnhancer/types.ts +89 -0
- package/src/material/enhancer/model/modelMaterialEnhancer.ts +91 -0
- package/src/material/enhancer/model/modelWaterEnhancer/index.test.ts +71 -0
- package/src/material/enhancer/model/modelWaterEnhancer/index.ts +175 -0
- package/src/material/enhancer/model/modelWaterEnhancer/material.test.ts +48 -0
- package/src/material/enhancer/model/modelWaterEnhancer/material.ts +25 -0
- package/src/material/enhancer/model/modelWaterEnhancer/mutates.test.ts +89 -0
- package/src/material/enhancer/model/modelWaterEnhancer/mutates.ts +89 -0
- package/src/material/enhancer/model/modelWaterEnhancer/shader.test.ts +34 -0
- package/src/material/enhancer/model/modelWaterEnhancer/shader.ts +111 -0
- package/src/material/enhancer/model/modelWaterEnhancer/state.test.ts +105 -0
- package/src/material/enhancer/model/modelWaterEnhancer/state.ts +59 -0
- package/src/material/enhancer/model/modelWaterEnhancer/types.ts +141 -0
- package/src/material/enhancer/model/pntsEnhancer/index.test.ts +96 -0
- package/src/material/enhancer/model/pntsEnhancer/index.ts +82 -0
- package/src/material/enhancer/model/pntsEnhancer/markers.ts +6 -0
- package/src/material/enhancer/model/pntsEnhancer/material.test.ts +37 -0
- package/src/material/enhancer/model/pntsEnhancer/material.ts +21 -0
- package/src/material/enhancer/model/pntsEnhancer/mutates.test.ts +80 -0
- package/src/material/enhancer/model/pntsEnhancer/mutates.ts +29 -0
- package/src/material/enhancer/model/pntsEnhancer/shader.test.ts +32 -0
- package/src/material/enhancer/model/pntsEnhancer/shader.ts +56 -0
- package/src/material/enhancer/model/pntsEnhancer/state.test.ts +87 -0
- package/src/material/enhancer/model/pntsEnhancer/state.ts +29 -0
- package/src/material/enhancer/model/pntsEnhancer/types.ts +38 -0
- package/src/material/enhancer/polygon/index.ts +22 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/index.test.ts +101 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/index.ts +130 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/markers.ts +23 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/material.test.ts +19 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/material.ts +38 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.test.ts +75 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.ts +122 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.test.ts +25 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.ts +249 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/state.test.ts +102 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/state.ts +92 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/types.ts +150 -0
- package/src/material/enhancer/polygon/polygonMaterialEnhancer.ts +97 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/index.test.ts +72 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/index.ts +164 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/material.test.ts +48 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/material.ts +35 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/mutates.ts +61 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.test.ts +34 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.ts +96 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/state.test.ts +98 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/state.ts +57 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/types.ts +115 -0
- package/src/material/enhancer/polyline/index.ts +7 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/index.test.ts +157 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/index.ts +154 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/markers.ts +19 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/material.test.ts +42 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/material.ts +38 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.test.ts +120 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.ts +169 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.test.ts +67 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.ts +75 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/state.test.ts +55 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/state.ts +91 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/types.ts +170 -0
- package/src/material/enhancer/polyline/polylineMaterialEnhancer.ts +102 -0
- package/src/material/enhancer/sdfText/index.ts +7 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/index.ts +125 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/markers.ts +19 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.test.ts +35 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.ts +32 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.test.ts +381 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.ts +232 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/shader.ts +36 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.test.ts +118 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.ts +107 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/types.ts +184 -0
- package/src/material/enhancer/sdfText/sdfTextMaterialEnhancer.ts +100 -0
- package/src/material/enhancer/shadowMap/index.ts +7 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/index.ts +97 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/markers.ts +10 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/material.ts +31 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/mutates.ts +8 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.test.ts +17 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.ts +53 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/state.ts +17 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/types.ts +26 -0
- package/src/material/enhancer/test-utils/shaderCompatibility.ts +124 -0
- package/src/material/enhancer/tileComposite/compose.test.ts +95 -0
- package/src/material/enhancer/tileComposite/compose.ts +112 -0
- package/src/material/enhancer/tileComposite/index.ts +23 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/index.ts +11 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/mutates.ts +132 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/shader.ts +245 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/types.ts +43 -0
- package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/index.ts +29 -0
- package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/mutates.ts +68 -0
- package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/shader.ts +24 -0
- package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/index.ts +29 -0
- package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/mutates.ts +34 -0
- package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/shader.ts +36 -0
- package/src/material/enhancer/tileComposite/tileWaterEnhancer/index.ts +23 -0
- package/src/material/enhancer/tileComposite/tileWaterEnhancer/mutates.ts +23 -0
- package/src/material/enhancer/tileComposite/tileWaterEnhancer/shader.ts +8 -0
- package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/index.ts +23 -0
- package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/mutates.ts +34 -0
- package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/shader.ts +13 -0
- package/src/material/enhancer/tileComposite/types.ts +58 -0
- package/src/material/index.ts +3 -0
- package/src/material/macro/index.ts +1 -0
- package/src/material/macro/tileShader.test.ts +136 -0
- package/src/material/macro/tileShader.ts +287 -0
- package/src/material/overrideMaterialsForMRT.ts +439 -0
- package/src/material/selectiveEffectMaterialSetup.test.ts +52 -0
- package/src/material/selectiveEffectMaterialSetup.ts +53 -0
- package/src/material/types/index.ts +1 -0
- package/src/material/types/uniform.ts +1 -0
- package/src/mesh/DrapedMesh.ts +101 -0
- package/src/mesh/batchTexture.test.ts +646 -0
- package/src/mesh/batchTexture.ts +437 -0
- package/src/mesh/batchedFeature.ts +186 -0
- package/src/mesh/batchedSdfText.ts +484 -0
- package/src/mesh/featureMesh.ts +43 -0
- package/src/mesh/index.ts +16 -0
- package/src/mesh/instanced.ts +117 -0
- package/src/mesh/model.ts +483 -0
- package/src/mesh/pickableMesh.ts +55 -0
- package/src/mesh/pickableMeshWrapper.ts +529 -0
- package/src/mesh/polygon.ts +699 -0
- package/src/mesh/polygonOutline.ts +393 -0
- package/src/mesh/polyline.ts +523 -0
- package/src/mesh/releaseGeometryArrays.ts +57 -0
- package/src/mesh/rtcRteHelper.ts +211 -0
- package/src/mesh/sdfText.test.ts +200 -0
- package/src/mesh/sdfText.ts +1019 -0
- package/src/mesh/sprite/billboardAtlas.test.ts +177 -0
- package/src/mesh/sprite/billboardAtlas.ts +210 -0
- package/src/mesh/sprite/billboardAtlasImageLoader.ts +29 -0
- package/src/mesh/sprite/index.ts +1 -0
- package/src/mesh/sprite/instancedSprite.ts +694 -0
- package/src/mesh/tile.test.ts +393 -0
- package/src/mesh/tile.ts +1790 -0
- package/src/object3DEvent.ts +6 -0
- package/src/orchestrators/RenderPassOrchestrator.ts +147 -0
- package/src/orchestrators/index.ts +1 -0
- package/src/passes/AllDepthCopyPass.ts +165 -0
- package/src/passes/CustomRenderPass.ts +279 -0
- package/src/passes/NormalCopyPass.ts +125 -0
- package/src/passes/RenderTargetCopyPass.ts +91 -0
- package/src/passes/SkyEnvMapPass.ts +58 -0
- package/src/passes/index.ts +5 -0
- package/src/pick/pickHelper.ts +273 -0
- package/src/pick/pickTerrain.ts +254 -0
- package/src/plugins/AttributionPlugin/AttributionPlugin.test.ts +210 -0
- package/src/plugins/AttributionPlugin/attribution.test.ts +225 -0
- package/src/plugins/AttributionPlugin/attribution.ts +355 -0
- package/src/plugins/AttributionPlugin/attributionStyles.ts +163 -0
- package/src/plugins/AttributionPlugin/index.ts +702 -0
- package/src/plugins/index.ts +1 -0
- package/src/quality.ts +1 -0
- package/src/renderOrder.ts +3 -0
- package/src/scene.test.ts +164 -0
- package/src/scene.ts +127 -0
- package/src/shaders/index.ts +1 -0
- package/src/solar.test.ts +81 -0
- package/src/solar.ts +101 -0
- package/src/source.ts +80 -0
- package/src/stats.ts +102 -0
- package/src/tasks/computeVertexNormalsAsync.ts +15 -0
- package/src/tasks/constructPolygonBatchedFeature.ts +34 -0
- package/src/tasks/constructPolylineBatchedFeature.ts +27 -0
- package/src/tasks/constructQuantizedMeshTerrainMesh.ts +24 -0
- package/src/tasks/constructTerrainMesh.ts +25 -0
- package/src/tasks/getImageDataFromBlob.ts +13 -0
- package/src/tasks/getImageDataFromImageBitmap.ts +12 -0
- package/src/tasks/parseMvtTile.ts +22 -0
- package/src/tasks/queueTask.ts +19 -0
- package/src/tasks/toCreasedNormalsAsync.ts +18 -0
- package/src/tasks/upsampleQuantizedMeshTerrainMesh.ts +44 -0
- package/src/tasks/upsampleTerrainMesh.ts +39 -0
- package/src/texture.ts +19 -0
- package/src/textures.ts +13 -0
- package/src/tileTexture/CompositeShader.snapshot.test.ts +59 -0
- package/src/tileTexture/CompositeShader.test.ts +168 -0
- package/src/tileTexture/CompositeShader.ts +53 -0
- package/src/tileTexture/SlotPlanner.test.ts +105 -0
- package/src/tileTexture/SlotPlanner.ts +102 -0
- package/src/tileTexture/TileTextureCache.test.ts +227 -0
- package/src/tileTexture/TileTextureCache.ts +192 -0
- package/src/tileTexture/TileTextureCompositor.test.ts +260 -0
- package/src/tileTexture/TileTextureCompositor.ts +421 -0
- package/src/tileTexture/__snapshots__/CompositeShader.snapshot.test.ts.snap +2649 -0
- package/src/tileTexture/index.ts +8 -0
- package/src/tileTexture/types.ts +150 -0
- package/src/type/index.ts +261 -0
- package/src/uniforms.ts +20 -0
- package/src/utils/arraysEqual.ts +9 -0
- package/src/utils/blendModes.ts +80 -0
- package/src/utils/geometry.ts +53 -0
- package/src/utils/hillshadeNormalMapGenerator.ts +193 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/object.test.ts +14 -0
- package/src/utils/object.ts +7 -0
- package/src/utils/replacer.test.ts +42 -0
- package/src/utils/replacer.ts +89 -0
- package/src/utils/screen.ts +29 -0
- package/src/utils/textureFragmentIndex.test.ts +224 -0
- package/src/utils/textureFragmentIndex.ts +97 -0
- package/src/utils/worker.ts +3 -0
- package/src/vite-env.d.ts +2 -0
- package/src/worker/index.ts +13 -0
- package/src/worker/tasks/computeVertexNormals.ts +15 -0
- package/src/worker/tasks/toCreasedNormals.ts +22 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PolygonMesh as NavaraPolygonMesh,
|
|
3
|
+
PolygonMaterial,
|
|
4
|
+
} from "@navaramap/engine";
|
|
5
|
+
import BatchTextureParsVertex from "@shaders/glsl/chunks/batch_texture_pars_vertex.glsl";
|
|
6
|
+
import BranchFreeTernary from "@shaders/glsl/chunks/branchFreeTernary.glsl";
|
|
7
|
+
import ExtrudedHeightParsVertex from "@shaders/glsl/chunks/extruded_height_pars_vertex.glsl";
|
|
8
|
+
import ExtrudedHeightVertex from "@shaders/glsl/chunks/extruded_height_vertex.glsl";
|
|
9
|
+
import HeightParsVertex from "@shaders/glsl/chunks/height_pars_vertex.glsl";
|
|
10
|
+
import HeightVertex from "@shaders/glsl/chunks/height_vertex.glsl";
|
|
11
|
+
import { Color, type DataTexture, InstancedBufferAttribute } from "three";
|
|
12
|
+
import {
|
|
13
|
+
Line2,
|
|
14
|
+
LineGeometry,
|
|
15
|
+
LineMaterial,
|
|
16
|
+
LineSegmentsGeometry,
|
|
17
|
+
} from "three-stdlib";
|
|
18
|
+
|
|
19
|
+
import type { EventContext } from "../event/context";
|
|
20
|
+
import { setupMaterialForMRT } from "../material";
|
|
21
|
+
import { createReplacer } from "../utils/replacer";
|
|
22
|
+
|
|
23
|
+
import { POLYGON_BATCH_TEXTURE_ROWS } from "./batchedFeature";
|
|
24
|
+
import { initBatchedMaterial } from "./batchTexture";
|
|
25
|
+
import type { FeatureMesh } from "./featureMesh";
|
|
26
|
+
|
|
27
|
+
class NvLineGeometry extends LineGeometry {
|
|
28
|
+
setPositions(
|
|
29
|
+
array: Float32Array,
|
|
30
|
+
skipIdx: Uint32Array = new Uint32Array(),
|
|
31
|
+
): this {
|
|
32
|
+
const positions: number[] = [];
|
|
33
|
+
const skipSet = new Set(skipIdx);
|
|
34
|
+
|
|
35
|
+
for (let i = 0; i < array.length - 3; i += 3) {
|
|
36
|
+
const currentIndex = i / 3;
|
|
37
|
+
if (skipSet.has(currentIndex)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// segment start
|
|
42
|
+
positions.push(array[i], array[i + 1], array[i + 2]);
|
|
43
|
+
// segment end
|
|
44
|
+
positions.push(array[i + 3], array[i + 4], array[i + 5]);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const points = new Float32Array(positions);
|
|
48
|
+
|
|
49
|
+
// This function is used to override LineGeometry's setPositions,
|
|
50
|
+
// so we don't call super.setPositions.
|
|
51
|
+
LineSegmentsGeometry.prototype.setPositions.call(this, points);
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export class PolygonOutlineMesh extends Line2 implements FeatureMesh {
|
|
57
|
+
readonly ctx: EventContext;
|
|
58
|
+
private resizeEventUnsubscribe?: () => void;
|
|
59
|
+
|
|
60
|
+
constructor(ctx: EventContext, mesh: NavaraPolygonMesh) {
|
|
61
|
+
super(new NvLineGeometry(), new LineMaterial());
|
|
62
|
+
this.ctx = ctx;
|
|
63
|
+
this.initGeometry(mesh);
|
|
64
|
+
this.initMaterial(mesh);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private initGeometry(mesh: NavaraPolygonMesh) {
|
|
68
|
+
const g = mesh.outline_geometry;
|
|
69
|
+
if (!g || !g.position) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const position = this.ctx.buf.removeF32(g.position.data);
|
|
73
|
+
if (!position) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const scale_normal_and_cap = g.scale_normal_and_cap
|
|
78
|
+
? this.ctx.buf.removeF32(g.scale_normal_and_cap.data)
|
|
79
|
+
: undefined;
|
|
80
|
+
|
|
81
|
+
const skipIdx = g.skip_indices
|
|
82
|
+
? (this.ctx.buf.removeU32(g.skip_indices) ?? undefined)
|
|
83
|
+
: undefined;
|
|
84
|
+
|
|
85
|
+
const batchIndex = g.batch_index
|
|
86
|
+
? this.ctx.buf.removeF32(g.batch_index.data)
|
|
87
|
+
: undefined;
|
|
88
|
+
|
|
89
|
+
// Convert position buffer to Line2 format
|
|
90
|
+
const lineGeometry = this.geometry as NvLineGeometry;
|
|
91
|
+
lineGeometry.setPositions(position, skipIdx);
|
|
92
|
+
|
|
93
|
+
// Add scale_normal_and_cap attributes if available
|
|
94
|
+
if (g.scale_normal_and_cap && scale_normal_and_cap) {
|
|
95
|
+
const size = g.scale_normal_and_cap.size;
|
|
96
|
+
this.initScaleNormalCapAttributes(
|
|
97
|
+
scale_normal_and_cap,
|
|
98
|
+
skipIdx,
|
|
99
|
+
size,
|
|
100
|
+
lineGeometry,
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Add per-segment batch index attribute for batch texture lookups
|
|
105
|
+
if (batchIndex) {
|
|
106
|
+
const segmentBatchIds: number[] = [];
|
|
107
|
+
const skipSet = new Set(skipIdx ?? []);
|
|
108
|
+
for (let i = 0; i < batchIndex.length - 1; i++) {
|
|
109
|
+
if (skipSet.has(i)) continue;
|
|
110
|
+
segmentBatchIds.push(batchIndex[i]);
|
|
111
|
+
}
|
|
112
|
+
lineGeometry.setAttribute(
|
|
113
|
+
"_batchid",
|
|
114
|
+
new InstancedBufferAttribute(new Float32Array(segmentBatchIds), 1),
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private initScaleNormalCapAttributes(
|
|
120
|
+
scale_normal_and_cap: Float32Array<ArrayBufferLike>,
|
|
121
|
+
skipIdx: Uint32Array<ArrayBufferLike> | undefined,
|
|
122
|
+
size: number,
|
|
123
|
+
lineGeometry: LineGeometry,
|
|
124
|
+
) {
|
|
125
|
+
// Create separate arrays for start and end points of line segments
|
|
126
|
+
const scaleDataStart: number[] = [];
|
|
127
|
+
const scaleDataEnd: number[] = [];
|
|
128
|
+
const skipSet = new Set(skipIdx ?? []);
|
|
129
|
+
|
|
130
|
+
for (let i = 0; i < scale_normal_and_cap.length / size - 1; i++) {
|
|
131
|
+
if (skipSet.has(i)) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// For each line segment, add start and end scale normal data
|
|
136
|
+
const startIdx = i * size;
|
|
137
|
+
const endIdx = (i + 1) * size;
|
|
138
|
+
|
|
139
|
+
// Start point data
|
|
140
|
+
for (let j = 0; j < size; j++) {
|
|
141
|
+
scaleDataStart.push(scale_normal_and_cap[startIdx + j]);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// End point data
|
|
145
|
+
for (let j = 0; j < size; j++) {
|
|
146
|
+
scaleDataEnd.push(scale_normal_and_cap[endIdx + j]);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
lineGeometry.setAttribute(
|
|
151
|
+
"scaleNormalAndCapStart",
|
|
152
|
+
new InstancedBufferAttribute(new Float32Array(scaleDataStart), size),
|
|
153
|
+
);
|
|
154
|
+
lineGeometry.setAttribute(
|
|
155
|
+
"scaleNormalAndCapEnd",
|
|
156
|
+
new InstancedBufferAttribute(new Float32Array(scaleDataEnd), size),
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private initMaterial(mesh: NavaraPolygonMesh) {
|
|
161
|
+
const meshMaterial = mesh.material;
|
|
162
|
+
const material = this.material;
|
|
163
|
+
|
|
164
|
+
// Set basic material properties
|
|
165
|
+
material.color.set(meshMaterial.outlineColor ?? 0xffffff);
|
|
166
|
+
material.linewidth = meshMaterial.outlineWidth ?? 1;
|
|
167
|
+
|
|
168
|
+
const resizeHandler = (w: number, h: number) => {
|
|
169
|
+
material.resolution.set(w, h);
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
this.ctx.viewEvents.on("resize", resizeHandler);
|
|
173
|
+
this.resizeEventUnsubscribe = () =>
|
|
174
|
+
this.ctx.viewEvents.off("resize", resizeHandler);
|
|
175
|
+
|
|
176
|
+
// Set up height adjustment uniforms
|
|
177
|
+
const uMinMaxHeights = meshMaterial.__internal__?.minMaxHeights;
|
|
178
|
+
material.userData.uMinMaxHeight = {
|
|
179
|
+
value: uMinMaxHeights,
|
|
180
|
+
};
|
|
181
|
+
material.userData.uAddExtrudedHeight = {
|
|
182
|
+
value: 0.0,
|
|
183
|
+
};
|
|
184
|
+
material.userData.uAddHeight = {
|
|
185
|
+
value: 0.0,
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
// Set up batch texture material defines (row indices, row count).
|
|
189
|
+
// The rows must match PolygonMesh's — the batch data texture is shared.
|
|
190
|
+
initBatchedMaterial(material, {
|
|
191
|
+
rows: POLYGON_BATCH_TEXTURE_ROWS,
|
|
192
|
+
batchLength: 0,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
material.onBeforeCompile = (shader) => {
|
|
196
|
+
// Merge user-defined defines (batch texture, color/show, height, etc.)
|
|
197
|
+
shader.defines ??= {};
|
|
198
|
+
Object.assign(shader.defines, material.userData.defines || {});
|
|
199
|
+
|
|
200
|
+
shader.uniforms.uMinMaxHeight = material.userData.uMinMaxHeight;
|
|
201
|
+
shader.uniforms.uAddExtrudedHeight = material.userData.uAddExtrudedHeight;
|
|
202
|
+
shader.uniforms.uAddHeight = material.userData.uAddHeight;
|
|
203
|
+
|
|
204
|
+
// Batch texture uniform (shared from parent PolygonMesh)
|
|
205
|
+
if (material.userData.batchDataTexture) {
|
|
206
|
+
shader.uniforms.batchDataTexture = material.userData.batchDataTexture;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
shader.vertexShader = createReplacer(shader.vertexShader)
|
|
210
|
+
.replace(
|
|
211
|
+
"attribute vec3 instanceEnd;",
|
|
212
|
+
`
|
|
213
|
+
attribute vec3 instanceEnd;
|
|
214
|
+
attribute vec4 scaleNormalAndCapStart;
|
|
215
|
+
attribute vec4 scaleNormalAndCapEnd;
|
|
216
|
+
varying float nvr_vShow;
|
|
217
|
+
uniform vec2 uMinMaxHeight;
|
|
218
|
+
${ExtrudedHeightParsVertex}
|
|
219
|
+
${HeightParsVertex}
|
|
220
|
+
${BranchFreeTernary}
|
|
221
|
+
${BatchTextureParsVertex}
|
|
222
|
+
`,
|
|
223
|
+
)
|
|
224
|
+
.replace(
|
|
225
|
+
"vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );",
|
|
226
|
+
`
|
|
227
|
+
${ExtrudedHeightVertex}
|
|
228
|
+
${HeightVertex}
|
|
229
|
+
|
|
230
|
+
nvr_vShow = 1.0;
|
|
231
|
+
#ifdef USE_BATCH_TEXTURE
|
|
232
|
+
float batchId = _batchid;
|
|
233
|
+
#ifdef USE_BATCH_COLOR_SHOW
|
|
234
|
+
// Color is ignored.
|
|
235
|
+
vec4 batchColorShow = getBatchColorShow(batchId);
|
|
236
|
+
nvr_vShow = batchColorShow.a;
|
|
237
|
+
#endif
|
|
238
|
+
#ifdef USE_BATCH_EXTRUDED_HEIGHT
|
|
239
|
+
addExtrudedHeight = getBatchExtrudedHeight(batchId);
|
|
240
|
+
#endif
|
|
241
|
+
#ifdef USE_BATCH_HEIGHT
|
|
242
|
+
addHeight = getBatchHeight(batchId);
|
|
243
|
+
#endif
|
|
244
|
+
#endif
|
|
245
|
+
|
|
246
|
+
vec3 adjustedInstanceStart = instanceStart;
|
|
247
|
+
adjustedInstanceStart.xyz += scaleNormalAndCapStart.xyz * nvr_branchFreeTernary(
|
|
248
|
+
scaleNormalAndCapStart.w == 0.0,
|
|
249
|
+
uMinMaxHeight.x + addHeight,
|
|
250
|
+
uMinMaxHeight.y + addExtrudedHeight
|
|
251
|
+
);
|
|
252
|
+
vec4 start = modelViewMatrix * vec4( adjustedInstanceStart, 1.0 );
|
|
253
|
+
`,
|
|
254
|
+
)
|
|
255
|
+
.replace(
|
|
256
|
+
"vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );",
|
|
257
|
+
`
|
|
258
|
+
vec3 adjustedInstanceEnd = instanceEnd;
|
|
259
|
+
adjustedInstanceEnd.xyz += scaleNormalAndCapEnd.xyz * nvr_branchFreeTernary(
|
|
260
|
+
scaleNormalAndCapEnd.w == 0.0,
|
|
261
|
+
uMinMaxHeight.x + addHeight,
|
|
262
|
+
uMinMaxHeight.y + addExtrudedHeight
|
|
263
|
+
);
|
|
264
|
+
vec4 end = modelViewMatrix * vec4( adjustedInstanceEnd, 1.0 );
|
|
265
|
+
`,
|
|
266
|
+
).source;
|
|
267
|
+
|
|
268
|
+
shader.fragmentShader = createReplacer(shader.fragmentShader).replace(
|
|
269
|
+
"void main() {",
|
|
270
|
+
`
|
|
271
|
+
varying float nvr_vShow;
|
|
272
|
+
varying float nvr_vHasBatchColor;
|
|
273
|
+
void main() {
|
|
274
|
+
if (nvr_vShow < 0.5) discard;
|
|
275
|
+
`,
|
|
276
|
+
).source;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
// Apply MRT compatibility
|
|
280
|
+
setupMaterialForMRT(material);
|
|
281
|
+
|
|
282
|
+
// Update based on initial state
|
|
283
|
+
this._update(meshMaterial, mesh.active);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
_update(material: PolygonMaterial, active: boolean) {
|
|
287
|
+
if (!this.userData.prev) {
|
|
288
|
+
this.userData.prev = {};
|
|
289
|
+
}
|
|
290
|
+
const prev = this.userData.prev;
|
|
291
|
+
const lineMaterial = this.material;
|
|
292
|
+
|
|
293
|
+
// Update color
|
|
294
|
+
if (prev.color !== material.outlineColor) {
|
|
295
|
+
const nextColor = material.outlineColor ?? 0xffffff;
|
|
296
|
+
lineMaterial.color.set(nextColor);
|
|
297
|
+
prev.color = nextColor;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Update visibility
|
|
301
|
+
const nextVisible =
|
|
302
|
+
(material.show ?? true) && (material.outlineShow ?? true) && active;
|
|
303
|
+
if (prev.visible !== nextVisible) {
|
|
304
|
+
this.visible = nextVisible;
|
|
305
|
+
prev.visible = nextVisible;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Update line width
|
|
309
|
+
if (prev.width !== material.outlineWidth) {
|
|
310
|
+
const nextWidth = material.outlineWidth ?? 1;
|
|
311
|
+
lineMaterial.linewidth = nextWidth;
|
|
312
|
+
prev.width = nextWidth;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Update height values for shader-based adjustment
|
|
316
|
+
const [min, max] = material.__internal__?.minMaxHeights ?? [];
|
|
317
|
+
if (prev.min !== min || prev.max !== max) {
|
|
318
|
+
lineMaterial.userData.uMinMaxHeight.value = [min, max];
|
|
319
|
+
prev.min = min;
|
|
320
|
+
prev.max = max;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
_setFeatureColor(color: Color) {
|
|
325
|
+
this.material.color.set(color);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
_getFeatureColor() {
|
|
329
|
+
return this.material.color;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
_setFeatureShow(visible: boolean): void {
|
|
333
|
+
this.visible = visible;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
_setFrustumCulled(culled: boolean): void {
|
|
337
|
+
this.frustumCulled = culled;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
_setFeatureExtrudedHeight(height: number): void {
|
|
341
|
+
this.material.userData.uAddExtrudedHeight.value = height;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
_setFeatureHeight(height: number): void {
|
|
345
|
+
this.material.userData.uAddHeight.value = height;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
_setFeatureWidth(_width: number): void {
|
|
349
|
+
// Width is not applicable to polygon outlines.
|
|
350
|
+
// This method is intentionally a no-op to satisfy the FeatureMesh interface.
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
_setFeatureOpacity(_opacity: number): void {
|
|
354
|
+
// Opacity adjustment is not applicable to polygon outlines.
|
|
355
|
+
// This method is intentionally a no-op to satisfy the FeatureMesh interface.
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Utility method to update resolution (should be called when renderer size changes)
|
|
359
|
+
updateResolution(width: number, height: number): void {
|
|
360
|
+
this.material.resolution.set(width, height);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
initBatchTexture(texture: DataTexture) {
|
|
364
|
+
this.material.userData.batchDataTexture = { value: texture };
|
|
365
|
+
this.material.userData.defines ??= {};
|
|
366
|
+
this.material.userData.defines.USE_BATCH_TEXTURE = true;
|
|
367
|
+
this.material.needsUpdate = true;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
enableBatchColorShow() {
|
|
371
|
+
this.material.userData.defines ??= {};
|
|
372
|
+
this.material.userData.defines.USE_BATCH_COLOR_SHOW = true;
|
|
373
|
+
this.material.needsUpdate = true;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
enableBatchHeight() {
|
|
377
|
+
this.material.userData.defines ??= {};
|
|
378
|
+
this.material.userData.defines.USE_BATCH_HEIGHT = true;
|
|
379
|
+
this.material.needsUpdate = true;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
enableBatchExtrudedHeight() {
|
|
383
|
+
this.material.userData.defines ??= {};
|
|
384
|
+
this.material.userData.defines.USE_BATCH_EXTRUDED_HEIGHT = true;
|
|
385
|
+
this.material.needsUpdate = true;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// Clean up event listeners when the object is destroyed
|
|
389
|
+
dispose(): void {
|
|
390
|
+
this.resizeEventUnsubscribe?.();
|
|
391
|
+
this.resizeEventUnsubscribe = undefined;
|
|
392
|
+
}
|
|
393
|
+
}
|