@loaders.gl/terrain 4.0.0-alpha.4 → 4.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +2 -2
- package/dist/dist.min.js +1175 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/index.js +87 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/decode-quantized-mesh.js +250 -0
- package/dist/es5/lib/decode-quantized-mesh.js.map +1 -0
- package/dist/es5/lib/delatin/index.js +408 -0
- package/dist/es5/lib/delatin/index.js.map +1 -0
- package/dist/es5/lib/helpers/skirt.js +105 -0
- package/dist/es5/lib/helpers/skirt.js.map +1 -0
- package/dist/es5/lib/parse-quantized-mesh.js +95 -0
- package/dist/es5/lib/parse-quantized-mesh.js.map +1 -0
- package/dist/es5/lib/parse-terrain.js +152 -0
- package/dist/es5/lib/parse-terrain.js.map +1 -0
- package/dist/es5/lib/utils/version.js +9 -0
- package/dist/es5/lib/utils/version.js.map +1 -0
- package/dist/es5/quantized-mesh-loader.js +24 -0
- package/dist/es5/quantized-mesh-loader.js.map +1 -0
- package/dist/es5/terrain-loader.js +32 -0
- package/dist/es5/terrain-loader.js.map +1 -0
- package/dist/es5/workers/quantized-mesh-worker.js +6 -0
- package/dist/es5/workers/quantized-mesh-worker.js.map +1 -0
- package/dist/es5/workers/terrain-worker.js +6 -0
- package/dist/es5/workers/terrain-worker.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/index.js +32 -0
- package/dist/esm/index.js.map +1 -0
- package/{src → dist/esm}/lib/decode-quantized-mesh.js +76 -165
- package/dist/esm/lib/decode-quantized-mesh.js.map +1 -0
- package/dist/esm/lib/delatin/index.js +355 -0
- package/dist/esm/lib/delatin/index.js.map +1 -0
- package/dist/esm/lib/helpers/skirt.js +89 -0
- package/dist/esm/lib/helpers/skirt.js.map +1 -0
- package/dist/esm/lib/parse-quantized-mesh.js +85 -0
- package/dist/esm/lib/parse-quantized-mesh.js.map +1 -0
- package/{src → dist/esm}/lib/parse-terrain.js +101 -129
- package/dist/esm/lib/parse-terrain.js.map +1 -0
- package/dist/esm/lib/utils/version.js +2 -0
- package/dist/esm/lib/utils/version.js.map +1 -0
- package/dist/esm/quantized-mesh-loader.js +17 -0
- package/dist/esm/quantized-mesh-loader.js.map +1 -0
- package/dist/esm/terrain-loader.js +25 -0
- package/dist/esm/terrain-loader.js.map +1 -0
- package/dist/esm/workers/quantized-mesh-worker.js +4 -0
- package/dist/esm/workers/quantized-mesh-worker.js.map +1 -0
- package/dist/esm/workers/terrain-worker.js +4 -0
- package/dist/esm/workers/terrain-worker.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -14
- package/dist/lib/decode-quantized-mesh.d.ts +59 -0
- package/dist/lib/decode-quantized-mesh.d.ts.map +1 -0
- package/dist/lib/decode-quantized-mesh.js +200 -241
- package/dist/lib/delatin/index.d.ts +24 -0
- package/dist/lib/delatin/index.d.ts.map +1 -0
- package/dist/lib/delatin/index.js +397 -443
- package/dist/lib/helpers/skirt.d.ts +19 -0
- package/dist/lib/helpers/skirt.d.ts.map +1 -0
- package/dist/lib/helpers/skirt.js +119 -91
- package/dist/lib/parse-quantized-mesh.d.ts +7 -0
- package/dist/lib/parse-quantized-mesh.d.ts.map +1 -0
- package/dist/lib/parse-quantized-mesh.js +94 -93
- package/dist/lib/parse-terrain.d.ts +51 -0
- package/dist/lib/parse-terrain.d.ts.map +1 -0
- package/dist/lib/parse-terrain.js +146 -172
- package/dist/lib/utils/version.d.ts +2 -0
- package/dist/lib/utils/version.d.ts.map +1 -0
- package/dist/lib/utils/version.js +7 -2
- package/dist/quantized-mesh-loader.d.ts +12 -0
- package/dist/quantized-mesh-loader.d.ts.map +1 -0
- package/dist/quantized-mesh-loader.js +20 -16
- package/dist/quantized-mesh-worker.js +148 -119
- package/dist/terrain-loader.d.ts +12 -0
- package/dist/terrain-loader.d.ts.map +1 -0
- package/dist/terrain-loader.js +28 -24
- package/dist/terrain-worker.js +148 -119
- package/dist/workers/quantized-mesh-worker.d.ts +2 -0
- package/dist/workers/quantized-mesh-worker.d.ts.map +1 -0
- package/dist/workers/quantized-mesh-worker.js +5 -4
- package/dist/workers/terrain-worker.d.ts +2 -0
- package/dist/workers/terrain-worker.d.ts.map +1 -0
- package/dist/workers/terrain-worker.js +5 -4
- package/package.json +11 -10
- package/src/index.ts +29 -13
- package/src/lib/helpers/skirt.ts +7 -7
- package/src/lib/parse-quantized-mesh.ts +47 -43
- package/src/lib/parse-terrain.ts +84 -89
- package/src/quantized-mesh-loader.ts +9 -4
- package/src/terrain-loader.ts +14 -11
- package/dist/bundle.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/decode-quantized-mesh.js.map +0 -1
- package/dist/lib/delatin/index.js.map +0 -1
- package/dist/lib/helpers/skirt.js.map +0 -1
- package/dist/lib/parse-quantized-mesh.js.map +0 -1
- package/dist/lib/parse-terrain.js.map +0 -1
- package/dist/lib/utils/version.js.map +0 -1
- package/dist/quantized-mesh-loader.js.map +0 -1
- package/dist/terrain-loader.js.map +0 -1
- package/dist/workers/quantized-mesh-worker.js.map +0 -1
- package/dist/workers/terrain-worker.js.map +0 -1
- package/src/lib/helpers/skirt.js +0 -161
- package/src/lib/parse-quantized-mesh.js +0 -98
- package/src/workers/quantized-mesh-worker.js +0 -4
- package/src/workers/terrain-worker.js +0 -4
- /package/src/lib/delatin/{index.js → index.ts} +0 -0
- /package/src/lib/utils/{version.js → version.ts} +0 -0
|
@@ -1,86 +1,18 @@
|
|
|
1
|
-
import {getMeshBoundingBox} from '@loaders.gl/schema';
|
|
1
|
+
import { getMeshBoundingBox } from '@loaders.gl/schema';
|
|
2
2
|
import Martini from '@mapbox/martini';
|
|
3
3
|
import Delatin from './delatin';
|
|
4
|
-
import {addSkirt} from './helpers/skirt';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const r = imageData[k + 0];
|
|
17
|
-
const g = imageData[k + 1];
|
|
18
|
-
const b = imageData[k + 2];
|
|
19
|
-
terrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if (tesselator === 'martini') {
|
|
24
|
-
// backfill bottom border
|
|
25
|
-
for (let i = (width + 1) * width, x = 0; x < width; x++, i++) {
|
|
26
|
-
terrain[i] = terrain[i - width - 1];
|
|
27
|
-
}
|
|
28
|
-
// backfill right border
|
|
29
|
-
for (let i = height, y = 0; y < height + 1; y++, i += height + 1) {
|
|
30
|
-
terrain[i] = terrain[i - 1];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return terrain;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function getMeshAttributes(vertices, terrain, width, height, bounds) {
|
|
38
|
-
const gridSize = width + 1;
|
|
39
|
-
const numOfVerticies = vertices.length / 2;
|
|
40
|
-
// vec3. x, y in pixels, z in meters
|
|
41
|
-
const positions = new Float32Array(numOfVerticies * 3);
|
|
42
|
-
// vec2. 1 to 1 relationship with position. represents the uv on the texture image. 0,0 to 1,1.
|
|
43
|
-
const texCoords = new Float32Array(numOfVerticies * 2);
|
|
44
|
-
|
|
45
|
-
const [minX, minY, maxX, maxY] = bounds || [0, 0, width, height];
|
|
46
|
-
const xScale = (maxX - minX) / width;
|
|
47
|
-
const yScale = (maxY - minY) / height;
|
|
48
|
-
|
|
49
|
-
for (let i = 0; i < numOfVerticies; i++) {
|
|
50
|
-
const x = vertices[i * 2];
|
|
51
|
-
const y = vertices[i * 2 + 1];
|
|
52
|
-
const pixelIdx = y * gridSize + x;
|
|
53
|
-
|
|
54
|
-
positions[3 * i + 0] = x * xScale + minX;
|
|
55
|
-
positions[3 * i + 1] = -y * yScale + maxY;
|
|
56
|
-
positions[3 * i + 2] = terrain[pixelIdx];
|
|
57
|
-
|
|
58
|
-
texCoords[2 * i + 0] = x / width;
|
|
59
|
-
texCoords[2 * i + 1] = y / height;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
POSITION: {value: positions, size: 3},
|
|
64
|
-
TEXCOORD_0: {value: texCoords, size: 2}
|
|
65
|
-
// NORMAL: {}, - optional, but creates the high poly look with lighting
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Returns generated mesh object from image data
|
|
71
|
-
*
|
|
72
|
-
* @param {object} terrainImage terrain image data
|
|
73
|
-
* @param {object} terrainOptions terrain options
|
|
74
|
-
* @returns mesh object
|
|
75
|
-
*/
|
|
76
|
-
function getMesh(terrainImage, terrainOptions) {
|
|
77
|
-
if (terrainImage === null) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
const {meshMaxError, bounds, elevationDecoder} = terrainOptions;
|
|
81
|
-
|
|
82
|
-
const {data, width, height} = terrainImage;
|
|
83
|
-
|
|
4
|
+
import { addSkirt } from './helpers/skirt';
|
|
5
|
+
export function makeTerrainMeshFromImage(terrainImage, terrainOptions) {
|
|
6
|
+
const {
|
|
7
|
+
meshMaxError,
|
|
8
|
+
bounds,
|
|
9
|
+
elevationDecoder
|
|
10
|
+
} = terrainOptions;
|
|
11
|
+
const {
|
|
12
|
+
data,
|
|
13
|
+
width,
|
|
14
|
+
height
|
|
15
|
+
} = terrainImage;
|
|
84
16
|
let terrain;
|
|
85
17
|
let mesh;
|
|
86
18
|
switch (terrainOptions.tesselator) {
|
|
@@ -92,9 +24,8 @@ function getMesh(terrainImage, terrainOptions) {
|
|
|
92
24
|
terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);
|
|
93
25
|
mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);
|
|
94
26
|
break;
|
|
95
|
-
// auto
|
|
96
27
|
default:
|
|
97
|
-
if (width === height && !(height &
|
|
28
|
+
if (width === height && !(height & width - 1)) {
|
|
98
29
|
terrain = getTerrain(data, width, height, elevationDecoder, 'martini');
|
|
99
30
|
mesh = getMartiniTileMesh(meshMaxError, width, terrain);
|
|
100
31
|
} else {
|
|
@@ -103,26 +34,23 @@ function getMesh(terrainImage, terrainOptions) {
|
|
|
103
34
|
}
|
|
104
35
|
break;
|
|
105
36
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
37
|
+
const {
|
|
38
|
+
vertices
|
|
39
|
+
} = mesh;
|
|
40
|
+
let {
|
|
41
|
+
triangles
|
|
42
|
+
} = mesh;
|
|
109
43
|
let attributes = getMeshAttributes(vertices, terrain, width, height, bounds);
|
|
110
|
-
|
|
111
|
-
// Compute bounding box before adding skirt so that z values are not skewed
|
|
112
44
|
const boundingBox = getMeshBoundingBox(attributes);
|
|
113
|
-
|
|
114
45
|
if (terrainOptions.skirtHeight) {
|
|
115
|
-
const {
|
|
116
|
-
attributes,
|
|
117
|
-
triangles
|
|
118
|
-
|
|
119
|
-
);
|
|
46
|
+
const {
|
|
47
|
+
attributes: newAttributes,
|
|
48
|
+
triangles: newTriangles
|
|
49
|
+
} = addSkirt(attributes, triangles, terrainOptions.skirtHeight);
|
|
120
50
|
attributes = newAttributes;
|
|
121
51
|
triangles = newTriangles;
|
|
122
52
|
}
|
|
123
|
-
|
|
124
53
|
return {
|
|
125
|
-
// Data return by this loader implementation
|
|
126
54
|
loaderData: {
|
|
127
55
|
header: {}
|
|
128
56
|
},
|
|
@@ -130,50 +58,94 @@ function getMesh(terrainImage, terrainOptions) {
|
|
|
130
58
|
vertexCount: triangles.length,
|
|
131
59
|
boundingBox
|
|
132
60
|
},
|
|
133
|
-
mode: 4,
|
|
134
|
-
indices: {
|
|
61
|
+
mode: 4,
|
|
62
|
+
indices: {
|
|
63
|
+
value: Uint32Array.from(triangles),
|
|
64
|
+
size: 1
|
|
65
|
+
},
|
|
135
66
|
attributes
|
|
136
67
|
};
|
|
137
68
|
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Get Martini generated vertices and triangles
|
|
141
|
-
*
|
|
142
|
-
* @param {number} meshMaxError threshold for simplifying mesh
|
|
143
|
-
* @param {number} width width of the input data
|
|
144
|
-
* @param {number[] | Float32Array} terrain elevation data
|
|
145
|
-
* @returns {{vertices: Uint16Array, triangles: Uint32Array}} vertices and triangles data
|
|
146
|
-
*/
|
|
147
69
|
function getMartiniTileMesh(meshMaxError, width, terrain) {
|
|
148
70
|
const gridSize = width + 1;
|
|
149
71
|
const martini = new Martini(gridSize);
|
|
150
72
|
const tile = martini.createTile(terrain);
|
|
151
|
-
const {
|
|
152
|
-
|
|
153
|
-
|
|
73
|
+
const {
|
|
74
|
+
vertices,
|
|
75
|
+
triangles
|
|
76
|
+
} = tile.getMesh(meshMaxError);
|
|
77
|
+
return {
|
|
78
|
+
vertices,
|
|
79
|
+
triangles
|
|
80
|
+
};
|
|
154
81
|
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Get Delatin generated vertices and triangles
|
|
158
|
-
*
|
|
159
|
-
* @param {number} meshMaxError threshold for simplifying mesh
|
|
160
|
-
* @param {number} width width of the input data array
|
|
161
|
-
* @param {number} height height of the input data array
|
|
162
|
-
* @param {number[] | Float32Array} terrain elevation data
|
|
163
|
-
* @returns {{vertices: number[], triangles: number[]}} vertices and triangles data
|
|
164
|
-
*/
|
|
165
82
|
function getDelatinTileMesh(meshMaxError, width, height, terrain) {
|
|
166
83
|
const tin = new Delatin(terrain, width + 1, height + 1);
|
|
167
84
|
tin.run(meshMaxError);
|
|
168
|
-
const {
|
|
85
|
+
const {
|
|
86
|
+
coords,
|
|
87
|
+
triangles
|
|
88
|
+
} = tin;
|
|
169
89
|
const vertices = coords;
|
|
170
|
-
return {
|
|
90
|
+
return {
|
|
91
|
+
vertices,
|
|
92
|
+
triangles
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function getTerrain(imageData, width, height, elevationDecoder, tesselator) {
|
|
96
|
+
const {
|
|
97
|
+
rScaler,
|
|
98
|
+
bScaler,
|
|
99
|
+
gScaler,
|
|
100
|
+
offset
|
|
101
|
+
} = elevationDecoder;
|
|
102
|
+
const terrain = new Float32Array((width + 1) * (height + 1));
|
|
103
|
+
for (let i = 0, y = 0; y < height; y++) {
|
|
104
|
+
for (let x = 0; x < width; x++, i++) {
|
|
105
|
+
const k = i * 4;
|
|
106
|
+
const r = imageData[k + 0];
|
|
107
|
+
const g = imageData[k + 1];
|
|
108
|
+
const b = imageData[k + 2];
|
|
109
|
+
terrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (tesselator === 'martini') {
|
|
113
|
+
for (let i = (width + 1) * width, x = 0; x < width; x++, i++) {
|
|
114
|
+
terrain[i] = terrain[i - width - 1];
|
|
115
|
+
}
|
|
116
|
+
for (let i = height, y = 0; y < height + 1; y++, i += height + 1) {
|
|
117
|
+
terrain[i] = terrain[i - 1];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return terrain;
|
|
171
121
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
122
|
+
function getMeshAttributes(vertices, terrain, width, height, bounds) {
|
|
123
|
+
const gridSize = width + 1;
|
|
124
|
+
const numOfVerticies = vertices.length / 2;
|
|
125
|
+
const positions = new Float32Array(numOfVerticies * 3);
|
|
126
|
+
const texCoords = new Float32Array(numOfVerticies * 2);
|
|
127
|
+
const [minX, minY, maxX, maxY] = bounds || [0, 0, width, height];
|
|
128
|
+
const xScale = (maxX - minX) / width;
|
|
129
|
+
const yScale = (maxY - minY) / height;
|
|
130
|
+
for (let i = 0; i < numOfVerticies; i++) {
|
|
131
|
+
const x = vertices[i * 2];
|
|
132
|
+
const y = vertices[i * 2 + 1];
|
|
133
|
+
const pixelIdx = y * gridSize + x;
|
|
134
|
+
positions[3 * i + 0] = x * xScale + minX;
|
|
135
|
+
positions[3 * i + 1] = -y * yScale + maxY;
|
|
136
|
+
positions[3 * i + 2] = terrain[pixelIdx];
|
|
137
|
+
texCoords[2 * i + 0] = x / width;
|
|
138
|
+
texCoords[2 * i + 1] = y / height;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
POSITION: {
|
|
142
|
+
value: positions,
|
|
143
|
+
size: 3
|
|
144
|
+
},
|
|
145
|
+
TEXCOORD_0: {
|
|
146
|
+
value: texCoords,
|
|
147
|
+
size: 2
|
|
148
|
+
}
|
|
149
|
+
};
|
|
179
150
|
}
|
|
151
|
+
//# sourceMappingURL=parse-terrain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-terrain.js","names":["getMeshBoundingBox","Martini","Delatin","addSkirt","makeTerrainMeshFromImage","terrainImage","terrainOptions","meshMaxError","bounds","elevationDecoder","data","width","height","terrain","mesh","tesselator","getTerrain","getMartiniTileMesh","getDelatinTileMesh","vertices","triangles","attributes","getMeshAttributes","boundingBox","skirtHeight","newAttributes","newTriangles","loaderData","header","vertexCount","length","mode","indices","value","Uint32Array","from","size","gridSize","martini","tile","createTile","getMesh","tin","run","coords","imageData","rScaler","bScaler","gScaler","offset","Float32Array","i","y","x","k","r","g","b","numOfVerticies","positions","texCoords","minX","minY","maxX","maxY","xScale","yScale","pixelIdx","POSITION","TEXCOORD_0"],"sources":["../../../src/lib/parse-terrain.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport Martini from '@mapbox/martini';\nimport Delatin from './delatin';\nimport {addSkirt} from './helpers/skirt';\n\nexport type TerrainOptions = {\n meshMaxError: number;\n bounds: number[];\n elevationDecoder: ElevationDecoder;\n tesselator: 'martini' | 'delatin' | 'auto';\n skirtHeight?: number;\n};\n\ntype TerrainImage = {\n data: Uint8Array;\n width: number;\n height: number;\n};\n\ntype ElevationDecoder = {\n rScaler: any;\n bScaler: any;\n gScaler: any;\n offset: number;\n};\n\n/**\n * Returns generated mesh object from image data\n *\n * @param terrainImage terrain image data\n * @param terrainOptions terrain options\n * @returns mesh object\n */\nexport function makeTerrainMeshFromImage(\n terrainImage: TerrainImage,\n terrainOptions: TerrainOptions\n) {\n const {meshMaxError, bounds, elevationDecoder} = terrainOptions;\n\n const {data, width, height} = terrainImage;\n\n let terrain;\n let mesh;\n switch (terrainOptions.tesselator) {\n case 'martini':\n terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);\n mesh = getMartiniTileMesh(meshMaxError, width, terrain);\n break;\n case 'delatin':\n terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);\n mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);\n break;\n // auto\n default:\n if (width === height && !(height & (width - 1))) {\n terrain = getTerrain(data, width, height, elevationDecoder, 'martini');\n mesh = getMartiniTileMesh(meshMaxError, width, terrain);\n } else {\n terrain = getTerrain(data, width, height, elevationDecoder, 'delatin');\n mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);\n }\n break;\n }\n\n const {vertices} = mesh;\n let {triangles} = mesh;\n let attributes = getMeshAttributes(vertices, terrain, width, height, bounds);\n\n // Compute bounding box before adding skirt so that z values are not skewed\n const boundingBox = getMeshBoundingBox(attributes);\n\n if (terrainOptions.skirtHeight) {\n const {attributes: newAttributes, triangles: newTriangles} = addSkirt(\n attributes,\n triangles,\n terrainOptions.skirtHeight\n );\n attributes = newAttributes;\n triangles = newTriangles;\n }\n\n return {\n // Data return by this loader implementation\n loaderData: {\n header: {}\n },\n header: {\n vertexCount: triangles.length,\n boundingBox\n },\n mode: 4, // TRIANGLES\n indices: {value: Uint32Array.from(triangles), size: 1},\n attributes\n };\n}\n\n/**\n * Get Martini generated vertices and triangles\n *\n * @param {number} meshMaxError threshold for simplifying mesh\n * @param {number} width width of the input data\n * @param {number[] | Float32Array} terrain elevation data\n * @returns {{vertices: Uint16Array, triangles: Uint32Array}} vertices and triangles data\n */\nfunction getMartiniTileMesh(meshMaxError, width, terrain) {\n const gridSize = width + 1;\n const martini = new Martini(gridSize);\n const tile = martini.createTile(terrain);\n const {vertices, triangles} = tile.getMesh(meshMaxError);\n\n return {vertices, triangles};\n}\n\n/**\n * Get Delatin generated vertices and triangles\n *\n * @param {number} meshMaxError threshold for simplifying mesh\n * @param {number} width width of the input data array\n * @param {number} height height of the input data array\n * @param {number[] | Float32Array} terrain elevation data\n * @returns {{vertices: number[], triangles: number[]}} vertices and triangles data\n */\nfunction getDelatinTileMesh(meshMaxError, width, height, terrain) {\n const tin = new Delatin(terrain, width + 1, height + 1);\n tin.run(meshMaxError);\n // @ts-expect-error\n const {coords, triangles} = tin;\n const vertices = coords;\n return {vertices, triangles};\n}\n\nfunction getTerrain(\n imageData: Uint8Array,\n width: number,\n height: number,\n elevationDecoder: ElevationDecoder,\n tesselator: 'martini' | 'delatin'\n) {\n const {rScaler, bScaler, gScaler, offset} = elevationDecoder;\n\n // From Martini demo\n // https://observablehq.com/@mourner/martin-real-time-rtin-terrain-mesh\n const terrain = new Float32Array((width + 1) * (height + 1));\n // decode terrain values\n for (let i = 0, y = 0; y < height; y++) {\n for (let x = 0; x < width; x++, i++) {\n const k = i * 4;\n const r = imageData[k + 0];\n const g = imageData[k + 1];\n const b = imageData[k + 2];\n terrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;\n }\n }\n\n if (tesselator === 'martini') {\n // backfill bottom border\n for (let i = (width + 1) * width, x = 0; x < width; x++, i++) {\n terrain[i] = terrain[i - width - 1];\n }\n // backfill right border\n for (let i = height, y = 0; y < height + 1; y++, i += height + 1) {\n terrain[i] = terrain[i - 1];\n }\n }\n\n return terrain;\n}\n\nfunction getMeshAttributes(\n vertices,\n terrain: Uint8Array,\n width: number,\n height: number,\n bounds: number[]\n) {\n const gridSize = width + 1;\n const numOfVerticies = vertices.length / 2;\n // vec3. x, y in pixels, z in meters\n const positions = new Float32Array(numOfVerticies * 3);\n // vec2. 1 to 1 relationship with position. represents the uv on the texture image. 0,0 to 1,1.\n const texCoords = new Float32Array(numOfVerticies * 2);\n\n const [minX, minY, maxX, maxY] = bounds || [0, 0, width, height];\n const xScale = (maxX - minX) / width;\n const yScale = (maxY - minY) / height;\n\n for (let i = 0; i < numOfVerticies; i++) {\n const x = vertices[i * 2];\n const y = vertices[i * 2 + 1];\n const pixelIdx = y * gridSize + x;\n\n positions[3 * i + 0] = x * xScale + minX;\n positions[3 * i + 1] = -y * yScale + maxY;\n positions[3 * i + 2] = terrain[pixelIdx];\n\n texCoords[2 * i + 0] = x / width;\n texCoords[2 * i + 1] = y / height;\n }\n\n return {\n POSITION: {value: positions, size: 3},\n TEXCOORD_0: {value: texCoords, size: 2}\n // NORMAL: {}, - optional, but creates the high poly look with lighting\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","names":["VERSION"],"sources":["../../../../src/lib/utils/version.ts"],"sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { VERSION } from './lib/utils/version';
|
|
2
|
+
export const QuantizedMeshLoader = {
|
|
3
|
+
name: 'Quantized Mesh',
|
|
4
|
+
id: 'quantized-mesh',
|
|
5
|
+
module: 'terrain',
|
|
6
|
+
version: VERSION,
|
|
7
|
+
worker: true,
|
|
8
|
+
extensions: ['terrain'],
|
|
9
|
+
mimeTypes: ['application/vnd.quantized-mesh'],
|
|
10
|
+
options: {
|
|
11
|
+
'quantized-mesh': {
|
|
12
|
+
bounds: [0, 0, 1, 1],
|
|
13
|
+
skirtHeight: null
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=quantized-mesh-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quantized-mesh-loader.js","names":["VERSION","QuantizedMeshLoader","name","id","module","version","worker","extensions","mimeTypes","options","bounds","skirtHeight"],"sources":["../../src/quantized-mesh-loader.ts"],"sourcesContent":["import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\n\nexport type QuantizedMeshLoaderOptions = LoaderOptions & {\n 'quantized-mesh'?: {\n bounds?: [number, number, number, number];\n skirtHeight?: number | null;\n };\n};\n\n/**\n * Worker loader for quantized meshes\n */\nexport const QuantizedMeshLoader: Loader<any, never, QuantizedMeshLoaderOptions> = {\n name: 'Quantized Mesh',\n id: 'quantized-mesh',\n module: 'terrain',\n version: VERSION,\n worker: true,\n extensions: ['terrain'],\n mimeTypes: ['application/vnd.quantized-mesh'],\n options: {\n 'quantized-mesh': {\n bounds: [0, 0, 1, 1],\n skirtHeight: null\n }\n }\n};\n"],"mappings":"AACA,SAAQA,OAAO,QAAO,qBAAqB;AAY3C,OAAO,MAAMC,mBAAmE,GAAG;EACjFC,IAAI,EAAE,gBAAgB;EACtBC,EAAE,EAAE,gBAAgB;EACpBC,MAAM,EAAE,SAAS;EACjBC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,SAAS,CAAC;EACvBC,SAAS,EAAE,CAAC,gCAAgC,CAAC;EAC7CC,OAAO,EAAE;IACP,gBAAgB,EAAE;MAChBC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACpBC,WAAW,EAAE;IACf;EACF;AACF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { VERSION } from './lib/utils/version';
|
|
2
|
+
export const TerrainLoader = {
|
|
3
|
+
name: 'Terrain',
|
|
4
|
+
id: 'terrain',
|
|
5
|
+
module: 'terrain',
|
|
6
|
+
version: VERSION,
|
|
7
|
+
worker: true,
|
|
8
|
+
extensions: ['png', 'pngraw', 'jpg', 'jpeg', 'gif', 'webp', 'bmp'],
|
|
9
|
+
mimeTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp'],
|
|
10
|
+
options: {
|
|
11
|
+
terrain: {
|
|
12
|
+
tesselator: 'auto',
|
|
13
|
+
bounds: undefined,
|
|
14
|
+
meshMaxError: 10,
|
|
15
|
+
elevationDecoder: {
|
|
16
|
+
rScaler: 1,
|
|
17
|
+
gScaler: 0,
|
|
18
|
+
bScaler: 0,
|
|
19
|
+
offset: 0
|
|
20
|
+
},
|
|
21
|
+
skirtHeight: undefined
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=terrain-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terrain-loader.js","names":["VERSION","TerrainLoader","name","id","module","version","worker","extensions","mimeTypes","options","terrain","tesselator","bounds","undefined","meshMaxError","elevationDecoder","rScaler","gScaler","bScaler","offset","skirtHeight"],"sources":["../../src/terrain-loader.ts"],"sourcesContent":["import type {Loader} from '@loaders.gl/loader-utils';\nimport type {ImageLoaderOptions} from '@loaders.gl/images';\nimport {VERSION} from './lib/utils/version';\n\nimport {TerrainOptions} from './lib/parse-terrain';\nimport {Mesh} from '@loaders.gl/schema';\n\nexport type TerrainLoaderOptions = ImageLoaderOptions & {\n terrain?: TerrainOptions;\n};\n\n/**\n * Worker loader for image encoded terrain\n */\nexport const TerrainLoader: Loader<Mesh, never, TerrainLoaderOptions> = {\n name: 'Terrain',\n id: 'terrain',\n module: 'terrain',\n version: VERSION,\n worker: true,\n extensions: ['png', 'pngraw', 'jpg', 'jpeg', 'gif', 'webp', 'bmp'],\n mimeTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp'],\n options: {\n terrain: {\n tesselator: 'auto',\n bounds: undefined!,\n meshMaxError: 10,\n elevationDecoder: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n },\n skirtHeight: undefined\n }\n }\n};\n"],"mappings":"AAEA,SAAQA,OAAO,QAAO,qBAAqB;AAY3C,OAAO,MAAMC,aAAwD,GAAG;EACtEC,IAAI,EAAE,SAAS;EACfC,EAAE,EAAE,SAAS;EACbC,MAAM,EAAE,SAAS;EACjBC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;EAClEC,SAAS,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC;EAC9EC,OAAO,EAAE;IACPC,OAAO,EAAE;MACPC,UAAU,EAAE,MAAM;MAClBC,MAAM,EAAEC,SAAU;MAClBC,YAAY,EAAE,EAAE;MAChBC,gBAAgB,EAAE;QAChBC,OAAO,EAAE,CAAC;QACVC,OAAO,EAAE,CAAC;QACVC,OAAO,EAAE,CAAC;QACVC,MAAM,EAAE;MACV,CAAC;MACDC,WAAW,EAAEP;IACf;EACF;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quantized-mesh-worker.js","names":["createLoaderWorker","QuantizedMeshLoader"],"sources":["../../../src/workers/quantized-mesh-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {QuantizedMeshLoader} from '../index';\n\ncreateLoaderWorker(QuantizedMeshLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAC3D,SAAQC,mBAAmB,QAAO,UAAU;AAE5CD,kBAAkB,CAACC,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terrain-worker.js","names":["createLoaderWorker","TerrainLoader"],"sources":["../../../src/workers/terrain-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {TerrainLoader} from '../index';\n\ncreateLoaderWorker(TerrainLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAC3D,SAAQC,aAAa,QAAO,UAAU;AAEtCD,kBAAkB,CAACC,aAAa,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { LoaderContext, LoaderWithParser } from '@loaders.gl/loader-utils';
|
|
2
|
+
import { TerrainLoader as TerrainWorkerLoader, TerrainLoaderOptions } from './terrain-loader';
|
|
3
|
+
import { QuantizedMeshLoader as QuantizedMeshWorkerLoader, QuantizedMeshLoaderOptions } from './quantized-mesh-loader';
|
|
4
|
+
export { TerrainWorkerLoader };
|
|
5
|
+
export declare const TerrainLoader: LoaderWithParser<any, never, TerrainLoaderOptions>;
|
|
6
|
+
export declare function parseTerrain(arrayBuffer: ArrayBuffer, options?: TerrainLoaderOptions, context?: LoaderContext): Promise<{
|
|
7
|
+
loaderData: {
|
|
8
|
+
header: {};
|
|
9
|
+
};
|
|
10
|
+
header: {
|
|
11
|
+
vertexCount: any;
|
|
12
|
+
boundingBox: [[number, number, number], [number, number, number]];
|
|
13
|
+
};
|
|
14
|
+
mode: number;
|
|
15
|
+
indices: {
|
|
16
|
+
value: Uint32Array;
|
|
17
|
+
size: number;
|
|
18
|
+
};
|
|
19
|
+
attributes: {
|
|
20
|
+
POSITION: {
|
|
21
|
+
value: Float32Array;
|
|
22
|
+
size: number;
|
|
23
|
+
};
|
|
24
|
+
TEXCOORD_0: {
|
|
25
|
+
value: Float32Array;
|
|
26
|
+
size: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}>;
|
|
30
|
+
export { QuantizedMeshWorkerLoader };
|
|
31
|
+
/**
|
|
32
|
+
* Loader for quantized meshes
|
|
33
|
+
*/
|
|
34
|
+
export declare const QuantizedMeshLoader: LoaderWithParser<any, never, QuantizedMeshLoaderOptions>;
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAI9E,OAAO,EAAC,aAAa,IAAI,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EACL,mBAAmB,IAAI,yBAAyB,EAChD,0BAA0B,EAC3B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAC,mBAAmB,EAAC,CAAC;AAE7B,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,oBAAoB,CAG5E,CAAC;AAEF,wBAAsB,YAAY,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;GAWxB;AAID,OAAO,EAAC,yBAAyB,EAAC,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,0BAA0B,CAKxF,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuantizedMeshLoader = exports.QuantizedMeshWorkerLoader = exports.parseTerrain = exports.TerrainLoader = exports.TerrainWorkerLoader = void 0;
|
|
4
|
+
const parse_quantized_mesh_1 = require("./lib/parse-quantized-mesh");
|
|
5
|
+
const parse_terrain_1 = require("./lib/parse-terrain");
|
|
6
|
+
const terrain_loader_1 = require("./terrain-loader");
|
|
7
|
+
Object.defineProperty(exports, "TerrainWorkerLoader", { enumerable: true, get: function () { return terrain_loader_1.TerrainLoader; } });
|
|
8
|
+
const quantized_mesh_loader_1 = require("./quantized-mesh-loader");
|
|
9
|
+
Object.defineProperty(exports, "QuantizedMeshWorkerLoader", { enumerable: true, get: function () { return quantized_mesh_loader_1.QuantizedMeshLoader; } });
|
|
10
|
+
exports.TerrainLoader = {
|
|
11
|
+
...terrain_loader_1.TerrainLoader,
|
|
12
|
+
parse: parseTerrain
|
|
8
13
|
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
async function parseTerrain(arrayBuffer, options, context) {
|
|
15
|
+
const loadImageOptions = {
|
|
16
|
+
...options,
|
|
17
|
+
mimeType: 'application/x.image',
|
|
18
|
+
image: { ...options?.image, type: 'data' }
|
|
19
|
+
};
|
|
20
|
+
const image = await context?.parse(arrayBuffer, loadImageOptions);
|
|
21
|
+
// Extend function to support additional mesh generation options (square grid or delatin)
|
|
22
|
+
const terrainOptions = { ...exports.TerrainLoader.options.terrain, ...options?.terrain };
|
|
23
|
+
return (0, parse_terrain_1.makeTerrainMeshFromImage)(image, terrainOptions);
|
|
24
|
+
}
|
|
25
|
+
exports.parseTerrain = parseTerrain;
|
|
26
|
+
/**
|
|
27
|
+
* Loader for quantized meshes
|
|
28
|
+
*/
|
|
29
|
+
exports.QuantizedMeshLoader = {
|
|
30
|
+
...quantized_mesh_loader_1.QuantizedMeshLoader,
|
|
31
|
+
parseSync: (arrayBuffer, options) => (0, parse_quantized_mesh_1.parseQuantizedMesh)(arrayBuffer, options?.['quantized-mesh']),
|
|
32
|
+
parse: async (arrayBuffer, options) => (0, parse_quantized_mesh_1.parseQuantizedMesh)(arrayBuffer, options?.['quantized-mesh'])
|
|
14
33
|
};
|
|
15
|
-
export const _typecheckQuantizedMeshLoader = QuantizedMeshLoader;
|
|
16
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
type Extensions = {
|
|
2
|
+
vertexNormals?: any;
|
|
3
|
+
waterMask?: any;
|
|
4
|
+
};
|
|
5
|
+
export declare const DECODING_STEPS: {
|
|
6
|
+
header: number;
|
|
7
|
+
vertices: number;
|
|
8
|
+
triangleIndices: number;
|
|
9
|
+
edgeIndices: number;
|
|
10
|
+
extensions: number;
|
|
11
|
+
};
|
|
12
|
+
export default function decode(data: any, userOptions: any): {
|
|
13
|
+
header: {};
|
|
14
|
+
vertexData?: undefined;
|
|
15
|
+
triangleIndices?: undefined;
|
|
16
|
+
westIndices?: undefined;
|
|
17
|
+
northIndices?: undefined;
|
|
18
|
+
eastIndices?: undefined;
|
|
19
|
+
southIndices?: undefined;
|
|
20
|
+
extensions?: undefined;
|
|
21
|
+
} | {
|
|
22
|
+
header: {};
|
|
23
|
+
vertexData: Uint16Array;
|
|
24
|
+
triangleIndices?: undefined;
|
|
25
|
+
westIndices?: undefined;
|
|
26
|
+
northIndices?: undefined;
|
|
27
|
+
eastIndices?: undefined;
|
|
28
|
+
southIndices?: undefined;
|
|
29
|
+
extensions?: undefined;
|
|
30
|
+
} | {
|
|
31
|
+
header: {};
|
|
32
|
+
vertexData: Uint16Array;
|
|
33
|
+
triangleIndices: any;
|
|
34
|
+
westIndices?: undefined;
|
|
35
|
+
northIndices?: undefined;
|
|
36
|
+
eastIndices?: undefined;
|
|
37
|
+
southIndices?: undefined;
|
|
38
|
+
extensions?: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
header: {};
|
|
41
|
+
vertexData: Uint16Array;
|
|
42
|
+
triangleIndices: any;
|
|
43
|
+
westIndices: any;
|
|
44
|
+
northIndices: any;
|
|
45
|
+
eastIndices: any;
|
|
46
|
+
southIndices: any;
|
|
47
|
+
extensions?: undefined;
|
|
48
|
+
} | {
|
|
49
|
+
header: {};
|
|
50
|
+
vertexData: Uint16Array;
|
|
51
|
+
triangleIndices: any;
|
|
52
|
+
westIndices: any;
|
|
53
|
+
northIndices: any;
|
|
54
|
+
eastIndices: any;
|
|
55
|
+
southIndices: any;
|
|
56
|
+
extensions: Extensions;
|
|
57
|
+
};
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=decode-quantized-mesh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode-quantized-mesh.d.ts","sourceRoot":"","sources":["../../src/lib/decode-quantized-mesh.ts"],"names":[],"mappings":"AAuNA,KAAK,UAAU,GAAG;IAChB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB,CAAC;AA0CF,eAAO,MAAM,cAAc;;;;;;CAM1B,CAAC;AAMF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,KAAA,EAAE,WAAW,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoD/C"}
|