diff --git a/examples/3d-tiles/package.json b/examples/3d-tiles/package.json index 13080a3223..0b634baef2 100644 --- a/examples/3d-tiles/package.json +++ b/examples/3d-tiles/package.json @@ -4,6 +4,7 @@ "start": "webpack-dev-server --progress --hot --open", "start-local": "webpack-dev-server --env.local --progress --hot --open", "start-local-deck": "webpack-dev-server --env.local --env.deck --progress --hot --open", + "start-local-math": "webpack-dev-server --env.local --env.math --progress --hot --open", "generate": "node ./generate-index/index.js" }, "dependencies": { diff --git a/examples/3d-tiles/tile-3d-layer/tile-3d-layer.js b/examples/3d-tiles/tile-3d-layer/tile-3d-layer.js index 87a0d5d90f..dfd90e2c8b 100644 --- a/examples/3d-tiles/tile-3d-layer/tile-3d-layer.js +++ b/examples/3d-tiles/tile-3d-layer/tile-3d-layer.js @@ -145,7 +145,7 @@ export default class Tile3DLayer extends CompositeLayer { const {tileset3d, layerMap} = this.state; const {selectedTiles} = tileset3d; - const tilesWithoutLayer = selectedTiles.filter(tile => !(tile.contentUri in layerMap)); + const tilesWithoutLayer = selectedTiles.filter(tile => !layerMap[tile.contentUri]); for (const tile of tilesWithoutLayer) { this._unpackTile(tile); @@ -166,7 +166,6 @@ export default class Tile3DLayer extends CompositeLayer { if (content) { switch (content.type) { case 'pnts': - this._unpackPointCloud3DTile(tileHeader); break; case 'i3dm': this._unpackInstanced3DTile(tileHeader); @@ -182,27 +181,15 @@ export default class Tile3DLayer extends CompositeLayer { } } - _unpackPointCloud3DTile(tileHeader) { - const {pointCount, positions} = tileHeader.content; - - tileHeader.userData = { - pointCount, - positions - }; - } - _unpackInstanced3DTile(tileHeader) { - if (tileHeader.content.gltfArrayBuffer) { - tileHeader.userData = {gltfUrl: parse(tileHeader.content.gltfArrayBuffer)}; - } - - if (tileHeader.content.gltfUrl) { - const gltfUrl = tileHeader.tileset.getTileUrl(tileHeader.content.gltfUrl); - tileHeader.userData = {gltfUrl}; - } + this._extractGltfUrl(tileHeader); } _unpackBatched3DTile(tileHeader) { + this._extractGltfUrl(tileHeader); + } + + _extractGltfUrl(tileHeader) { if (tileHeader.content.gltfArrayBuffer) { tileHeader.userData = {gltfUrl: parse(tileHeader.content.gltfArrayBuffer)}; } @@ -213,7 +200,7 @@ export default class Tile3DLayer extends CompositeLayer { } _create3DTileLayer(tileHeader) { - if (!tileHeader.content || !tileHeader.userData) { + if (!tileHeader.content) { return null; } @@ -228,9 +215,11 @@ export default class Tile3DLayer extends CompositeLayer { break; default: } + if (!layer) { throw new Error(`Tile3DLayer: Failed to render layer of type ${tileHeader.content.type}`); } + return layer; } @@ -260,10 +249,14 @@ export default class Tile3DLayer extends CompositeLayer { } _createPointCloud3DTileLayer(tileHeader) { - const {positions, normals, colors} = tileHeader.content.attributes; - const {pointCount} = tileHeader.content; - const {colorRGBA} = tileHeader.userData; - const {cartographicOrigin, modelMatrix} = tileHeader.content; + const { + attributes, + pointCount, + constantRGBA, + cartographicOrigin, + modelMatrix + } = tileHeader.content; + const {positions, normals, colors} = attributes; return ( positions && @@ -283,7 +276,7 @@ export default class Tile3DLayer extends CompositeLayer { coordinateOrigin: cartographicOrigin, modelMatrix, - getColor: colorRGBA || this.props.color, + getColor: constantRGBA || this.props.color, pickable: true, numInstances: pointCount, opacity: 0.8, @@ -293,10 +286,7 @@ export default class Tile3DLayer extends CompositeLayer { } renderLayers() { - // TODO - reuse the same layer list - const layers = Object.values(this.state.layerMap).map(layer => layer.layer); - // const {layers} = this.state; - return layers; + return this.state.layers; } } diff --git a/modules/3d-tiles/src/parsers/parse-3d-tile-instanced-model.js b/modules/3d-tiles/src/parsers/parse-3d-tile-instanced-model.js index 968cf5eeac..71a445dc21 100644 --- a/modules/3d-tiles/src/parsers/parse-3d-tile-instanced-model.js +++ b/modules/3d-tiles/src/parsers/parse-3d-tile-instanced-model.js @@ -200,6 +200,7 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen */ } else if (tile.eastNorthUp) { Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform); + // TODO fix rotation matrix instanceTransform.getRotation(instanceRotation); } else { instanceRotation.identity();