UNPKG

@loaders.gl/3d-tiles

Version:

3D Tiles, an open standard for streaming massive heterogeneous 3D geospatial datasets.

30 lines (29 loc) 1.76 kB
// loaders.gl // SPDX-License-Identifier: MIT AND Apache-2.0 // Copyright vis.gl contributors // This file is derived from the Cesium code base under Apache 2 license // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md import { GL } from '@loaders.gl/math'; // math.gl/geometry; import Tile3DFeatureTable from "../classes/tile-3d-feature-table.js"; // import Tile3DBatchTable from '../classes/tile-3d-batch-table'; import { parse3DTileHeaderSync } from "./helpers/parse-3d-tile-header.js"; import { parse3DTileTablesHeaderSync, parse3DTileTablesSync } from "./helpers/parse-3d-tile-tables.js"; import { parse3DTileGLTFViewSync, extractGLTF, GLTF_FORMAT } from "./helpers/parse-3d-tile-gltf-view.js"; export async function parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context) { byteOffset = parseBatchedModel(tile, arrayBuffer, byteOffset, options, context); await extractGLTF(tile, GLTF_FORMAT.EMBEDDED, options, context); const extensions = tile?.gltf?.extensions; if (extensions && extensions.CESIUM_RTC) { tile.rtcCenter = extensions.CESIUM_RTC.center; } return byteOffset; } function parseBatchedModel(tile, arrayBuffer, byteOffset, options, context) { byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset); byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset); byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options); byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options); const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary); tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3); return byteOffset; }