@loaders.gl/tile-converter 3.4.0-alpha.2 → 3.4.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/3d-tiles-attributes-worker.js +2 -2
- package/dist/3d-tiles-attributes-worker.js.map +3 -3
- package/dist/converter.min.js +182 -182
- package/dist/dist.min.js +1101 -754
- package/dist/es5/3d-tiles-attributes-worker.js +1 -2
- package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +264 -287
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +89 -113
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +0 -2
- package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
- package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -1
- package/dist/es5/constants.js.map +1 -1
- package/dist/es5/converter-cli.js +67 -81
- package/dist/es5/converter-cli.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +64 -69
- package/dist/es5/deps-installer/deps-installer.js.map +1 -1
- package/dist/es5/i3s-attributes-worker.js +1 -2
- package/dist/es5/i3s-attributes-worker.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +0 -8
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js +0 -5
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +14 -16
- package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/feature-attributes.js +1 -11
- package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js +3 -10
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +397 -449
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js +0 -2
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-debug.js +1 -9
- package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-index-document.js +293 -318
- package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-pages.js +279 -319
- package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js +964 -1030
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/node.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/shared-resources.js +1 -1
- package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/store.js.map +1 -1
- package/dist/es5/i3s-server/controllers/index-controller.js +28 -30
- package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -1
- package/dist/es5/i3s-server/routes/index.js +15 -18
- package/dist/es5/i3s-server/routes/index.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/utils/compress-util.js +198 -218
- package/dist/es5/lib/utils/compress-util.js.map +1 -1
- package/dist/es5/lib/utils/file-utils.js +118 -128
- package/dist/es5/lib/utils/file-utils.js.map +1 -1
- package/dist/es5/lib/utils/lod-conversion-utils.js +0 -1
- package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/es5/lib/utils/queue.js.map +1 -1
- package/dist/es5/lib/utils/statistic-utills.js +81 -85
- package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
- package/dist/es5/lib/utils/write-queue.js +84 -92
- package/dist/es5/lib/utils/write-queue.js.map +1 -1
- package/dist/es5/pgm-loader.js +7 -10
- package/dist/es5/pgm-loader.js.map +1 -1
- package/dist/es5/workers/3d-tiles-attributes-worker.js +7 -9
- package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/es5/workers/i3s-attributes-worker.js +10 -12
- package/dist/es5/workers/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/3d-tiles-attributes-worker.js +1 -3
- package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +1 -15
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +0 -12
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +0 -1
- package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +0 -3
- package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
- package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -1
- package/dist/esm/bundle.js +0 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/converter-cli.js +0 -11
- package/dist/esm/converter-cli.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +1 -4
- package/dist/esm/deps-installer/deps-installer.js.map +1 -1
- package/dist/esm/i3s-attributes-worker.js +1 -3
- package/dist/esm/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +0 -8
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js +0 -5
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +0 -1
- package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/feature-attributes.js +0 -11
- package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js +0 -7
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +0 -48
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js +0 -3
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-debug.js +1 -9
- package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-index-document.js +0 -14
- package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-pages.js +0 -18
- package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js +4 -42
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/node.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -1
- package/dist/esm/i3s-server/controllers/index-controller.js +0 -2
- package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -1
- package/dist/esm/i3s-server/routes/index.js +0 -1
- package/dist/esm/i3s-server/routes/index.js.map +1 -1
- package/dist/esm/lib/utils/compress-util.js +1 -17
- package/dist/esm/lib/utils/compress-util.js.map +1 -1
- package/dist/esm/lib/utils/file-utils.js +0 -7
- package/dist/esm/lib/utils/file-utils.js.map +1 -1
- package/dist/esm/lib/utils/lod-conversion-utils.js +0 -2
- package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/esm/lib/utils/queue.js.map +1 -1
- package/dist/esm/lib/utils/statistic-utills.js.map +1 -1
- package/dist/esm/lib/utils/write-queue.js +0 -2
- package/dist/esm/lib/utils/write-queue.js.map +1 -1
- package/dist/esm/pgm-loader.js +1 -3
- package/dist/esm/pgm-loader.js.map +1 -1
- package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/esm/workers/i3s-attributes-worker.js.map +1 -1
- package/dist/i3s-attributes-worker.js +2 -2
- package/dist/i3s-attributes-worker.js.map +3 -3
- package/dist/i3s-converter/helpers/node-pages.js +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3d-tiles-converter.js","names":["I3S","Tiles3DConverter","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","isBrowser","console","log","BROWSER_ERROR_MESSAGE","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","process","hrtime","load","PGMLoader","loadWorkers","I3SLoader","sourceTilesetJson","Tileset3D","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","createObbFromMbs","mbs","join","removeDir","rootTile","boundingVolume","box","i3sObbTo3dTilesObb","geometricError","convertScreenThresholdToGeometricError","children","_addChildren","tileset","transform","tilesetTemplate","writeFile","JSON","stringify","_finishConversion","slpk","workerFarm","WorkerFarm","getWorkerFarm","destroy","parentSourceNode","parentNode","level","childNodeInfo","_loadChildNode","sourceChild","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","transform3DTilesAttributesOnWorker","source","tile3dWorkerSource","b3dm","uri","id","Uint8Array","unloadContent","promises","convertChildNode","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","I3SAttributeLoader","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","calculateFilesSize","filesSize","diff","conversionTime","timeConverter","tile3dAttributesWorkerUrl","getWorkerURL","Tile3dAttributesWorker","getLoaderOptions","fetchFile","sourceResponse","text"],"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker,\n transform3DTilesAttributesOnWorker\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n _nodeWorkers: true,\n reuseWorkers: true,\n 'i3s-content-nodejs': {\n workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'\n },\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * Convert particular I3S Node\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n * @param childNodeInfo child node to convert\n */\n private async convertChildNode(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number,\n childNodeInfo: NodeReference\n ): Promise<void> {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n source: this.workerSource.tile3dWorkerSource,\n featureAttributes\n });\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n const promises: Promise<void>[] = [];\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));\n }\n await Promise.all(promises);\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"3d-tiles-converter.js","names":["_path","require","_process","_interopRequireDefault","_jsonMapTransform","_core","_i3s","_tiles","_pgmLoader","_i3sObbTo3dTilesObb","_lodConversionUtils","_fileUtils","_statisticUtills","_tileset","_coordinateConverter","_dTilesAttributesWorker","_workerUtils","_constants","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","I3S","Tiles3DConverter","_classCallCheck2","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","_createClass2","_convert","_asyncToGenerator2","_regenerator","mark","_callee","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","sourceTilesetJson","rootNode","rootTile","tileset","workerFarm","wrap","_callee$","_context","prev","isBrowser","console","log","BROWSER_ERROR_MESSAGE","abrupt","process","hrtime","load","PGMLoader","sent","loadWorkers","I3SLoader","Tileset3D","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","root","header","obb","createObbFromMbs","mbs","join","concat","removeDir","t0","boundingVolume","box","i3sObbTo3dTilesObb","geometricError","convertScreenThresholdToGeometricError","children","_addChildren","transform","tilesetTemplate","writeFile","JSON","stringify","_finishConversion","slpk","WorkerFarm","getWorkerFarm","destroy","stop","convert","_x","_convertChildNode","_callee2","parentSourceNode","parentNode","level","childNodeInfo","sourceChild","_sourceChild$header","featureAttributes","child","i3sAttributesData","b3dm","_callee2$","_context2","_loadChildNode","contentUrl","_loadTile","content","vertexCount","_loadChildAttributes","tileContent","textureFormat","transform3DTilesAttributesOnWorker","tile3dWorkerSource","uri","id","Uint8Array","unloadContent","convertChildNode","_x2","_x3","_x4","_x5","_addChildren2","_callee3","promises","_iterator","_step","_callee3$","_context3","Promise","all","_x6","_x7","_x8","_loadChildNode2","_callee4","_ref","loader","nodeUrl","_callee4$","_context4","nodePages","nodePagesTile","formTileFromNodePages","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","_x9","_x10","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","_iterator2","_step2","folder","_loadChildAttributes2","_callee5","attributeUrls","index","attribute","attributesList","_callee5$","_context5","attributeName","attributeType","_getAttributeType","I3SAttributeLoader","_replaceNestedArrays","assign","_toConsumableArray2","_x11","_x12","attributeValues","valueType","objectIds","attributeObject","_finishConversion2","_callee6","params","filesSize","diff","conversionTime","_callee6$","_context6","calculateFilesSize","timeConverter","_x13","_loadWorkers","_callee7","tile3dAttributesWorkerUrl","sourceResponse","_callee7$","_context7","getWorkerURL","Tile3dAttributesWorker","getLoaderOptions","fetchFile","text","exports"],"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker,\n transform3DTilesAttributesOnWorker\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n _nodeWorkers: true,\n reuseWorkers: true,\n 'i3s-content-nodejs': {\n workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'\n },\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * Convert particular I3S Node\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n * @param childNodeInfo child node to convert\n */\n private async convertChildNode(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number,\n childNodeInfo: NodeReference\n ): Promise<void> {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n source: this.workerSource.tile3dWorkerSource,\n featureAttributes\n });\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n const promises: Promise<void>[] = [];\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));\n }\n await Promise.all(promises);\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"mappings":"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"}
|
|
@@ -20,7 +20,6 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
20
20
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
21
21
|
var Z_UP_TO_Y_UP_MATRIX = new _core2.Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
|
|
22
22
|
var scratchVector = new _core2.Vector3();
|
|
23
|
-
|
|
24
23
|
var B3dmConverter = function () {
|
|
25
24
|
function B3dmConverter() {
|
|
26
25
|
(0, _classCallCheck2.default)(this, B3dmConverter);
|
|
@@ -36,25 +35,23 @@ var B3dmConverter = function () {
|
|
|
36
35
|
b3dm,
|
|
37
36
|
_args = arguments;
|
|
38
37
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
39
|
-
while (1) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return _context.stop();
|
|
57
|
-
}
|
|
38
|
+
while (1) switch (_context.prev = _context.next) {
|
|
39
|
+
case 0:
|
|
40
|
+
featureAttributes = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
|
|
41
|
+
_context.next = 3;
|
|
42
|
+
return this.buildGltf(i3sAttributesData, featureAttributes);
|
|
43
|
+
case 3:
|
|
44
|
+
gltf = _context.sent;
|
|
45
|
+
b3dm = (0, _core.encodeSync)({
|
|
46
|
+
gltfEncoded: new Uint8Array(gltf),
|
|
47
|
+
type: 'b3dm',
|
|
48
|
+
featuresLength: this._getFeaturesLength(featureAttributes),
|
|
49
|
+
batchTable: featureAttributes
|
|
50
|
+
}, _dTiles.Tile3DWriter);
|
|
51
|
+
return _context.abrupt("return", b3dm);
|
|
52
|
+
case 6:
|
|
53
|
+
case "end":
|
|
54
|
+
return _context.stop();
|
|
58
55
|
}
|
|
59
56
|
}, _callee, this);
|
|
60
57
|
}));
|
|
@@ -69,51 +66,49 @@ var B3dmConverter = function () {
|
|
|
69
66
|
var _buildGltf = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(i3sAttributesData, featureAttributes) {
|
|
70
67
|
var tileContent, textureFormat, material, attributes, originalIndices, cartesianOrigin, cartographicOrigin, modelMatrix, gltfBuilder, textureIndex, pbrMaterialInfo, materialIndex, positions, positionsValue, indices, meshIndex, transformMatrix, nodeIndex, sceneIndex, gltfBuffer;
|
|
71
68
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
72
|
-
while (1) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return _context2.stop();
|
|
116
|
-
}
|
|
69
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
70
|
+
case 0:
|
|
71
|
+
tileContent = i3sAttributesData.tileContent, textureFormat = i3sAttributesData.textureFormat;
|
|
72
|
+
material = tileContent.material, attributes = tileContent.attributes, originalIndices = tileContent.indices, cartesianOrigin = tileContent.cartesianOrigin, cartographicOrigin = tileContent.cartographicOrigin, modelMatrix = tileContent.modelMatrix;
|
|
73
|
+
gltfBuilder = new _gltf.GLTFScenegraph();
|
|
74
|
+
_context2.next = 5;
|
|
75
|
+
return this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
|
|
76
|
+
case 5:
|
|
77
|
+
textureIndex = _context2.sent;
|
|
78
|
+
pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
|
|
79
|
+
materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
|
|
80
|
+
positions = attributes.positions;
|
|
81
|
+
positionsValue = positions.value;
|
|
82
|
+
if (attributes.uvRegions && attributes.texCoords) {
|
|
83
|
+
attributes.texCoords.value = (0, _textureAtlas.convertTextureAtlas)(attributes.texCoords.value, attributes.uvRegions.value);
|
|
84
|
+
}
|
|
85
|
+
attributes.positions.value = this._normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix);
|
|
86
|
+
this._createBatchIds(tileContent, featureAttributes);
|
|
87
|
+
if (attributes.normals && !this._checkNormals(attributes.normals.value)) {
|
|
88
|
+
delete attributes.normals;
|
|
89
|
+
}
|
|
90
|
+
indices = originalIndices || this._generateSynteticIndices(positionsValue.length / positions.size);
|
|
91
|
+
meshIndex = gltfBuilder.addMesh({
|
|
92
|
+
attributes: attributes,
|
|
93
|
+
indices: indices,
|
|
94
|
+
material: materialIndex,
|
|
95
|
+
mode: 4
|
|
96
|
+
});
|
|
97
|
+
transformMatrix = this._generateTransformMatrix(cartesianOrigin);
|
|
98
|
+
nodeIndex = gltfBuilder.addNode({
|
|
99
|
+
meshIndex: meshIndex,
|
|
100
|
+
matrix: transformMatrix
|
|
101
|
+
});
|
|
102
|
+
sceneIndex = gltfBuilder.addScene({
|
|
103
|
+
nodeIndices: [nodeIndex]
|
|
104
|
+
});
|
|
105
|
+
gltfBuilder.setDefaultScene(sceneIndex);
|
|
106
|
+
gltfBuilder.createBinaryChunk();
|
|
107
|
+
gltfBuffer = (0, _core.encodeSync)(gltfBuilder.gltf, _gltf.GLTFWriter);
|
|
108
|
+
return _context2.abrupt("return", gltfBuffer);
|
|
109
|
+
case 23:
|
|
110
|
+
case "end":
|
|
111
|
+
return _context2.stop();
|
|
117
112
|
}
|
|
118
113
|
}, _callee2, this);
|
|
119
114
|
}));
|
|
@@ -128,28 +123,26 @@ var B3dmConverter = function () {
|
|
|
128
123
|
var _addI3sTextureToGltf2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(tileContent, textureFormat, gltfBuilder) {
|
|
129
124
|
var texture, material, attributes, textureIndex, selectedTexture, mimeType, imageIndex;
|
|
130
125
|
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
131
|
-
while (1) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return _context3.stop();
|
|
152
|
-
}
|
|
126
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
127
|
+
case 0:
|
|
128
|
+
texture = tileContent.texture, material = tileContent.material, attributes = tileContent.attributes;
|
|
129
|
+
textureIndex = null;
|
|
130
|
+
selectedTexture = texture;
|
|
131
|
+
if (!texture && material) {
|
|
132
|
+
selectedTexture = material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture && material.pbrMetallicRoughness.baseColorTexture.texture.source.image;
|
|
133
|
+
}
|
|
134
|
+
if (selectedTexture) {
|
|
135
|
+
mimeType = this._deduceMimeTypeFromFormat(textureFormat);
|
|
136
|
+
imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);
|
|
137
|
+
textureIndex = gltfBuilder.addTexture({
|
|
138
|
+
imageIndex: imageIndex
|
|
139
|
+
});
|
|
140
|
+
delete attributes.colors;
|
|
141
|
+
}
|
|
142
|
+
return _context3.abrupt("return", textureIndex);
|
|
143
|
+
case 6:
|
|
144
|
+
case "end":
|
|
145
|
+
return _context3.stop();
|
|
153
146
|
}
|
|
154
147
|
}, _callee3, this);
|
|
155
148
|
}));
|
|
@@ -160,8 +153,7 @@ var B3dmConverter = function () {
|
|
|
160
153
|
}()
|
|
161
154
|
}, {
|
|
162
155
|
key: "_normalizePositions",
|
|
163
|
-
value:
|
|
164
|
-
function _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {
|
|
156
|
+
value: function _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {
|
|
165
157
|
var newPositionsValue = new Float32Array(positionsValue.length);
|
|
166
158
|
for (var index = 0; index < positionsValue.length; index += 3) {
|
|
167
159
|
var vertex = positionsValue.subarray(index, index + 3);
|
|
@@ -173,20 +165,16 @@ var B3dmConverter = function () {
|
|
|
173
165
|
}
|
|
174
166
|
return newPositionsValue;
|
|
175
167
|
}
|
|
176
|
-
|
|
177
168
|
}, {
|
|
178
169
|
key: "_generateTransformMatrix",
|
|
179
|
-
value:
|
|
180
|
-
function _generateTransformMatrix(cartesianOrigin) {
|
|
170
|
+
value: function _generateTransformMatrix(cartesianOrigin) {
|
|
181
171
|
var translateOriginMatrix = new _core2.Matrix4().translate(cartesianOrigin);
|
|
182
172
|
var result = translateOriginMatrix.multiplyLeft(Z_UP_TO_Y_UP_MATRIX);
|
|
183
173
|
return result;
|
|
184
174
|
}
|
|
185
|
-
|
|
186
175
|
}, {
|
|
187
176
|
key: "_createBatchIds",
|
|
188
|
-
value:
|
|
189
|
-
function _createBatchIds(i3sContent, featureAttributes) {
|
|
177
|
+
value: function _createBatchIds(i3sContent, featureAttributes) {
|
|
190
178
|
var featureIds = i3sContent.featureIds;
|
|
191
179
|
var _ref = featureAttributes || {},
|
|
192
180
|
objectIds = _ref.OBJECTID;
|
|
@@ -204,22 +192,18 @@ var B3dmConverter = function () {
|
|
|
204
192
|
value: featureIds
|
|
205
193
|
};
|
|
206
194
|
}
|
|
207
|
-
|
|
208
195
|
}, {
|
|
209
196
|
key: "_generateSynteticIndices",
|
|
210
|
-
value:
|
|
211
|
-
function _generateSynteticIndices(vertexCount) {
|
|
197
|
+
value: function _generateSynteticIndices(vertexCount) {
|
|
212
198
|
var result = new Uint32Array(vertexCount);
|
|
213
199
|
for (var index = 0; index < vertexCount; index++) {
|
|
214
200
|
result.set([index], index);
|
|
215
201
|
}
|
|
216
202
|
return result;
|
|
217
203
|
}
|
|
218
|
-
|
|
219
204
|
}, {
|
|
220
205
|
key: "_deduceMimeTypeFromFormat",
|
|
221
|
-
value:
|
|
222
|
-
function _deduceMimeTypeFromFormat(format) {
|
|
206
|
+
value: function _deduceMimeTypeFromFormat(format) {
|
|
223
207
|
switch (format) {
|
|
224
208
|
case 'jpg':
|
|
225
209
|
return 'image/jpeg';
|
|
@@ -232,11 +216,9 @@ var B3dmConverter = function () {
|
|
|
232
216
|
return 'image/jpeg';
|
|
233
217
|
}
|
|
234
218
|
}
|
|
235
|
-
|
|
236
219
|
}, {
|
|
237
220
|
key: "_convertI3sMaterialToGltfMaterial",
|
|
238
|
-
value:
|
|
239
|
-
function _convertI3sMaterialToGltfMaterial(material, textureIndex) {
|
|
221
|
+
value: function _convertI3sMaterialToGltfMaterial(material, textureIndex) {
|
|
240
222
|
var isTextureIndexExists = textureIndex !== null;
|
|
241
223
|
if (!material) {
|
|
242
224
|
material = {
|
|
@@ -262,11 +244,9 @@ var B3dmConverter = function () {
|
|
|
262
244
|
}
|
|
263
245
|
return material;
|
|
264
246
|
}
|
|
265
|
-
|
|
266
247
|
}, {
|
|
267
248
|
key: "_setGltfTexture",
|
|
268
|
-
value:
|
|
269
|
-
function _setGltfTexture(materialDefinition, textureIndex) {
|
|
249
|
+
value: function _setGltfTexture(materialDefinition, textureIndex) {
|
|
270
250
|
var material = _objectSpread(_objectSpread({}, materialDefinition), {}, {
|
|
271
251
|
pbrMetallicRoughness: _objectSpread({}, materialDefinition.pbrMetallicRoughness)
|
|
272
252
|
});
|
|
@@ -298,22 +278,18 @@ var B3dmConverter = function () {
|
|
|
298
278
|
}
|
|
299
279
|
return material;
|
|
300
280
|
}
|
|
301
|
-
|
|
302
281
|
}, {
|
|
303
282
|
key: "_getFeaturesLength",
|
|
304
|
-
value:
|
|
305
|
-
function _getFeaturesLength(attributes) {
|
|
283
|
+
value: function _getFeaturesLength(attributes) {
|
|
306
284
|
if (!attributes) {
|
|
307
285
|
return 0;
|
|
308
286
|
}
|
|
309
287
|
var firstKey = Object.keys(attributes)[0];
|
|
310
288
|
return firstKey ? attributes[firstKey].length : 0;
|
|
311
289
|
}
|
|
312
|
-
|
|
313
290
|
}, {
|
|
314
291
|
key: "_checkNormals",
|
|
315
|
-
value:
|
|
316
|
-
function _checkNormals(normals) {
|
|
292
|
+
value: function _checkNormals(normals) {
|
|
317
293
|
return normals.find(function (value) {
|
|
318
294
|
return value;
|
|
319
295
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"b3dm-converter.js","names":["Z_UP_TO_Y_UP_MATRIX","Matrix4","scratchVector","Vector3","B3dmConverter","i3sAttributesData","featureAttributes","buildGltf","gltf","b3dm","encodeSync","gltfEncoded","Uint8Array","type","featuresLength","_getFeaturesLength","batchTable","Tile3DWriter","tileContent","textureFormat","material","attributes","originalIndices","indices","cartesianOrigin","cartographicOrigin","modelMatrix","gltfBuilder","GLTFScenegraph","_addI3sTextureToGltf","textureIndex","pbrMaterialInfo","_convertI3sMaterialToGltfMaterial","materialIndex","addMaterial","positions","positionsValue","value","uvRegions","texCoords","convertTextureAtlas","_normalizePositions","_createBatchIds","normals","_checkNormals","_generateSynteticIndices","length","size","meshIndex","addMesh","mode","transformMatrix","_generateTransformMatrix","nodeIndex","addNode","matrix","sceneIndex","addScene","nodeIndices","setDefaultScene","createBinaryChunk","gltfBuffer","GLTFWriter","texture","selectedTexture","pbrMetallicRoughness","baseColorTexture","source","image","mimeType","_deduceMimeTypeFromFormat","imageIndex","addImage","addTexture","colors","newPositionsValue","Float32Array","index","vertex","subarray","cartesianOriginVector","vertexVector","Array","from","transform","add","Ellipsoid","WGS84","cartographicToCartesian","subtract","set","translateOriginMatrix","translate","result","multiplyLeft","i3sContent","featureIds","objectIds","OBJECTID","i","featureId","batchId","indexOf","_BATCHID","byteOffset","vertexCount","Uint32Array","format","console","warn","isTextureIndexExists","alphaMode","doubleSided","metallicFactor","roughnessFactor","texCoord","baseColorFactor","_setGltfTexture","materialDefinition","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","firstKey","Object","keys","find"],"sources":["../../../../src/3d-tiles-converter/helpers/b3dm-converter.ts"],"sourcesContent":["import type {I3SAttributesData} from '../../3d-tiles-attributes-worker';\n\nimport {encodeSync} from '@loaders.gl/core';\nimport {GLTFScenegraph, GLTFWriter} from '@loaders.gl/gltf';\nimport {Tile3DWriter} from '@loaders.gl/3d-tiles';\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {convertTextureAtlas} from './texture-atlas';\n\nconst Z_UP_TO_Y_UP_MATRIX = new Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);\nconst scratchVector = new Vector3();\n\n/**\n * Converts content of an I3S node to *.b3dm's file content\n */\nexport default class B3dmConverter {\n // @ts-expect-error\n rtcCenter: Float32Array;\n i3sTile: any;\n\n /**\n * The starter of content conversion\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded content\n */\n async convert(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any = null\n ): Promise<ArrayBuffer> {\n const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);\n const b3dm = encodeSync(\n {\n gltfEncoded: new Uint8Array(gltf),\n type: 'b3dm',\n featuresLength: this._getFeaturesLength(featureAttributes),\n batchTable: featureAttributes\n },\n Tile3DWriter\n );\n return b3dm;\n }\n\n /**\n * Build and encode gltf\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded glb content\n */\n async buildGltf(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any\n ): Promise<ArrayBuffer> {\n const {tileContent, textureFormat} = i3sAttributesData;\n const {\n material,\n attributes,\n indices: originalIndices,\n cartesianOrigin,\n cartographicOrigin,\n modelMatrix\n } = tileContent;\n const gltfBuilder = new GLTFScenegraph();\n\n const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);\n const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);\n const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);\n\n const positions = attributes.positions;\n const positionsValue = positions.value;\n\n if (attributes.uvRegions && attributes.texCoords) {\n attributes.texCoords.value = convertTextureAtlas(\n attributes.texCoords.value,\n attributes.uvRegions.value\n );\n }\n\n attributes.positions.value = this._normalizePositions(\n positionsValue,\n cartesianOrigin,\n cartographicOrigin,\n modelMatrix\n );\n this._createBatchIds(tileContent, featureAttributes);\n if (attributes.normals && !this._checkNormals(attributes.normals.value)) {\n delete attributes.normals;\n }\n const indices =\n originalIndices || this._generateSynteticIndices(positionsValue.length / positions.size);\n const meshIndex = gltfBuilder.addMesh({\n attributes,\n indices,\n material: materialIndex,\n mode: 4\n });\n const transformMatrix = this._generateTransformMatrix(cartesianOrigin);\n const nodeIndex = gltfBuilder.addNode({meshIndex, matrix: transformMatrix});\n const sceneIndex = gltfBuilder.addScene({nodeIndices: [nodeIndex]});\n gltfBuilder.setDefaultScene(sceneIndex);\n\n gltfBuilder.createBinaryChunk();\n\n const gltfBuffer = encodeSync(gltfBuilder.gltf, GLTFWriter);\n\n return gltfBuffer;\n }\n\n /**\n * Update gltfBuilder with texture from I3S tile\n * @param {object} i3sTile - Tile3D object\n * @param {GLTFScenegraph} gltfBuilder - gltfScenegraph instance to construct GLTF\n * @returns {Promise<number | null>} - GLTF texture index\n */\n async _addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder) {\n const {texture, material, attributes} = tileContent;\n let textureIndex = null;\n let selectedTexture = texture;\n if (!texture && material) {\n selectedTexture =\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.baseColorTexture &&\n material.pbrMetallicRoughness.baseColorTexture.texture.source.image;\n }\n if (selectedTexture) {\n const mimeType = this._deduceMimeTypeFromFormat(textureFormat);\n const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);\n textureIndex = gltfBuilder.addTexture({imageIndex});\n delete attributes.colors;\n }\n return textureIndex;\n }\n\n /**\n * Generate a positions array which is correct for 3DTiles/GLTF format\n * @param {Float64Array} positionsValue - the input geometry positions array\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @param {number[]} cartographicOrigin - the tile center in the cartographic coordinate system\n * @param {number[]} modelMatrix - the model matrix of geometry\n * @returns {Float32Array} - the output geometry positions array\n */\n _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {\n const newPositionsValue = new Float32Array(positionsValue.length);\n for (let index = 0; index < positionsValue.length; index += 3) {\n const vertex = positionsValue.subarray(index, index + 3);\n const cartesianOriginVector = new Vector3(cartesianOrigin);\n let vertexVector = new Vector3(Array.from(vertex))\n .transform(modelMatrix)\n .add(cartographicOrigin);\n Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector);\n vertexVector = scratchVector.subtract(cartesianOriginVector);\n newPositionsValue.set(vertexVector, index);\n }\n return newPositionsValue;\n }\n\n /**\n * Generate the transformation matrix for GLTF node:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-node\n * 1. Create the translate transformation from cartesianOrigin (the positions array stores offsets from this cartesianOrigin)\n * 2. Create the rotation transformation to rotate model from z-up coordinates (I3S specific) to y-up coordinates (GLTF specific)\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @returns {Matrix4} - an array of 16 numbers (4x4 matrix)\n */\n _generateTransformMatrix(cartesianOrigin) {\n const translateOriginMatrix = new Matrix4().translate(cartesianOrigin);\n const result = translateOriginMatrix.multiplyLeft(Z_UP_TO_Y_UP_MATRIX);\n return result;\n }\n\n /**\n * Create _BATCHID attribute\n * @param {Object} i3sContent - the source object\n * @returns {void}\n */\n _createBatchIds(i3sContent, featureAttributes) {\n const {featureIds} = i3sContent;\n const {OBJECTID: objectIds} = featureAttributes || {};\n if (!featureIds || !objectIds) {\n return;\n }\n\n for (let i = 0; i < featureIds.length; i++) {\n const featureId = featureIds[i];\n const batchId = objectIds.indexOf(featureId);\n featureIds[i] = batchId;\n }\n\n i3sContent.attributes._BATCHID = {\n size: 1,\n byteOffset: 0,\n value: featureIds\n };\n }\n\n /**\n * luma.gl can not work without indices now:\n * https://github.com/visgl/luma.gl/blob/d8cad75b9f8ca3e578cf078ed9d19e619c2ddbc9/modules/experimental/src/gltf/gltf-instantiator.js#L115\n * This method generates syntetic indices array: [0, 1, 2, 3, .... , vertexCount-1]\n * @param {number} vertexCount - vertex count in the geometry\n * @returns {Uint32Array} indices array.\n */\n _generateSynteticIndices(vertexCount) {\n const result = new Uint32Array(vertexCount);\n for (let index = 0; index < vertexCount; index++) {\n result.set([index], index);\n }\n return result;\n }\n\n /**\n * Deduce mime type by format from `textureSetDefinition.formats[0].format`\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n * @param {string} format - format name\n * @returns {string} mime type.\n */\n _deduceMimeTypeFromFormat(format) {\n switch (format) {\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'ktx2':\n return 'image/ktx2';\n default:\n console.warn(`Unexpected texture format in I3S: ${format}`); // eslint-disable-line no-console, no-undef\n return 'image/jpeg';\n }\n }\n\n /**\n * Convert i3s material to GLTF compatible material\n * @param {object} material - i3s material definition\n * @param {number | null} textureIndex - texture index in GLTF\n * @returns {object} GLTF material\n */\n _convertI3sMaterialToGltfMaterial(material, textureIndex) {\n const isTextureIndexExists = textureIndex !== null;\n\n if (!material) {\n material = {\n alphaMode: 'OPAQUE',\n doubleSided: false,\n pbrMetallicRoughness: {\n metallicFactor: 0,\n roughnessFactor: 1\n }\n };\n\n if (isTextureIndexExists) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else {\n material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];\n }\n\n return material;\n }\n\n if (textureIndex !== null) {\n material = this._setGltfTexture(material, textureIndex);\n }\n\n return material;\n }\n\n /**\n * Set texture properties in material with GLTF textureIndex\n * @param {object} materialDefinition - i3s material definition\n * @param {number} textureIndex - texture index in GLTF\n * @returns {void}\n */\n _setGltfTexture(materialDefinition, textureIndex) {\n const material = {\n ...materialDefinition,\n pbrMetallicRoughness: {...materialDefinition.pbrMetallicRoughness}\n };\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.baseColorTexture\n ) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.emissiveTexture) {\n material.emissiveTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.normalTexture) {\n material.normalTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.occlusionTexture) {\n material.occlusionTexture = {\n index: textureIndex,\n texCoord: 0\n };\n }\n return material;\n }\n\n /*\n * Returns Features length based on attribute array in attribute object.\n * @param {Object} attributes\n * @returns {Number} Features length .\n */\n _getFeaturesLength(attributes) {\n if (!attributes) {\n return 0;\n }\n const firstKey = Object.keys(attributes)[0];\n return firstKey ? attributes[firstKey].length : 0;\n }\n\n /* Checks that normals buffer is correct\n * @param {TypedArray} normals\n * @returns {boolean} true - normals are correct; false - normals are incorrect\n */\n _checkNormals(normals) {\n // If all normals === 0, the resulting tileset is all in black colors on Cesium\n return normals.find((value) => value);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"b3dm-converter.js","names":["_core","require","_gltf","_dTiles","_core2","_geospatial","_textureAtlas","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","Z_UP_TO_Y_UP_MATRIX","Matrix4","scratchVector","Vector3","B3dmConverter","_classCallCheck2","_createClass2","value","_convert","_asyncToGenerator2","_regenerator","mark","_callee","i3sAttributesData","featureAttributes","gltf","b3dm","_args","wrap","_callee$","_context","prev","next","undefined","buildGltf","sent","encodeSync","gltfEncoded","Uint8Array","type","featuresLength","_getFeaturesLength","batchTable","Tile3DWriter","abrupt","stop","convert","_x","_buildGltf","_callee2","tileContent","textureFormat","material","attributes","originalIndices","cartesianOrigin","cartographicOrigin","modelMatrix","gltfBuilder","textureIndex","pbrMaterialInfo","materialIndex","positions","positionsValue","indices","meshIndex","transformMatrix","nodeIndex","sceneIndex","gltfBuffer","_callee2$","_context2","GLTFScenegraph","_addI3sTextureToGltf","_convertI3sMaterialToGltfMaterial","addMaterial","uvRegions","texCoords","convertTextureAtlas","_normalizePositions","_createBatchIds","normals","_checkNormals","_generateSynteticIndices","size","addMesh","mode","_generateTransformMatrix","addNode","matrix","addScene","nodeIndices","setDefaultScene","createBinaryChunk","GLTFWriter","_x2","_x3","_addI3sTextureToGltf2","_callee3","texture","selectedTexture","mimeType","imageIndex","_callee3$","_context3","pbrMetallicRoughness","baseColorTexture","image","_deduceMimeTypeFromFormat","addImage","addTexture","colors","_x4","_x5","_x6","newPositionsValue","Float32Array","index","vertex","subarray","cartesianOriginVector","vertexVector","Array","from","transform","add","Ellipsoid","WGS84","cartographicToCartesian","subtract","set","translateOriginMatrix","translate","result","multiplyLeft","i3sContent","featureIds","_ref","objectIds","OBJECTID","featureId","batchId","indexOf","_BATCHID","byteOffset","vertexCount","Uint32Array","format","console","warn","concat","isTextureIndexExists","alphaMode","doubleSided","metallicFactor","roughnessFactor","texCoord","baseColorFactor","_setGltfTexture","materialDefinition","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","firstKey","find","exports"],"sources":["../../../../src/3d-tiles-converter/helpers/b3dm-converter.ts"],"sourcesContent":["import type {I3SAttributesData} from '../../3d-tiles-attributes-worker';\n\nimport {encodeSync} from '@loaders.gl/core';\nimport {GLTFScenegraph, GLTFWriter} from '@loaders.gl/gltf';\nimport {Tile3DWriter} from '@loaders.gl/3d-tiles';\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {convertTextureAtlas} from './texture-atlas';\n\nconst Z_UP_TO_Y_UP_MATRIX = new Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);\nconst scratchVector = new Vector3();\n\n/**\n * Converts content of an I3S node to *.b3dm's file content\n */\nexport default class B3dmConverter {\n // @ts-expect-error\n rtcCenter: Float32Array;\n i3sTile: any;\n\n /**\n * The starter of content conversion\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded content\n */\n async convert(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any = null\n ): Promise<ArrayBuffer> {\n const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);\n const b3dm = encodeSync(\n {\n gltfEncoded: new Uint8Array(gltf),\n type: 'b3dm',\n featuresLength: this._getFeaturesLength(featureAttributes),\n batchTable: featureAttributes\n },\n Tile3DWriter\n );\n return b3dm;\n }\n\n /**\n * Build and encode gltf\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded glb content\n */\n async buildGltf(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any\n ): Promise<ArrayBuffer> {\n const {tileContent, textureFormat} = i3sAttributesData;\n const {\n material,\n attributes,\n indices: originalIndices,\n cartesianOrigin,\n cartographicOrigin,\n modelMatrix\n } = tileContent;\n const gltfBuilder = new GLTFScenegraph();\n\n const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);\n const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);\n const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);\n\n const positions = attributes.positions;\n const positionsValue = positions.value;\n\n if (attributes.uvRegions && attributes.texCoords) {\n attributes.texCoords.value = convertTextureAtlas(\n attributes.texCoords.value,\n attributes.uvRegions.value\n );\n }\n\n attributes.positions.value = this._normalizePositions(\n positionsValue,\n cartesianOrigin,\n cartographicOrigin,\n modelMatrix\n );\n this._createBatchIds(tileContent, featureAttributes);\n if (attributes.normals && !this._checkNormals(attributes.normals.value)) {\n delete attributes.normals;\n }\n const indices =\n originalIndices || this._generateSynteticIndices(positionsValue.length / positions.size);\n const meshIndex = gltfBuilder.addMesh({\n attributes,\n indices,\n material: materialIndex,\n mode: 4\n });\n const transformMatrix = this._generateTransformMatrix(cartesianOrigin);\n const nodeIndex = gltfBuilder.addNode({meshIndex, matrix: transformMatrix});\n const sceneIndex = gltfBuilder.addScene({nodeIndices: [nodeIndex]});\n gltfBuilder.setDefaultScene(sceneIndex);\n\n gltfBuilder.createBinaryChunk();\n\n const gltfBuffer = encodeSync(gltfBuilder.gltf, GLTFWriter);\n\n return gltfBuffer;\n }\n\n /**\n * Update gltfBuilder with texture from I3S tile\n * @param {object} i3sTile - Tile3D object\n * @param {GLTFScenegraph} gltfBuilder - gltfScenegraph instance to construct GLTF\n * @returns {Promise<number | null>} - GLTF texture index\n */\n async _addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder) {\n const {texture, material, attributes} = tileContent;\n let textureIndex = null;\n let selectedTexture = texture;\n if (!texture && material) {\n selectedTexture =\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.baseColorTexture &&\n material.pbrMetallicRoughness.baseColorTexture.texture.source.image;\n }\n if (selectedTexture) {\n const mimeType = this._deduceMimeTypeFromFormat(textureFormat);\n const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);\n textureIndex = gltfBuilder.addTexture({imageIndex});\n delete attributes.colors;\n }\n return textureIndex;\n }\n\n /**\n * Generate a positions array which is correct for 3DTiles/GLTF format\n * @param {Float64Array} positionsValue - the input geometry positions array\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @param {number[]} cartographicOrigin - the tile center in the cartographic coordinate system\n * @param {number[]} modelMatrix - the model matrix of geometry\n * @returns {Float32Array} - the output geometry positions array\n */\n _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {\n const newPositionsValue = new Float32Array(positionsValue.length);\n for (let index = 0; index < positionsValue.length; index += 3) {\n const vertex = positionsValue.subarray(index, index + 3);\n const cartesianOriginVector = new Vector3(cartesianOrigin);\n let vertexVector = new Vector3(Array.from(vertex))\n .transform(modelMatrix)\n .add(cartographicOrigin);\n Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector);\n vertexVector = scratchVector.subtract(cartesianOriginVector);\n newPositionsValue.set(vertexVector, index);\n }\n return newPositionsValue;\n }\n\n /**\n * Generate the transformation matrix for GLTF node:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-node\n * 1. Create the translate transformation from cartesianOrigin (the positions array stores offsets from this cartesianOrigin)\n * 2. Create the rotation transformation to rotate model from z-up coordinates (I3S specific) to y-up coordinates (GLTF specific)\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @returns {Matrix4} - an array of 16 numbers (4x4 matrix)\n */\n _generateTransformMatrix(cartesianOrigin) {\n const translateOriginMatrix = new Matrix4().translate(cartesianOrigin);\n const result = translateOriginMatrix.multiplyLeft(Z_UP_TO_Y_UP_MATRIX);\n return result;\n }\n\n /**\n * Create _BATCHID attribute\n * @param {Object} i3sContent - the source object\n * @returns {void}\n */\n _createBatchIds(i3sContent, featureAttributes) {\n const {featureIds} = i3sContent;\n const {OBJECTID: objectIds} = featureAttributes || {};\n if (!featureIds || !objectIds) {\n return;\n }\n\n for (let i = 0; i < featureIds.length; i++) {\n const featureId = featureIds[i];\n const batchId = objectIds.indexOf(featureId);\n featureIds[i] = batchId;\n }\n\n i3sContent.attributes._BATCHID = {\n size: 1,\n byteOffset: 0,\n value: featureIds\n };\n }\n\n /**\n * luma.gl can not work without indices now:\n * https://github.com/visgl/luma.gl/blob/d8cad75b9f8ca3e578cf078ed9d19e619c2ddbc9/modules/experimental/src/gltf/gltf-instantiator.js#L115\n * This method generates syntetic indices array: [0, 1, 2, 3, .... , vertexCount-1]\n * @param {number} vertexCount - vertex count in the geometry\n * @returns {Uint32Array} indices array.\n */\n _generateSynteticIndices(vertexCount) {\n const result = new Uint32Array(vertexCount);\n for (let index = 0; index < vertexCount; index++) {\n result.set([index], index);\n }\n return result;\n }\n\n /**\n * Deduce mime type by format from `textureSetDefinition.formats[0].format`\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n * @param {string} format - format name\n * @returns {string} mime type.\n */\n _deduceMimeTypeFromFormat(format) {\n switch (format) {\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'ktx2':\n return 'image/ktx2';\n default:\n console.warn(`Unexpected texture format in I3S: ${format}`); // eslint-disable-line no-console, no-undef\n return 'image/jpeg';\n }\n }\n\n /**\n * Convert i3s material to GLTF compatible material\n * @param {object} material - i3s material definition\n * @param {number | null} textureIndex - texture index in GLTF\n * @returns {object} GLTF material\n */\n _convertI3sMaterialToGltfMaterial(material, textureIndex) {\n const isTextureIndexExists = textureIndex !== null;\n\n if (!material) {\n material = {\n alphaMode: 'OPAQUE',\n doubleSided: false,\n pbrMetallicRoughness: {\n metallicFactor: 0,\n roughnessFactor: 1\n }\n };\n\n if (isTextureIndexExists) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else {\n material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];\n }\n\n return material;\n }\n\n if (textureIndex !== null) {\n material = this._setGltfTexture(material, textureIndex);\n }\n\n return material;\n }\n\n /**\n * Set texture properties in material with GLTF textureIndex\n * @param {object} materialDefinition - i3s material definition\n * @param {number} textureIndex - texture index in GLTF\n * @returns {void}\n */\n _setGltfTexture(materialDefinition, textureIndex) {\n const material = {\n ...materialDefinition,\n pbrMetallicRoughness: {...materialDefinition.pbrMetallicRoughness}\n };\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.baseColorTexture\n ) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.emissiveTexture) {\n material.emissiveTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.normalTexture) {\n material.normalTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.occlusionTexture) {\n material.occlusionTexture = {\n index: textureIndex,\n texCoord: 0\n };\n }\n return material;\n }\n\n /*\n * Returns Features length based on attribute array in attribute object.\n * @param {Object} attributes\n * @returns {Number} Features length .\n */\n _getFeaturesLength(attributes) {\n if (!attributes) {\n return 0;\n }\n const firstKey = Object.keys(attributes)[0];\n return firstKey ? attributes[firstKey].length : 0;\n }\n\n /* Checks that normals buffer is correct\n * @param {TypedArray} normals\n * @returns {boolean} true - normals are correct; false - normals are incorrect\n */\n _checkNormals(normals) {\n // If all normals === 0, the resulting tileset is all in black colors on Cesium\n return normals.find((value) => value);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAAoD,SAAAM,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAEpD,IAAMY,mBAAmB,GAAG,IAAIC,cAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1F,IAAMC,aAAa,GAAG,IAAIC,cAAO,EAAE;AAAC,IAKfC,aAAa;EAAA,SAAAA,cAAA;IAAA,IAAAC,gBAAA,CAAAT,OAAA,QAAAQ,aAAA;IAAA,IAAAT,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;EAAA;EAAA,IAAAU,aAAA,CAAAV,OAAA,EAAAQ,aAAA;IAAAV,GAAA;IAAAa,KAAA;MAAA,IAAAC,QAAA,OAAAC,kBAAA,CAAAb,OAAA,EAAAc,YAAA,CAAAd,OAAA,CAAAe,IAAA,CAUhC,SAAAC,QACEC,iBAAoC;QAAA,IAAAC,iBAAA;UAAAC,IAAA;UAAAC,IAAA;UAAAC,KAAA,GAAA3B,SAAA;QAAA,OAAAoB,YAAA,CAAAd,OAAA,CAAAsB,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cACpCR,iBAAsB,GAAAG,KAAA,CAAA1B,MAAA,QAAA0B,KAAA,QAAAM,SAAA,GAAAN,KAAA,MAAG,IAAI;cAAAG,QAAA,CAAAE,IAAA;cAAA,OAEV,IAAI,CAACE,SAAS,CAACX,iBAAiB,EAAEC,iBAAiB,CAAC;YAAA;cAAjEC,IAAI,GAAAK,QAAA,CAAAK,IAAA;cACJT,IAAI,GAAG,IAAAU,gBAAU,EACrB;gBACEC,WAAW,EAAE,IAAIC,UAAU,CAACb,IAAI,CAAC;gBACjCc,IAAI,EAAE,MAAM;gBACZC,cAAc,EAAE,IAAI,CAACC,kBAAkB,CAACjB,iBAAiB,CAAC;gBAC1DkB,UAAU,EAAElB;cACd,CAAC,EACDmB,oBAAY,CACb;cAAA,OAAAb,QAAA,CAAAc,MAAA,WACMlB,IAAI;YAAA;YAAA;cAAA,OAAAI,QAAA,CAAAe,IAAA;UAAA;QAAA,GAAAvB,OAAA;MAAA,CACZ;MAAA,SAAAwB,QAAAC,EAAA;QAAA,OAAA7B,QAAA,CAAAtB,KAAA,OAAAI,SAAA;MAAA;MAAA,OAAA8C,OAAA;IAAA;EAAA;IAAA1C,GAAA;IAAAa,KAAA;MAAA,IAAA+B,UAAA,OAAA7B,kBAAA,CAAAb,OAAA,EAAAc,YAAA,CAAAd,OAAA,CAAAe,IAAA,CAOD,SAAA4B,SACE1B,iBAAoC,EACpCC,iBAAsB;QAAA,IAAA0B,WAAA,EAAAC,aAAA,EAAAC,QAAA,EAAAC,UAAA,EAAAC,eAAA,EAAAC,eAAA,EAAAC,kBAAA,EAAAC,WAAA,EAAAC,WAAA,EAAAC,YAAA,EAAAC,eAAA,EAAAC,aAAA,EAAAC,SAAA,EAAAC,cAAA,EAAAC,OAAA,EAAAC,SAAA,EAAAC,eAAA,EAAAC,SAAA,EAAAC,UAAA,EAAAC,UAAA;QAAA,OAAAjD,YAAA,CAAAd,OAAA,CAAAsB,IAAA,UAAA0C,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAxC,IAAA,GAAAwC,SAAA,CAAAvC,IAAA;YAAA;cAEfkB,WAAW,GAAmB3B,iBAAiB,CAA/C2B,WAAW,EAAEC,aAAa,GAAI5B,iBAAiB,CAAlC4B,aAAa;cAE/BC,QAAQ,GAMNF,WAAW,CANbE,QAAQ,EACRC,UAAU,GAKRH,WAAW,CALbG,UAAU,EACDC,eAAe,GAItBJ,WAAW,CAJbc,OAAO,EACPT,eAAe,GAGbL,WAAW,CAHbK,eAAe,EACfC,kBAAkB,GAEhBN,WAAW,CAFbM,kBAAkB,EAClBC,WAAW,GACTP,WAAW,CADbO,WAAW;cAEPC,WAAW,GAAG,IAAIc,oBAAc,EAAE;cAAAD,SAAA,CAAAvC,IAAA;cAAA,OAEb,IAAI,CAACyC,oBAAoB,CAACvB,WAAW,EAAEC,aAAa,EAAEO,WAAW,CAAC;YAAA;cAAvFC,YAAY,GAAAY,SAAA,CAAApC,IAAA;cACZyB,eAAe,GAAG,IAAI,CAACc,iCAAiC,CAACtB,QAAQ,EAAEO,YAAY,CAAC;cAChFE,aAAa,GAAGH,WAAW,CAACiB,WAAW,CAACf,eAAe,CAAC;cAExDE,SAAS,GAAGT,UAAU,CAACS,SAAS;cAChCC,cAAc,GAAGD,SAAS,CAAC7C,KAAK;cAEtC,IAAIoC,UAAU,CAACuB,SAAS,IAAIvB,UAAU,CAACwB,SAAS,EAAE;gBAChDxB,UAAU,CAACwB,SAAS,CAAC5D,KAAK,GAAG,IAAA6D,iCAAmB,EAC9CzB,UAAU,CAACwB,SAAS,CAAC5D,KAAK,EAC1BoC,UAAU,CAACuB,SAAS,CAAC3D,KAAK,CAC3B;cACH;cAEAoC,UAAU,CAACS,SAAS,CAAC7C,KAAK,GAAG,IAAI,CAAC8D,mBAAmB,CACnDhB,cAAc,EACdR,eAAe,EACfC,kBAAkB,EAClBC,WAAW,CACZ;cACD,IAAI,CAACuB,eAAe,CAAC9B,WAAW,EAAE1B,iBAAiB,CAAC;cACpD,IAAI6B,UAAU,CAAC4B,OAAO,IAAI,CAAC,IAAI,CAACC,aAAa,CAAC7B,UAAU,CAAC4B,OAAO,CAAChE,KAAK,CAAC,EAAE;gBACvE,OAAOoC,UAAU,CAAC4B,OAAO;cAC3B;cACMjB,OAAO,GACXV,eAAe,IAAI,IAAI,CAAC6B,wBAAwB,CAACpB,cAAc,CAAC9D,MAAM,GAAG6D,SAAS,CAACsB,IAAI,CAAC;cACpFnB,SAAS,GAAGP,WAAW,CAAC2B,OAAO,CAAC;gBACpChC,UAAU,EAAVA,UAAU;gBACVW,OAAO,EAAPA,OAAO;gBACPZ,QAAQ,EAAES,aAAa;gBACvByB,IAAI,EAAE;cACR,CAAC,CAAC;cACIpB,eAAe,GAAG,IAAI,CAACqB,wBAAwB,CAAChC,eAAe,CAAC;cAChEY,SAAS,GAAGT,WAAW,CAAC8B,OAAO,CAAC;gBAACvB,SAAS,EAATA,SAAS;gBAAEwB,MAAM,EAAEvB;cAAe,CAAC,CAAC;cACrEE,UAAU,GAAGV,WAAW,CAACgC,QAAQ,CAAC;gBAACC,WAAW,EAAE,CAACxB,SAAS;cAAC,CAAC,CAAC;cACnET,WAAW,CAACkC,eAAe,CAACxB,UAAU,CAAC;cAEvCV,WAAW,CAACmC,iBAAiB,EAAE;cAEzBxB,UAAU,GAAG,IAAAjC,gBAAU,EAACsB,WAAW,CAACjC,IAAI,EAAEqE,gBAAU,CAAC;cAAA,OAAAvB,SAAA,CAAA3B,MAAA,WAEpDyB,UAAU;YAAA;YAAA;cAAA,OAAAE,SAAA,CAAA1B,IAAA;UAAA;QAAA,GAAAI,QAAA;MAAA,CAClB;MAAA,SAAAf,UAAA6D,GAAA,EAAAC,GAAA;QAAA,OAAAhD,UAAA,CAAApD,KAAA,OAAAI,SAAA;MAAA;MAAA,OAAAkC,SAAA;IAAA;EAAA;IAAA9B,GAAA;IAAAa,KAAA;MAAA,IAAAgF,qBAAA,OAAA9E,kBAAA,CAAAb,OAAA,EAAAc,YAAA,CAAAd,OAAA,CAAAe,IAAA,CAQD,SAAA6E,SAA2BhD,WAAW,EAAEC,aAAa,EAAEO,WAAW;QAAA,IAAAyC,OAAA,EAAA/C,QAAA,EAAAC,UAAA,EAAAM,YAAA,EAAAyC,eAAA,EAAAC,QAAA,EAAAC,UAAA;QAAA,OAAAlF,YAAA,CAAAd,OAAA,CAAAsB,IAAA,UAAA2E,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAzE,IAAA,GAAAyE,SAAA,CAAAxE,IAAA;YAAA;cACzDmE,OAAO,GAA0BjD,WAAW,CAA5CiD,OAAO,EAAE/C,QAAQ,GAAgBF,WAAW,CAAnCE,QAAQ,EAAEC,UAAU,GAAIH,WAAW,CAAzBG,UAAU;cAChCM,YAAY,GAAG,IAAI;cACnByC,eAAe,GAAGD,OAAO;cAC7B,IAAI,CAACA,OAAO,IAAI/C,QAAQ,EAAE;gBACxBgD,eAAe,GACbhD,QAAQ,CAACqD,oBAAoB,IAC7BrD,QAAQ,CAACqD,oBAAoB,CAACC,gBAAgB,IAC9CtD,QAAQ,CAACqD,oBAAoB,CAACC,gBAAgB,CAACP,OAAO,CAACjG,MAAM,CAACyG,KAAK;cACvE;cACA,IAAIP,eAAe,EAAE;gBACbC,QAAQ,GAAG,IAAI,CAACO,yBAAyB,CAACzD,aAAa,CAAC;gBACxDmD,UAAU,GAAG5C,WAAW,CAACmD,QAAQ,CAACT,eAAe,EAAEC,QAAQ,CAAC;gBAClE1C,YAAY,GAAGD,WAAW,CAACoD,UAAU,CAAC;kBAACR,UAAU,EAAVA;gBAAU,CAAC,CAAC;gBACnD,OAAOjD,UAAU,CAAC0D,MAAM;cAC1B;cAAC,OAAAP,SAAA,CAAA5D,MAAA,WACMe,YAAY;YAAA;YAAA;cAAA,OAAA6C,SAAA,CAAA3D,IAAA;UAAA;QAAA,GAAAqD,QAAA;MAAA,CACpB;MAAA,SAAAzB,qBAAAuC,GAAA,EAAAC,GAAA,EAAAC,GAAA;QAAA,OAAAjB,qBAAA,CAAArG,KAAA,OAAAI,SAAA;MAAA;MAAA,OAAAyE,oBAAA;IAAA;EAAA;IAAArE,GAAA;IAAAa,KAAA,EAUD,SAAA8D,oBAAoBhB,cAAc,EAAER,eAAe,EAAEC,kBAAkB,EAAEC,WAAW,EAAE;MACpF,IAAM0D,iBAAiB,GAAG,IAAIC,YAAY,CAACrD,cAAc,CAAC9D,MAAM,CAAC;MACjE,KAAK,IAAIoH,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGtD,cAAc,CAAC9D,MAAM,EAAEoH,KAAK,IAAI,CAAC,EAAE;QAC7D,IAAMC,MAAM,GAAGvD,cAAc,CAACwD,QAAQ,CAACF,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC;QACxD,IAAMG,qBAAqB,GAAG,IAAI3G,cAAO,CAAC0C,eAAe,CAAC;QAC1D,IAAIkE,YAAY,GAAG,IAAI5G,cAAO,CAAC6G,KAAK,CAACC,IAAI,CAACL,MAAM,CAAC,CAAC,CAC/CM,SAAS,CAACnE,WAAW,CAAC,CACtBoE,GAAG,CAACrE,kBAAkB,CAAC;QAC1BsE,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CAACP,YAAY,EAAE7G,aAAa,CAAC;QACpE6G,YAAY,GAAG7G,aAAa,CAACqH,QAAQ,CAACT,qBAAqB,CAAC;QAC5DL,iBAAiB,CAACe,GAAG,CAACT,YAAY,EAAEJ,KAAK,CAAC;MAC5C;MACA,OAAOF,iBAAiB;IAC1B;EAAC;IAAA/G,GAAA;IAAAa,KAAA,EAUD,SAAAsE,yBAAyBhC,eAAe,EAAE;MACxC,IAAM4E,qBAAqB,GAAG,IAAIxH,cAAO,EAAE,CAACyH,SAAS,CAAC7E,eAAe,CAAC;MACtE,IAAM8E,MAAM,GAAGF,qBAAqB,CAACG,YAAY,CAAC5H,mBAAmB,CAAC;MACtE,OAAO2H,MAAM;IACf;EAAC;IAAAjI,GAAA;IAAAa,KAAA,EAOD,SAAA+D,gBAAgBuD,UAAU,EAAE/G,iBAAiB,EAAE;MAC7C,IAAOgH,UAAU,GAAID,UAAU,CAAxBC,UAAU;MACjB,IAAAC,IAAA,GAA8BjH,iBAAiB,IAAI,CAAC,CAAC;QAApCkH,SAAS,GAAAD,IAAA,CAAnBE,QAAQ;MACf,IAAI,CAACH,UAAU,IAAI,CAACE,SAAS,EAAE;QAC7B;MACF;MAEA,KAAK,IAAI3I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyI,UAAU,CAACvI,MAAM,EAAEF,CAAC,EAAE,EAAE;QAC1C,IAAM6I,SAAS,GAAGJ,UAAU,CAACzI,CAAC,CAAC;QAC/B,IAAM8I,OAAO,GAAGH,SAAS,CAACI,OAAO,CAACF,SAAS,CAAC;QAC5CJ,UAAU,CAACzI,CAAC,CAAC,GAAG8I,OAAO;MACzB;MAEAN,UAAU,CAAClF,UAAU,CAAC0F,QAAQ,GAAG;QAC/B3D,IAAI,EAAE,CAAC;QACP4D,UAAU,EAAE,CAAC;QACb/H,KAAK,EAAEuH;MACT,CAAC;IACH;EAAC;IAAApI,GAAA;IAAAa,KAAA,EASD,SAAAkE,yBAAyB8D,WAAW,EAAE;MACpC,IAAMZ,MAAM,GAAG,IAAIa,WAAW,CAACD,WAAW,CAAC;MAC3C,KAAK,IAAI5B,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG4B,WAAW,EAAE5B,KAAK,EAAE,EAAE;QAChDgB,MAAM,CAACH,GAAG,CAAC,CAACb,KAAK,CAAC,EAAEA,KAAK,CAAC;MAC5B;MACA,OAAOgB,MAAM;IACf;EAAC;IAAAjI,GAAA;IAAAa,KAAA,EAQD,SAAA2F,0BAA0BuC,MAAM,EAAE;MAChC,QAAQA,MAAM;QACZ,KAAK,KAAK;UACR,OAAO,YAAY;QACrB,KAAK,KAAK;UACR,OAAO,WAAW;QACpB,KAAK,MAAM;UACT,OAAO,YAAY;QACrB;UACEC,OAAO,CAACC,IAAI,sCAAAC,MAAA,CAAsCH,MAAM,EAAG;UAC3D,OAAO,YAAY;MAAC;IAE1B;EAAC;IAAA/I,GAAA;IAAAa,KAAA,EAQD,SAAAyD,kCAAkCtB,QAAQ,EAAEO,YAAY,EAAE;MACxD,IAAM4F,oBAAoB,GAAG5F,YAAY,KAAK,IAAI;MAElD,IAAI,CAACP,QAAQ,EAAE;QACbA,QAAQ,GAAG;UACToG,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,KAAK;UAClBhD,oBAAoB,EAAE;YACpBiD,cAAc,EAAE,CAAC;YACjBC,eAAe,EAAE;UACnB;QACF,CAAC;QAED,IAAIJ,oBAAoB,EAAE;UACxBnG,QAAQ,CAACqD,oBAAoB,CAACC,gBAAgB,GAAG;YAC/CW,KAAK,EAAE1D,YAAY;YACnBiG,QAAQ,EAAE;UACZ,CAAC;QACH,CAAC,MAAM;UACLxG,QAAQ,CAACqD,oBAAoB,CAACoD,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9D;QAEA,OAAOzG,QAAQ;MACjB;MAEA,IAAIO,YAAY,KAAK,IAAI,EAAE;QACzBP,QAAQ,GAAG,IAAI,CAAC0G,eAAe,CAAC1G,QAAQ,EAAEO,YAAY,CAAC;MACzD;MAEA,OAAOP,QAAQ;IACjB;EAAC;IAAAhD,GAAA;IAAAa,KAAA,EAQD,SAAA6I,gBAAgBC,kBAAkB,EAAEpG,YAAY,EAAE;MAChD,IAAMP,QAAQ,GAAAvD,aAAA,CAAAA,aAAA,KACTkK,kBAAkB;QACrBtD,oBAAoB,EAAA5G,aAAA,KAAMkK,kBAAkB,CAACtD,oBAAoB;MAAC,EACnE;MAGD,IACEsD,kBAAkB,CAACtD,oBAAoB,IACvCsD,kBAAkB,CAACtD,oBAAoB,CAACC,gBAAgB,EACxD;QACAtD,QAAQ,CAACqD,oBAAoB,CAACC,gBAAgB,GAAG;UAC/CW,KAAK,EAAE1D,YAAY;UACnBiG,QAAQ,EAAE;QACZ,CAAC;MACH,CAAC,MAAM,IAAIG,kBAAkB,CAACC,eAAe,EAAE;QAC7C5G,QAAQ,CAAC4G,eAAe,GAAG;UACzB3C,KAAK,EAAE1D,YAAY;UACnBiG,QAAQ,EAAE;QACZ,CAAC;MACH,CAAC,MAAM,IACLG,kBAAkB,CAACtD,oBAAoB,IACvCsD,kBAAkB,CAACtD,oBAAoB,CAACwD,wBAAwB,EAChE;QACA7G,QAAQ,CAACqD,oBAAoB,CAACwD,wBAAwB,GAAG;UACvD5C,KAAK,EAAE1D,YAAY;UACnBiG,QAAQ,EAAE;QACZ,CAAC;MACH,CAAC,MAAM,IAAIG,kBAAkB,CAACG,aAAa,EAAE;QAC3C9G,QAAQ,CAAC8G,aAAa,GAAG;UACvB7C,KAAK,EAAE1D,YAAY;UACnBiG,QAAQ,EAAE;QACZ,CAAC;MACH,CAAC,MAAM,IAAIG,kBAAkB,CAACI,gBAAgB,EAAE;QAC9C/G,QAAQ,CAAC+G,gBAAgB,GAAG;UAC1B9C,KAAK,EAAE1D,YAAY;UACnBiG,QAAQ,EAAE;QACZ,CAAC;MACH;MACA,OAAOxG,QAAQ;IACjB;EAAC;IAAAhD,GAAA;IAAAa,KAAA,EAOD,SAAAwB,mBAAmBY,UAAU,EAAE;MAC7B,IAAI,CAACA,UAAU,EAAE;QACf,OAAO,CAAC;MACV;MACA,IAAM+G,QAAQ,GAAGhL,MAAM,CAACD,IAAI,CAACkE,UAAU,CAAC,CAAC,CAAC,CAAC;MAC3C,OAAO+G,QAAQ,GAAG/G,UAAU,CAAC+G,QAAQ,CAAC,CAACnK,MAAM,GAAG,CAAC;IACnD;EAAC;IAAAG,GAAA;IAAAa,KAAA,EAMD,SAAAiE,cAAcD,OAAO,EAAE;MAErB,OAAOA,OAAO,CAACoF,IAAI,CAAC,UAACpJ,KAAK;QAAA,OAAKA,KAAK;MAAA,EAAC;IACvC;EAAC;EAAA,OAAAH,aAAA;AAAA;AAAAwJ,OAAA,CAAAhK,OAAA,GAAAQ,aAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-obb-to-3d-tiles-obb.js","names":["i3sObbTo3dTilesObb","i3SObb","geoidHeightModel","tiles3DCenter","center","getHeight","cartesianCenter","Ellipsoid","WGS84","cartographicToCartesian","Vector3","tiles3DObb","OrientedBoundingBox","fromCenterHalfSizeQuaternion","halfSize","quaternion","halfAxes","toArray"],"sources":["../../../../src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.ts"],"sourcesContent":["import {Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {OrientedBoundingBox} from '@math.gl/culling';\n// @ts-expect-error\nimport {GeoidHeightModel} from '@loaders.gl/tile-converter/lib/geoid-height-model';\n\n/**\n * Convert quaternion-based OBB to half-axes-based OBB\n * @param i3SObb quaternion based OBB\n * @param geoidHeightModel the Earth Gravity Model instance\n * @returns number[12] 3DTiles OBB https://github.com/CesiumGS/3d-tiles/tree/master/specification#box\n */\nexport function i3sObbTo3dTilesObb(\n i3SObb: {\n center: number[];\n halfSize: number[];\n quaternion: number[];\n },\n geoidHeightModel: GeoidHeightModel\n): number[] {\n const tiles3DCenter = [\n i3SObb.center[0],\n i3SObb.center[1],\n i3SObb.center[2] + geoidHeightModel.getHeight(i3SObb.center[1], i3SObb.center[0])\n ];\n const cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(tiles3DCenter, new Vector3());\n const tiles3DObb = new OrientedBoundingBox().fromCenterHalfSizeQuaternion(\n cartesianCenter,\n i3SObb.halfSize,\n i3SObb.quaternion\n );\n return [...tiles3DObb.center, ...tiles3DObb.halfAxes.toArray()];\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AAUO,
|
|
1
|
+
{"version":3,"file":"i3s-obb-to-3d-tiles-obb.js","names":["_core","require","_geospatial","_culling","i3sObbTo3dTilesObb","i3SObb","geoidHeightModel","tiles3DCenter","center","getHeight","cartesianCenter","Ellipsoid","WGS84","cartographicToCartesian","Vector3","tiles3DObb","OrientedBoundingBox","fromCenterHalfSizeQuaternion","halfSize","quaternion","concat","_toConsumableArray2","default","halfAxes","toArray"],"sources":["../../../../src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.ts"],"sourcesContent":["import {Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {OrientedBoundingBox} from '@math.gl/culling';\n// @ts-expect-error\nimport {GeoidHeightModel} from '@loaders.gl/tile-converter/lib/geoid-height-model';\n\n/**\n * Convert quaternion-based OBB to half-axes-based OBB\n * @param i3SObb quaternion based OBB\n * @param geoidHeightModel the Earth Gravity Model instance\n * @returns number[12] 3DTiles OBB https://github.com/CesiumGS/3d-tiles/tree/master/specification#box\n */\nexport function i3sObbTo3dTilesObb(\n i3SObb: {\n center: number[];\n halfSize: number[];\n quaternion: number[];\n },\n geoidHeightModel: GeoidHeightModel\n): number[] {\n const tiles3DCenter = [\n i3SObb.center[0],\n i3SObb.center[1],\n i3SObb.center[2] + geoidHeightModel.getHeight(i3SObb.center[1], i3SObb.center[0])\n ];\n const cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(tiles3DCenter, new Vector3());\n const tiles3DObb = new OrientedBoundingBox().fromCenterHalfSizeQuaternion(\n cartesianCenter,\n i3SObb.halfSize,\n i3SObb.quaternion\n );\n return [...tiles3DObb.center, ...tiles3DObb.halfAxes.toArray()];\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAUO,SAASG,kBAAkBA,CAChCC,MAIC,EACDC,gBAAkC,EACxB;EACV,IAAMC,aAAa,GAAG,CACpBF,MAAM,CAACG,MAAM,CAAC,CAAC,CAAC,EAChBH,MAAM,CAACG,MAAM,CAAC,CAAC,CAAC,EAChBH,MAAM,CAACG,MAAM,CAAC,CAAC,CAAC,GAAGF,gBAAgB,CAACG,SAAS,CAACJ,MAAM,CAACG,MAAM,CAAC,CAAC,CAAC,EAAEH,MAAM,CAACG,MAAM,CAAC,CAAC,CAAC,CAAC,CAClF;EACD,IAAME,eAAe,GAAGC,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CAACN,aAAa,EAAE,IAAIO,aAAO,EAAE,CAAC;EAC7F,IAAMC,UAAU,GAAG,IAAIC,4BAAmB,EAAE,CAACC,4BAA4B,CACvEP,eAAe,EACfL,MAAM,CAACa,QAAQ,EACfb,MAAM,CAACc,UAAU,CAClB;EACD,UAAAC,MAAA,KAAAC,mBAAA,CAAAC,OAAA,EAAWP,UAAU,CAACP,MAAM,OAAAa,mBAAA,CAAAC,OAAA,EAAKP,UAAU,CAACQ,QAAQ,CAACC,OAAO,EAAE;AAChE"}
|
|
@@ -19,11 +19,9 @@ function convertTextureAtlas(texCoords, uvRegions) {
|
|
|
19
19
|
}
|
|
20
20
|
return convertedTexCoords;
|
|
21
21
|
}
|
|
22
|
-
|
|
23
22
|
function fract(uv) {
|
|
24
23
|
return [uv[0] - Math.floor(uv[0]), uv[1] - Math.floor(uv[1])];
|
|
25
24
|
}
|
|
26
|
-
|
|
27
25
|
function normalizeRegions(regions) {
|
|
28
26
|
var MAX_UINT_16_VALUE = 65535;
|
|
29
27
|
var normalizedRegions = [];
|