Skip to content

Commit 192a632

Browse files
committedApr 24, 2018
Tweaks
1 parent 59247c4 commit 192a632

File tree

8 files changed

+36
-36
lines changed

8 files changed

+36
-36
lines changed
 

‎README.md

+18-18
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Also see the [3D Tiles Showcases video on YouTube](https://youtu.be/KoGc-XDWPDE)
9090
* [Introducing 3D Tiles](https://cesium.com/blog/2015/08/10/introducing-3d-tiles/) - the motivation for and principles of 3D Tiles. Read this first if you are new to 3D Tiles.
9191
* [The Next Generation of 3D Tiles](https://cesium.com/blog/2017/07/12/the-next-generation-of-3d-tiles/) - future plans for 3D Tiles.
9292
* **Cesium implementation**
93-
* Download [Cesium 1.35 or later](https://cesiumjs.org/downloads/) and check out the [Sandcastle examples labeled '3D Tiles'](http://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=3D%20Tiles%20BIM.html&label=3D%20Tiles).
93+
* Download [Cesium 1.35 or later](https://cesiumjs.org/downloads/) and check out the [Sandcastle examples labeled '3D Tiles'](http://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=3D%20Tiles%20BIM.html&label=3D%20Tiles).
9494
* [Roadmap](https://github.com/AnalyticalGraphicsInc/cesium/issues/3241).
9595
* **Sample data**
9696
* [3d-tiles-samples](https://github.com/AnalyticalGraphicsInc/3d-tiles-samples) - sample tilesets for learning how to use 3D Tiles
@@ -128,13 +128,13 @@ Also see the [3D Tiles Showcases video on YouTube](https://youtu.be/KoGc-XDWPDE)
128128

129129
## Spec status
130130

131-
The 3D Tiles spec is pre-1.0 (indicated by `"version": "0.0"` in the tileset JSON). We expect a draft 1.0 version and the Cesium implementation to stabilize in 2017; see the [remaining items](https://github.com/AnalyticalGraphicsInc/3d-tiles/issues?q=is%3Aissue+is%3Aopen+label%3A%22draft+1.0%22).
131+
The 3D Tiles spec is pre-1.0 (indicated by `"version": "0.0"` in the tileset JSON). We expect a draft 1.0 version and the Cesium implementation to stabilize in 2017; see the [remaining items](https://github.com/AnalyticalGraphicsInc/3d-tiles/issues?q=is%3Aopen+is%3Aissue+label%3A1.0).
132132

133133
**Draft 1.0 Plans**
134134

135135
Topic | Status
136136
---|---
137-
[Tileset JSON](#tileset-json-file)<br /><br />The tileset's spatial hierarchy | :white_check_mark: **Solid base**, will add features as needed
137+
[Tileset JSON](#tileset-json-files)<br /><br />The tileset's spatial hierarchy | :white_check_mark: **Solid base**, will add features as needed
138138
[Batched 3D Model](TileFormats/Batched3DModel/README.md) (*.b3dm)<br /><br />Textured terrain and surfaces, 3D building exteriors and interiors, massive models, ... | :white_check_mark: **Solid base**, only minor, if any, changes expected
139139
[Instanced 3D Model](TileFormats/Instanced3DModel/README.md) (*.i3dm)<br /><br />Trees, windmills, bolts, ... | :white_check_mark: **Solid base**, only minor, if any, changes expected
140140
[Point Cloud](TileFormats/PointCloud/README.md) (*.pnts)<br /><br />Massive amount of points | :white_check_mark: **Solid base**, only minor, if any, changes expected
@@ -146,7 +146,7 @@ Topic | Status
146146

147147
Topic | Status
148148
---|---
149-
Terrain v2 | :white_circle: **Not started**, [quantized-mesh](https://cesiumjs.org/data-and-assets/terrain/formats/quantized-mesh-1.0.html) is a good starting point; in the meantime, folks are using [Batched 3D Model](TileFormats/Batched3DModel/README.md)
149+
Terrain v2 | :white_circle: **Not started**, [quantized-mesh](https://github.com/AnalyticalGraphicsInc/quantized-mesh/blob/master/README.md) is a good starting point; in the meantime, folks are using [Batched 3D Model](TileFormats/Batched3DModel/README.md)
150150
[OpenStreetMap](TileFormats/OpenStreetMap/README.md) | :white_circle: **Not started** Currently folks are using [Batched 3D Model](TileFormats/Batched3DModel/README.md)
151151
Stars | :white_circle: **Not started**
152152

@@ -186,7 +186,7 @@ Optionally, a separate 3D Tile Style may be applied to a tileset.
186186

187187
3D Tiles use URLs to reference tile content.
188188

189-
All URLs must be valid resolvable URIs, and may be absolute or relative. When the url is relative, it's base is always referring to the referring tileset `.json` file.
189+
All URLs must be valid resolvable URIs, and may be absolute or relative. When the url is relative, its base is always relative to the referring tileset `.json` file.
190190

191191
## Tiles
192192

@@ -232,21 +232,21 @@ An optional `viewerRequestVolume` property (not shown above) defines a volume, u
232232

233233
The `refine` property is a string that is either `"REPLACE"` for replacement refinement or `"ADD"` for additive refinement. It is required for the root tile of a tileset; it is optional for all other tiles. When `refine` is omitted, it is inherited from the parent tile.
234234

235-
The `content` property is an object that contains metadata about the tile's content and a link to the content. `content.url` is a string that points to the tile's contents with an absolute or relative url. In the example above, the url, `2/0/0.b3dm`, has a TMS tiling scheme, `{z}/{y}/{x}.extension`, but this is not required; see the [roadmap Q&A](#How-do-I-request-the-tiles-for-Level-n).
235+
The `content` property is an object that contains metadata about the tile's content and a link to the content. `content.url` is a string that points to the tile's contents with an absolute or relative url. In the example above, the url, `2/0/0.b3dm`, has a TMS tiling scheme, `{z}/{y}/{x}.extension`, but this is not required; see the [roadmap Q&A](#how-do-i-request-the-tiles-for-level-n).
236236

237237
The url can be another tileset JSON to create a tileset of tilesets. See [External tilesets](#external-tilesets).
238238

239239
A file extension is not required for `content.url`. A content's [tile format](#tile-formats) can be identified by the `magic` field in its header, or otherwise as an external tileset if the content is JSON.
240240

241-
`content.boundingVolume` defines an optional bounding volume similar to the top-level `boundingVolume` property. But unlike the top-level `boundingVolume` property, `content.boundingVolume` is a tightly fit bounding volume enclosing just the tile's contents. This is used for replacement refinement; `boundingVolume` provides spatial coherence and `content.boundingVolume` enables tight view frustum culling. The screenshot below shows the bounding volumes for the root tile for [Canary Wharf](http://cesiumjs.org/CanaryWharf/). `boundingVolume`, shown in red, encloses the entire area of the tileset; `content.boundingVolume` shown in blue, encloses just the four features (models) in the root tile.
241+
`content.boundingVolume` defines an optional bounding volume similar to the top-level `boundingVolume` property. But unlike the top-level `boundingVolume` property, `content.boundingVolume` is a tightly fit bounding volume enclosing just the tile's contents. `boundingVolume` provides spatial coherence and `content.boundingVolume` enables tight view frustum culling. The screenshot below shows the bounding volumes for the root tile for [Canary Wharf](http://cesiumjs.org/CanaryWharf/). `boundingVolume`, shown in red, encloses the entire area of the tileset; `content.boundingVolume` shown in blue, encloses just the four features (models) in the root tile.
242242

243243
![](figures/contentsBox.png)
244244

245245
`content.boundingVolume` is optional. When it is not defined, the tile's bounding volume is still used for culling (see [Grids](#grids)).
246246

247247
An optional `transform` property (not shown above) defines a 4x4 affine transformation matrix that transforms the tile's `content`, `boundingVolume`, and `viewerRequestVolume` as described in the [Tile transform](#tile-transform) section.
248248

249-
`children` is an array of objects that define child tiles. See the [section below](#tilesetjson).
249+
`children` is an array of objects that define child tiles. See the [section below](#tileset-json-files).
250250

251251
![](figures/tile.png)
252252

@@ -276,7 +276,7 @@ The units for all linear distances are meters.
276276

277277
All angles are in radians.
278278

279-
3D Tiles do not explicitly store Cartographic coordinates (longitude, latitude, and height); these values are implicit in WGS84 Cartesian coordinates, which are efficient for the GPU to render since they do not require a non-affine coordinate transformation. A 3D Tiles tileset can include application-specific metadata, such as Cartographic coordinates, but the semantics are not part of the 3D Tiles specification.
279+
3D Tiles do not explicitly store geographic coordinates (longitude, latitude, and height); these values are implicitly in WGS84 Cartesian coordinates, which are efficient for the GPU to render since they do not require a non-affine coordinate transformation. A 3D Tiles tileset can include application-specific metadata, such as geographic coordinates, but the semantics are not part of the 3D Tiles specification.
280280

281281
### Tile transform
282282

@@ -288,7 +288,7 @@ The `transform` property applies to:
288288
* `tile.content`
289289
* Each feature's position.
290290
* Each feature's normal should be transformed by the top-left 3x3 matrix of the inverse-transpose of `transform` to account for [correct vector transforms when scale is used](http://www.realtimerendering.com/resources/RTNews/html/rtnews1a.html#art4).
291-
* `content.boundingVolume`, except when `content.boundingVolume.region` is defined, which is explicitly in [WGS84 / EPSG:4326 coordinates](http://spatialreference.org/ref/epsg/wgs-84/).
291+
* `content.boundingVolume`, except when `content.boundingVolume.region` is defined, which is explicitly in WGS84 / EPSG:4326 coordinates.
292292
* `tile.boundingVolume`, except when `tile.boundingVolume.region` is defined, which is explicitly in WGS84 / EPSG:4326 coordinates.
293293
* `tile.viewerRequestVolume`, except when `tile.viewerRequestVolume.region` is defined, which is explicitly in WGS84 / EPSG:4326 coordinates.
294294

@@ -326,8 +326,8 @@ function computeTransform(tile, transformToRoot) {
326326

327327
var children = tile.children;
328328
var length = children.length;
329-
for (var k = 0; k < length; ++k) {
330-
var child = children[k];
329+
for (var i = 0; i < length; ++i) {
330+
var child = children[i];
331331
var childToRoot = defined(child.transform) ? Matrix4.fromArray(child.transform) : Matrix4.clone(Matrix4.IDENTITY);
332332
childToRoot = Matrix4.multiplyTransformation(transformToRoot, childToRoot, childToRoot);
333333
computeTransform(child, childToRoot);
@@ -412,7 +412,7 @@ For more on request volumes, see the [sample tileset](https://github.com/Analyti
412412

413413
3D Tiles use one main tileset `.json` file as the entry point to define a tileset.
414414

415-
See [schema](schema) for the detailed tileset JSON schema.
415+
See the [schema](schema) for the detailed tileset JSON schema.
416416

417417
Here is a subset of the tileset file used for [Canary Wharf](http://cesiumjs.org/CanaryWharf/) (also see the complete file, [`tileset.json`](examples/tileset.json)):
418418
```json
@@ -467,11 +467,11 @@ The top-level object in the tileset JSON has four properties: `asset`, `properti
467467

468468
`geometricError` is a nonnegative number that defines the error, in meters, when the tileset is not rendered.
469469

470-
`root` is an object that defines the root tile using the JSON described in the [above section](#Tile-Metadata). `root.geometricError` is not the same as the tileset's top-level `geometricError`. tileset. The tileset's `geometricError` is the error when the entire tileset is not rendered; `root.geometricError` is the error when only the root tile is rendered.
470+
`root` is an object that defines the root tile using the JSON described in the [above section](#tile-content). `root.geometricError` is not the same as the tileset's top-level `geometricError`. tileset. The tileset's `geometricError` is the error when the entire tileset is not rendered; `root.geometricError` is the error when only the root tile is rendered.
471471

472-
`root.children` is an array of objects that define child tiles. Each child tile has a `boundingVolume` fully enclosed by its parent tile's `boundingVolume` and, generally, a `geometricError` less than its parent tile's `geometricError`. For leaf tiles, the length of this array is zero, and `children` may not be defined.
472+
`root.children` is an array of objects that define child tiles. Each child tile's `content.boundingVolume` is fully enclosed by its parent tile's `boundingVolume` and, generally, a `geometricError` less than its parent tile's `geometricError`. For leaf tiles, the length of this array is zero, and `children` may not be defined.
473473

474-
See the [Q&A below](#Will-a-tileset-file-be-part-of-the-final-3D-Tiles-spec) for how a tileset file will scale to a massive number of tiles.
474+
See the [Q&A below](#will-a-tileset-file-be-part-of-the-final-3d-tiles-spec) for how a tileset file will scale to a massive number of tiles.
475475

476476
### External tilesets
477477

@@ -636,7 +636,7 @@ No, 3D Tiles are a general spec for streaming massive heterogeneous 3D geospatia
636636

637637
#### What is the relationship between 3D Tiles and glTF?
638638

639-
[glTF](https://www.khronos.org/gltf), the runtime asset format for WebGL, is an open standard for 3D models from Khronos (the same group that does WebGL and COLLADA). Cesium uses glTF as its 3D model format, and the Cesium team contributes heavily to the glTF spec and open-source COLLADA2GLTF converter. We recommend using glTF in Cesium for individual assets, e.g., an aircraft, a character, or a 3D building.
639+
[glTF](https://www.khronos.org/gltf) is an open standard for 3D models from Khronos (the same group that does WebGL and COLLADA). Cesium uses glTF as its 3D model format, and the Cesium team contributes heavily to the glTF spec and open-source COLLADA2GLTF converter. We recommend using glTF in Cesium for individual assets, e.g., an aircraft, a character, or a 3D building.
640640

641641
We created 3D Tiles for streaming massive geospatial datasets where a single glTF model would be prohibitive. Given that glTF is optimized for rendering, that Cesium has a well-tested glTF loader, and that there are existing conversion tools for glTF, 3D Tiles use glTF for some tile formats such as [b3dm](TileFormats/Batched3DModel/README.md) (used for 3D buildings). To avoid base64-encoding or multiple file overhead, [binary glTF](https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#binary-gltf-layout), is embedded into binary tiles.
642642

@@ -650,7 +650,7 @@ The general case runtime editing of geometry on a building, vector data, etc., a
650650

651651
#### Will 3D Tiles include terrain?
652652

653-
Yes, a [quantized-mesh](https://cesiumjs.org/data-and-assets/terrain/formats/quantized-mesh-1.0.html)-like tile would fit well with 3D Tiles and allow Cesium to use the same streaming code (we say _quantized-mesh-like_ because some of the metadata, e.g., for bounding volumes and horizon culling, may be organized differently or moved to the tileset file).
653+
Yes, a [quantized-mesh](https://github.com/AnalyticalGraphicsInc/quantized-mesh/blob/master/README.md)-like tile would fit well with 3D Tiles and allow Cesium to use the same streaming code (we say _quantized-mesh-like_ because some of the metadata, e.g., for bounding volumes and horizon culling, may be organized differently or moved to the tileset file).
654654

655655
However, since Cesium already streams terrain well, we are not focused on this in the short-term.
656656

‎Styling/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ Contents:
5151
* [Notes](#notes)
5252
* [Batch Table Hierarchy](#batch-table-hierarchy)
5353
* [Point Cloud](#point-cloud)
54-
* [File Extension](#file-extension)
55-
* [MIME Type](#mime-type)
54+
* [File Extension](#file-extensions-and-mime-type)
55+
* [MIME Type](#file-extensions-and-mime-type)
5656
* [Acknowledgments](#acknowledgments)
5757

5858
## Overview
5959

60-
3D Tiles styles provide concise declarative styling of tileset. A style defines expressions to evaluate a feature's `color` (RGB and translucency) and `show` properties, often based on the feature's properties or class as stored in the tile's [Batch Table](../BatchTable/README.md).
60+
3D Tiles styles provide concise declarative styling of tilesets. A style defines expressions to evaluate a feature's `color` (RGB and translucency) and `show` properties, often based on the feature's properties or class as stored in the tile's [Batch Table](../TileFormats/BatchTable/README.md).
6161

6262
While a style may be created for and reference properties of a tileset, a style is independent of a tileset, such that any style can be applied to any tileset.
6363

‎TileFormats/BatchTable/README.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Contents:
2626

2727
## Overview
2828

29-
A _Batch Table_ contains per-feature application-specific metadata in a tile. These properties may be queried at runtime for declarative styling and application-specific use cases such as populating a UI or issuing a REST API request. Some example Batch Table properties are building heights, cartographic coordinates, and database primary keys.
29+
A _Batch Table_ contains per-feature application-specific metadata in a tile. These properties may be queried at runtime for declarative styling and application-specific use cases such as populating a UI or issuing a REST API request. Some example Batch Table properties are building heights, geographic coordinates, and database primary keys.
3030

3131
A Batch Table is used by the following tile formats:
3232
* [Batched 3D Model](../Batched3DModel/README.md) (b3dm)
@@ -128,7 +128,7 @@ For example, given the following Batch Table JSON with `batchLength` of 10
128128
"componentType" : "FLOAT",
129129
"type" : "SCALAR"
130130
},
131-
"cartographic" : {
131+
"geographic" : {
132132
"byteOffset" : 40,
133133
"componentType" : "DOUBLE",
134134
"type" : "VEC3"
@@ -149,19 +149,19 @@ var heightArray = new Float32Array(batchTableBinary.buffer, byteOffset, heightAr
149149
var heightOfFeature = heightArray[batchId];
150150
```
151151

152-
To get the `"cartographic"` values:
152+
To get the `"geographic"` values:
153153

154154
```javascript
155-
var cartographic = batchTableJSON.cartographic;
156-
var byteOffset = cartographic.byteOffset;
157-
var componentType = cartographic.componentType;
158-
var type = cartographic.type;
155+
var geographic = batchTableJSON.geographic;
156+
var byteOffset = geographic.byteOffset;
157+
var componentType = geographic.componentType;
158+
var type = geographic.type;
159159
var componentSizeInBytes = sizeInBytes(componentType)
160160
var numberOfComponents = numberOfComponents(type);
161161

162-
var cartographicArrayByteLength = batchLength * componentSizeInBytes * numberOfComponents // 10 * 8 * 3
163-
var cartographicArray = new Float64Array(batchTableBinary.buffer, byteOffset, cartographicArrayByteLength);
164-
var cartographicOfFeature = positionArray.subarray(batchId * numberOfComponents, batchId * numberOfComponents + numberOfComponents); // Using subarray creates a view into the array, and not a new array.
162+
var geographicArrayByteLength = batchLength * componentSizeInBytes * numberOfComponents // 10 * 8 * 3
163+
var geographicArray = new Float64Array(batchTableBinary.buffer, byteOffset, geographicArrayByteLength);
164+
var geographicOfFeature = positionArray.subarray(batchId * numberOfComponents, batchId * numberOfComponents + numberOfComponents); // Using subarray creates a view into the array, and not a new array.
165165
```
166166

167167
## Batch Table Hierarchy

‎TileFormats/Instanced3DModel/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ module.
120120
#### Default Orientation
121121

122122
If `NORMAL_UP` and `NORMAL_RIGHT` or `NORMAL_UP_OCT32P` and `NORMAL_RIGHT_OCT32P` are not present,
123-
the instance will not have a custom orientation. If `EAST_NORTH_UP` is `true` the instance is assumed to be on the `WGS84` ellipsoid and its orientation will default to the `east/north/up` reference frame at its Cartographic position.
123+
the instance will not have a custom orientation. If `EAST_NORTH_UP` is `true` the instance is assumed to be on the `WGS84` ellipsoid and its orientation will default to the `east/north/up` reference frame at its geographic position.
124124
This is suitable for instanced models like trees whose orientation is always facing up from their position on the ellipsoid's surface.
125125

126126
### Instance Position

‎examples/batchTable.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"componentType" : "FLOAT",
99
"type" : "SCALAR"
1010
},
11-
"cartographic" : {
11+
"geographic" : {
1212
"byteOffset" : 8,
1313
"componentType" : "DOUBLE",
1414
"type" : "VEC3"

‎schema/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 3D Tiles JSON Schema
22

3-
Parts of 3D Tiles, such as [tileset.json](../#tilesetjson), [Feature Table](../TileFormats/FeatureTable/README.md), and [Batch Table](../TileFormats/BatchTable/README.md), are represented with JSON. The JSON schema is defined using [JSON Schema](http://json-schema.org/) draft v4 in schema subdirectories.
3+
Parts of 3D Tiles, such as [tileset.json](../README.md#tileset-json-files), [Feature Table](../TileFormats/FeatureTable/README.md), and [Batch Table](../TileFormats/BatchTable/README.md), are represented with JSON. The JSON schema is defined using [JSON Schema](http://json-schema.org/) draft v4 in schema subdirectories.
44

55
## Usage
66

0 commit comments

Comments
 (0)