@loaders.gl/3d-tiles
Version:
3D Tiles, an open standard for streaming massive heterogeneous 3D geospatial datasets.
30 lines (29 loc) • 1.76 kB
JavaScript
// 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;
}