UNPKG

@loaders.gl/3d-tiles

Version:

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

38 lines 2.13 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 { copyStringToDataView } from '@loaders.gl/loader-utils'; import { MAGIC_ARRAY } from "../constants.js"; import { encode3DTileHeader, encode3DTileByteLength } from "./helpers/encode-3d-tile-header.js"; // Procedurally encode the tile array buffer for testing purposes // eslint-disable-next-line max-statements export function encodeInstancedModel3DTile(tile, dataView, byteOffset, options) { const { featuresLength = 1, gltfFormat = 1, gltfUri = '' } = tile; const gltfUriByteLength = gltfUri.length; const featureTableJson = { INSTANCES_LENGTH: featuresLength, POSITION: new Array(featuresLength * 3).fill(0) }; const featureTableJsonString = JSON.stringify(featureTableJson); const featureTableJsonByteLength = featureTableJsonString.length; // Add default magic for this tile type tile = { magic: MAGIC_ARRAY.INSTANCED_MODEL, ...tile }; const byteOffsetStart = byteOffset; byteOffset = encode3DTileHeader(tile, dataView, 0); if (dataView) { dataView.setUint32(12, featureTableJsonByteLength, true); // featureTableJsonByteLength dataView.setUint32(16, 0, true); // featureTableBinaryByteLength dataView.setUint32(20, 0, true); // batchTableJsonByteLength dataView.setUint32(24, 0, true); // batchTableBinaryByteLength dataView.setUint32(28, gltfFormat, true); // gltfFormat } byteOffset += 20; byteOffset += copyStringToDataView(dataView, byteOffset, featureTableJsonString, featureTableJsonByteLength); byteOffset += copyStringToDataView(dataView, byteOffset, gltfUri, gltfUriByteLength); // Go "back" and rewrite the tile's `byteLength` now that we know the value encode3DTileByteLength(dataView, byteOffsetStart, byteOffset - byteOffsetStart); return byteOffset; } //# sourceMappingURL=encode-3d-tile-instanced-model.js.map