Skip to content

Commit

Permalink
Merge pull request #206 from CesiumGS/fix-build
Browse files Browse the repository at this point in the history
Fix samples-generator build
  • Loading branch information
YVin3D committed Jul 22, 2020
2 parents 3197a85 + e2fa5f5 commit 5930415
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 82 deletions.
2 changes: 1 addition & 1 deletion samples-generator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ The tilesets generated here are included in [3d-tiles-samples](https://github.co

## Instructions

Clone this repo and install [Node.js](http://nodejs.org/). From the root directory of this repo, run:
Clone this repo and install [Node.js](http://nodejs.org/). From this directory, run:

```
npm install
Expand Down
42 changes: 21 additions & 21 deletions samples-generator/bin/3d-tiles-samples-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ import { SamplesNext } from '../lib/samplesNext';
const fsExtra = require('fs-extra');
var gltfPipeline = require('gltf-pipeline');
var path = require('path');
var DataUri = require('datauri');
var DataUriParser = require('datauri/parser');
var dataUriParser = new DataUriParser();
var gltfToGlb = gltfPipeline.gltfToGlb;
var gltfConversionOptions = { resourceDirectory: path.join(__dirname, '../') };

Expand Down Expand Up @@ -1247,9 +1248,8 @@ function saveBatchedTileset(tilesetName, tileOptions, tilesetOptions?) {
// old .b3dm
var b3dm = result.b3dm;
if (tilesetOptions.contentDataUri) {
var dataUri = new DataUri();
dataUri.format('.b3dm', b3dm);
tilesetOptions.contentUri = dataUri.content;
var dataUri = dataUriParser.format('.b3dm', b3dm);
tilesetOptions.contentUri = dataUri;
return saveJson(
tilesetPath,
createTilesetJsonSingle(tilesetOptions),
Expand All @@ -1266,7 +1266,7 @@ function saveBatchedTileset(tilesetName, tileOptions, tilesetOptions?) {
});
}

function savePointCloudTileset(tilesetName, tileOptions, tilesetOptions?) {
async function savePointCloudTileset(tilesetName, tileOptions, tilesetOptions?) {
var tilesetDirectory = path.join(
outputDirectory,
'PointCloud',
Expand All @@ -1288,7 +1288,7 @@ function savePointCloudTileset(tilesetName, tileOptions, tilesetOptions?) {
var contentUri = toCamelCase(tilesetName) + ext;
var tilePath = path.join(tilesetDirectory, contentUri);

var result = createPointCloudTile(tileOptions);
var result = await createPointCloudTile(tileOptions);
var batchTableJson = result.batchTableJson;
var extensions = result.extensions;

Expand Down Expand Up @@ -1331,8 +1331,8 @@ function savePointCloudTileset(tilesetName, tileOptions, tilesetOptions?) {
]);
}

function savePointCloudTimeDynamic(name, options) {
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
async function savePointCloudTimeDynamic(name, options) {
options = defaultValue(options, {});
var useTransform = defaultValue(options.transform, false);
var directory = path.join(outputDirectory, 'PointCloud', name);
var use3dTilesNext = defaultValue(options.use3dTilesNext, false);
Expand Down Expand Up @@ -1373,7 +1373,7 @@ function savePointCloudTimeDynamic(name, options) {
for (var i = 0; i < 5; ++i) {
var tileOptions = clone(pointCloudOptions);
tileOptions.time = i * 0.1; // Seed for noise
var result = createPointCloudTile(tileOptions);
var result = await createPointCloudTile(tileOptions);
tilePath = path.join(directory, i + ext);
if (use3dTilesNext && !useGlb) {
tilePromises.push(
Expand Down Expand Up @@ -2541,7 +2541,7 @@ function createTilesetWithTransforms() {
});
}

function createTilesetWithViewerRequestVolume() {
async function createTilesetWithViewerRequestVolume() {
// Create a tileset with one root tile and four child tiles
var tilesetName = 'TilesetWithViewerRequestVolume';
var tilesetDirectory = path.join(outputDirectory, 'Tilesets', tilesetName);
Expand Down Expand Up @@ -2646,7 +2646,7 @@ function createTilesetWithViewerRequestVolume() {
}
};

var pnts = createPointCloudTile(pointCloudOptions).pnts;
var pnts = (await createPointCloudTile(pointCloudOptions)).pnts;

return saveTilesetFiles(
tileOptions,
Expand Down Expand Up @@ -2888,7 +2888,7 @@ function createTilesetSubtreeExpiration() {
]);
}

function createTilesetPoints() {
async function createTilesetPoints() {
// Create a tileset with one root tile and eight child tiles
var tilesetName = 'TilesetPoints';
var tilesetDirectory = path.join(outputDirectory, 'Tilesets', tilesetName);
Expand All @@ -2914,11 +2914,11 @@ function createTilesetPoints() {
0.0,
parentTileHalfWidth // height
];
var parentTile = createPointCloudTile({
var parentTile = (await createPointCloudTile({
tileWidth: parentTileWidth * 2.0,
pointsLength: pointsLength,
relativeToCenter: false
}).pnts;
})).pnts;

var childrenJson = [];
var childTiles = [];
Expand All @@ -2943,12 +2943,12 @@ function createTilesetPoints() {
Cartesian3.unpack(childCenter)
);
childTiles.push(
createPointCloudTile({
(await createPointCloudTile({
tileWidth: childTileWidth * 2.0,
transform: childTransform,
pointsLength: pointsLength,
relativeToCenter: false
}).pnts
})).pnts
);
var childBoxLocal = [
childCenter[0],
Expand Down Expand Up @@ -3383,7 +3383,7 @@ function createTreeBillboards() {
});
}

function createRequestVolume() {
async function createRequestVolume() {
var tilesetName = 'TilesetWithRequestVolume';
var tilesetDirectory = path.join(outputDirectory, 'Samples', tilesetName);
var tilesetPath = path.join(tilesetDirectory, 'tileset.json');
Expand Down Expand Up @@ -3560,7 +3560,7 @@ function createRequestVolume() {
}
};

var pnts = createPointCloudTile(pointCloudOptions).pnts;
var pnts = (await createPointCloudTile(pointCloudOptions)).pnts;

var cityTilePromises = Bluebird.map(cityTileOptions, function (
tileOptions,
Expand Down Expand Up @@ -3596,7 +3596,7 @@ function createRequestVolume() {
]);
}

function createExpireTileset() {
async function createExpireTileset() {
var tilesetName = 'TilesetWithExpiration';
var tilesetDirectory = path.join(outputDirectory, 'Samples', tilesetName);
var tilesetPath = path.join(tilesetDirectory, 'tileset.json');
Expand Down Expand Up @@ -3626,7 +3626,7 @@ function createExpireTileset() {

var tilePromises = [];

var pnts = createPointCloudTile(pointCloudOptions).pnts;
var pnts = (await createPointCloudTile(pointCloudOptions)).pnts;
tilePromises.push(saveBinary(pointCloudTilePath, pnts, gzip));

// Save a few tiles for the server cache
Expand All @@ -3638,7 +3638,7 @@ function createExpireTileset() {
);
var tileOptions = clone(pointCloudOptions);
tileOptions.time = i * 0.1;
var tile = createPointCloudTile(tileOptions).pnts;
var tile = (await createPointCloudTile(tileOptions)).pnts;
tilePromises.push(saveBinary(tilePath, tile, gzip));
}

Expand Down
2 changes: 1 addition & 1 deletion samples-generator/lib/createInstancesTile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export async function createInstancesTile(
// Set the random number seed before creating the instances so that the generated instances are the same between runs
CesiumMath.setRandomNumberSeed(0);

options = defaultValue(options, defaultValue.EMPTY_OBJECT);
options = defaultValue(options, {});
const tileWidth = defaultValue(options.tileWidth, 200.0);
const transform = defaultValue(options.transform, Matrix4.IDENTITY);
const instancesLength = defaultValue(options.instancesLength, 25);
Expand Down
25 changes: 21 additions & 4 deletions samples-generator/lib/createPointCloudTile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,22 @@ var sizeOfFloat32 = 4;
CesiumMath.setRandomNumberSeed(0);
var simplex = new SimplexNoise(CesiumMath.nextRandomNumber);

var encoderModule = draco3d.createEncoderModule({});
var encoderModule;
var encodeModulePromise;

async function initializeDraco() {
if (defined(encodeModulePromise)) {
return encodeModulePromise;
}
encodeModulePromise = new Promise(function(resolve) {
encoderModule = draco3d.createEncoderModule({
onModuleLoaded: function() {
resolve();
}
});
});
return encodeModulePromise;
}

/**
* Creates a pnts tile that represents a point cloud.
Expand All @@ -52,13 +67,15 @@ var encoderModule = draco3d.createEncoderModule({});
* @param {Boolean} [options.unicodePropertyNames=false] Use unicode characters in per-point property names.
* @param {Boolean} [options.time=0.0] Time value when generating 4D simplex noise.
*
* @returns {Object} An object containing the pnts buffer and batch table JSON.
* @returns {Promise} A promise that resolves with the pnts buffer and batch table JSON.
*/
export function createPointCloudTile(options) {
export async function createPointCloudTile(options) {
await initializeDraco();

// Set the random number seed before creating each point cloud so that the generated points are the same between runs
CesiumMath.setRandomNumberSeed(0);

options = defaultValue(options, defaultValue.EMPTY_OBJECT);
options = defaultValue(options, {});
var use3dTilesNext = defaultValue(options.use3dTilesNext, false);
var tileWidth = defaultValue(options.tileWidth, 10.0);
var transform = defaultValue(options.transform, Matrix4.IDENTITY);
Expand Down
28 changes: 7 additions & 21 deletions samples-generator/lib/instanceUtilsNext.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,9 @@
import { FLOAT32_SIZE_BYTES } from './typeSize';
import { Attribute } from './attribute';
import { GltfComponentType, GltfType } from './gltfType';
import { Cartesian3, Math as CesiumMath, Matrix3, Matrix4, Quaternion, Transforms } from 'cesium';
import { Cartesian3, Ellipsoid, Math as CesiumMath, Matrix3, Matrix4, Quaternion, Transforms } from 'cesium';
import { instancesLength, tileWidth, instancesUri } from './constants';

function toMatrix3(matrix4: Matrix4) {
const result = new Matrix3();
// X
result[0] = matrix4[0];
result[3] = matrix4[4];
result[6] = matrix4[8];
// Y
result[1] = matrix4[1];
result[4] = matrix4[5];
result[7] = matrix4[9];
// Z
result[2] = matrix4[2];
result[5] = matrix4[6];
result[8] = matrix4[10];
return result;
}

const util = require('../lib/utility');
const wgs84Transform = util.wgs84Transform;

Expand Down Expand Up @@ -391,6 +374,9 @@ export namespace InstanceTileUtils {


const pos = new Cartesian3();
const scratchMatrix3 = new Matrix3();
const scratchMatrix4 = new Matrix4();
const scratchQuaternion = new Quaternion();
export function eastNorthUpQuaternion(position: Attribute): Attribute {
const positionBuffer = position.buffer;
const quatBuffer = Buffer.alloc(position.count * 4 * FLOAT32_SIZE_BYTES);
Expand All @@ -402,9 +388,9 @@ export namespace InstanceTileUtils {
pos.y = positionBuffer.readFloatLE((i * 3 + 1) * FLOAT32_SIZE_BYTES);
pos.z = positionBuffer.readFloatLE((i * 3 + 2) * FLOAT32_SIZE_BYTES);

const fixedFrame = Transforms.eastNorthUpToFixedFrame(pos);
const rotationMatrix = toMatrix3(fixedFrame);
const quat = Quaternion.fromRotationMatrix(rotationMatrix);
const fixedFrame = Transforms.eastNorthUpToFixedFrame(pos, Ellipsoid.WGS84, scratchMatrix4);
const rotationMatrix = Matrix4.getMatrix3(fixedFrame, scratchMatrix3);
const quat = Quaternion.fromRotationMatrix(rotationMatrix, scratchQuaternion);

quatBuffer.writeFloatLE(quat.x, (i * 4) * FLOAT32_SIZE_BYTES);
quatBuffer.writeFloatLE(quat.y, (i * 4 + 1) * FLOAT32_SIZE_BYTES);
Expand Down
6 changes: 3 additions & 3 deletions samples-generator/lib/samplesNext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,7 @@ export namespace SamplesNext {
}
};

const pntsGltf = createPointCloudTile(pointCloudOptions).gltf;
const pntsGltf = (await createPointCloudTile(pointCloudOptions)).gltf;

const result = TilesetUtilsNext.createBuildingGltfsWithFeatureMetadata(
cityTileOptions
Expand Down Expand Up @@ -596,7 +596,7 @@ export namespace SamplesNext {
use3dTilesNext: true
};

const gltfPnts = createPointCloudTile(pointCloudOptions).gltf;
const gltfPnts = (await createPointCloudTile(pointCloudOptions)).gltf;
await writeTile(pointCloudTilePath, '', gltfPnts, args);

// Save a few tiles for the server cache
Expand All @@ -608,7 +608,7 @@ export namespace SamplesNext {
);
const tileOptions = clone(pointCloudOptions);
tileOptions.time = i * 0.1;
const tile = createPointCloudTile(tileOptions).gltf;
const tile = (await createPointCloudTile(tileOptions)).gltf;
await writeTile(tilePath, '', tile, args);
}

Expand Down
10 changes: 5 additions & 5 deletions samples-generator/lib/tilesetSamplesNext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1143,7 +1143,7 @@ export namespace TilesetSamplesNext {
// TODO: Abstract the point cloud creation logic into smaller functions
// so the `use-3dtiles-next` flag is unnecessary and this code
// matches compositeSamplesNext / instanceSamplesNext
const gltf = createPointCloudTile(pointCloudOptions).gltf;
const gltf = (await createPointCloudTile(pointCloudOptions)).gltf;
await writeTilesetAndTile(
tilesetDirectory,
pointCloudTileName,
Expand Down Expand Up @@ -1449,13 +1449,13 @@ export namespace TilesetSamplesNext {
parentTileHalfWidth // height
];

const parentTile = createPointCloudTile({
const parentTile = (await createPointCloudTile({
tileWidth: parentTileWidth * 2.0,
pointsLength: pointsLength,
relativeToCenter: false,
use3dTilesNext: true,
useGlb: args.useGlb
}).gltf;
})).gltf;

const childrenJson = [];
const childTiles: Gltf[] = [];
Expand All @@ -1479,14 +1479,14 @@ export namespace TilesetSamplesNext {
Cartesian3.unpack(childCenter)
);
childTiles.push(
createPointCloudTile({
(await createPointCloudTile({
tileWidth: childTileWidth * 2.0,
transform: childTransform,
pointsLength: pointsLength,
relativeToCenter: false,
use3dTilesNext: true,
useGlb: args.useGlb
}).gltf as Gltf
})).gltf as Gltf
);
const childBoxLocal = [
childCenter[0],
Expand Down
Loading

0 comments on commit 5930415

Please sign in to comment.