@loaders.gl/terrain 3.1.0-alpha.3 → 3.1.0-beta.2

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.
Files changed (111) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +1180 -4
  4. package/dist/es5/bundle.js +7 -0
  5. package/dist/es5/bundle.js.map +1 -0
  6. package/dist/es5/index.js +43 -0
  7. package/dist/es5/index.js.map +1 -0
  8. package/dist/es5/lib/decode-quantized-mesh.js +277 -0
  9. package/dist/es5/lib/decode-quantized-mesh.js.map +1 -0
  10. package/dist/es5/lib/delatin/index.js +473 -0
  11. package/dist/es5/lib/delatin/index.js.map +1 -0
  12. package/dist/es5/lib/helpers/skirt.js +107 -0
  13. package/dist/es5/lib/helpers/skirt.js.map +1 -0
  14. package/dist/es5/lib/parse-quantized-mesh.js +109 -0
  15. package/dist/es5/lib/parse-quantized-mesh.js.map +1 -0
  16. package/dist/es5/lib/parse-terrain.js +192 -0
  17. package/dist/es5/lib/parse-terrain.js.map +1 -0
  18. package/dist/es5/lib/utils/version.js +9 -0
  19. package/dist/es5/lib/utils/version.js.map +1 -0
  20. package/dist/es5/quantized-mesh-loader.js +28 -0
  21. package/dist/es5/quantized-mesh-loader.js.map +1 -0
  22. package/dist/es5/terrain-loader.js +36 -0
  23. package/dist/es5/terrain-loader.js.map +1 -0
  24. package/dist/es5/workers/quantized-mesh-worker.js +8 -0
  25. package/dist/es5/workers/quantized-mesh-worker.js.map +1 -0
  26. package/dist/es5/workers/terrain-worker.js +8 -0
  27. package/dist/es5/workers/terrain-worker.js.map +1 -0
  28. package/dist/esm/bundle.js +5 -0
  29. package/dist/esm/bundle.js.map +1 -0
  30. package/dist/esm/index.js +16 -0
  31. package/dist/esm/index.js.map +1 -0
  32. package/dist/esm/lib/decode-quantized-mesh.js +268 -0
  33. package/dist/esm/lib/decode-quantized-mesh.js.map +1 -0
  34. package/dist/esm/lib/delatin/index.js +464 -0
  35. package/dist/esm/lib/delatin/index.js.map +1 -0
  36. package/dist/esm/lib/helpers/skirt.js +99 -0
  37. package/dist/esm/lib/helpers/skirt.js.map +1 -0
  38. package/dist/esm/lib/parse-quantized-mesh.js +96 -0
  39. package/dist/esm/lib/parse-quantized-mesh.js.map +1 -0
  40. package/dist/esm/lib/parse-terrain.js +180 -0
  41. package/dist/esm/lib/parse-terrain.js.map +1 -0
  42. package/dist/esm/lib/utils/version.js +2 -0
  43. package/dist/esm/lib/utils/version.js.map +1 -0
  44. package/dist/esm/quantized-mesh-loader.js +18 -0
  45. package/dist/esm/quantized-mesh-loader.js.map +1 -0
  46. package/dist/esm/terrain-loader.js +26 -0
  47. package/dist/esm/terrain-loader.js.map +1 -0
  48. package/dist/esm/workers/quantized-mesh-worker.js +4 -0
  49. package/dist/esm/workers/quantized-mesh-worker.js.map +1 -0
  50. package/dist/esm/workers/terrain-worker.js +4 -0
  51. package/dist/esm/workers/terrain-worker.js.map +1 -0
  52. package/dist/index.d.ts +77 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +24 -14
  55. package/dist/lib/decode-quantized-mesh.d.ts +59 -0
  56. package/dist/lib/decode-quantized-mesh.d.ts.map +1 -0
  57. package/dist/lib/decode-quantized-mesh.js +200 -241
  58. package/dist/lib/delatin/index.d.ts +24 -0
  59. package/dist/lib/delatin/index.d.ts.map +1 -0
  60. package/dist/lib/delatin/index.js +397 -443
  61. package/dist/lib/helpers/skirt.d.ts +19 -0
  62. package/dist/lib/helpers/skirt.d.ts.map +1 -0
  63. package/dist/lib/helpers/skirt.js +119 -91
  64. package/dist/lib/parse-quantized-mesh.d.ts +25 -0
  65. package/dist/lib/parse-quantized-mesh.d.ts.map +1 -0
  66. package/dist/lib/parse-quantized-mesh.js +89 -90
  67. package/dist/lib/parse-terrain.d.ts +25 -0
  68. package/dist/lib/parse-terrain.d.ts.map +1 -0
  69. package/dist/lib/parse-terrain.js +148 -166
  70. package/dist/lib/utils/version.d.ts +2 -0
  71. package/dist/lib/utils/version.d.ts.map +1 -0
  72. package/dist/lib/utils/version.js +7 -2
  73. package/dist/quantized-mesh-loader.d.ts +21 -0
  74. package/dist/quantized-mesh-loader.d.ts.map +1 -0
  75. package/dist/quantized-mesh-loader.js +21 -16
  76. package/dist/quantized-mesh-worker.js +1218 -2
  77. package/dist/terrain-loader.d.ts +32 -0
  78. package/dist/terrain-loader.d.ts.map +1 -0
  79. package/dist/terrain-loader.js +32 -24
  80. package/dist/terrain-worker.js +1218 -2
  81. package/dist/workers/quantized-mesh-worker.d.ts +2 -0
  82. package/dist/workers/quantized-mesh-worker.d.ts.map +1 -0
  83. package/dist/workers/quantized-mesh-worker.js +5 -4
  84. package/dist/workers/terrain-worker.d.ts +2 -0
  85. package/dist/workers/terrain-worker.d.ts.map +1 -0
  86. package/dist/workers/terrain-worker.js +5 -4
  87. package/package.json +10 -10
  88. package/src/lib/{decode-quantized-mesh.js → decode-quantized-mesh.ts} +6 -1
  89. package/src/lib/delatin/{index.js → index.ts} +2 -0
  90. package/src/lib/helpers/{skirt.js → skirt.ts} +14 -7
  91. package/src/lib/{parse-quantized-mesh.js → parse-quantized-mesh.ts} +0 -0
  92. package/src/lib/{parse-terrain.js → parse-terrain.ts} +37 -3
  93. package/src/lib/utils/{version.js → version.ts} +0 -0
  94. package/src/workers/quantized-mesh-worker.js +0 -1
  95. package/src/workers/quantized-mesh-worker.ts +4 -0
  96. package/src/workers/terrain-worker.js +0 -1
  97. package/src/workers/terrain-worker.ts +4 -0
  98. package/dist/bundle.js.map +0 -1
  99. package/dist/dist.min.js +0 -2
  100. package/dist/dist.min.js.map +0 -1
  101. package/dist/index.js.map +0 -1
  102. package/dist/lib/decode-quantized-mesh.js.map +0 -1
  103. package/dist/lib/delatin/index.js.map +0 -1
  104. package/dist/lib/helpers/skirt.js.map +0 -1
  105. package/dist/lib/parse-quantized-mesh.js.map +0 -1
  106. package/dist/lib/parse-terrain.js.map +0 -1
  107. package/dist/lib/utils/version.js.map +0 -1
  108. package/dist/quantized-mesh-loader.js.map +0 -1
  109. package/dist/quantized-mesh-worker.js.map +0 -1
  110. package/dist/terrain-loader.js.map +0 -1
  111. package/dist/terrain-worker.js.map +0 -1
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = loadQuantizedMesh;
7
+
8
+ var _schema = require("@loaders.gl/schema");
9
+
10
+ var _decodeQuantizedMesh = _interopRequireWildcard(require("./decode-quantized-mesh"));
11
+
12
+ var _skirt = require("./helpers/skirt");
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ function getMeshAttributes(vertexData, header, bounds) {
19
+ const {
20
+ minHeight,
21
+ maxHeight
22
+ } = header;
23
+ const [minX, minY, maxX, maxY] = bounds || [0, 0, 1, 1];
24
+ const xScale = maxX - minX;
25
+ const yScale = maxY - minY;
26
+ const zScale = maxHeight - minHeight;
27
+ const nCoords = vertexData.length / 3;
28
+ const positions = new Float32Array(nCoords * 3);
29
+ const texCoords = new Float32Array(nCoords * 2);
30
+
31
+ for (let i = 0; i < nCoords; i++) {
32
+ const x = vertexData[i] / 32767;
33
+ const y = vertexData[i + nCoords] / 32767;
34
+ const z = vertexData[i + nCoords * 2] / 32767;
35
+ positions[3 * i + 0] = x * xScale + minX;
36
+ positions[3 * i + 1] = y * yScale + minY;
37
+ positions[3 * i + 2] = z * zScale + minHeight;
38
+ texCoords[2 * i + 0] = x;
39
+ texCoords[2 * i + 1] = y;
40
+ }
41
+
42
+ return {
43
+ POSITION: {
44
+ value: positions,
45
+ size: 3
46
+ },
47
+ TEXCOORD_0: {
48
+ value: texCoords,
49
+ size: 2
50
+ }
51
+ };
52
+ }
53
+
54
+ function getTileMesh(arrayBuffer, options) {
55
+ if (!arrayBuffer) {
56
+ return null;
57
+ }
58
+
59
+ const {
60
+ bounds
61
+ } = options;
62
+ const {
63
+ header,
64
+ vertexData,
65
+ triangleIndices: originalTriangleIndices,
66
+ westIndices,
67
+ northIndices,
68
+ eastIndices,
69
+ southIndices
70
+ } = (0, _decodeQuantizedMesh.default)(arrayBuffer, _decodeQuantizedMesh.DECODING_STEPS.triangleIndices);
71
+ let triangleIndices = originalTriangleIndices;
72
+ let attributes = getMeshAttributes(vertexData, header, bounds);
73
+ const boundingBox = (0, _schema.getMeshBoundingBox)(attributes);
74
+
75
+ if (options.skirtHeight) {
76
+ const {
77
+ attributes: newAttributes,
78
+ triangles: newTriangles
79
+ } = (0, _skirt.addSkirt)(attributes, triangleIndices, options.skirtHeight, {
80
+ westIndices,
81
+ northIndices,
82
+ eastIndices,
83
+ southIndices
84
+ });
85
+ attributes = newAttributes;
86
+ triangleIndices = newTriangles;
87
+ }
88
+
89
+ return {
90
+ loaderData: {
91
+ header: {}
92
+ },
93
+ header: {
94
+ vertexCount: triangleIndices.length,
95
+ boundingBox
96
+ },
97
+ mode: 4,
98
+ indices: {
99
+ value: triangleIndices,
100
+ size: 1
101
+ },
102
+ attributes
103
+ };
104
+ }
105
+
106
+ function loadQuantizedMesh(arrayBuffer, options) {
107
+ return getTileMesh(arrayBuffer, options['quantized-mesh']);
108
+ }
109
+ //# sourceMappingURL=parse-quantized-mesh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/parse-quantized-mesh.ts"],"names":["getMeshAttributes","vertexData","header","bounds","minHeight","maxHeight","minX","minY","maxX","maxY","xScale","yScale","zScale","nCoords","length","positions","Float32Array","texCoords","i","x","y","z","POSITION","value","size","TEXCOORD_0","getTileMesh","arrayBuffer","options","triangleIndices","originalTriangleIndices","westIndices","northIndices","eastIndices","southIndices","DECODING_STEPS","attributes","boundingBox","skirtHeight","newAttributes","triangles","newTriangles","loaderData","vertexCount","mode","indices","loadQuantizedMesh"],"mappings":"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","sourcesContent":["import {getMeshBoundingBox} from '@loaders.gl/schema';\nimport decode, {DECODING_STEPS} from './decode-quantized-mesh';\nimport {addSkirt} from './helpers/skirt';\n\nfunction getMeshAttributes(vertexData, header, bounds) {\n const {minHeight, maxHeight} = header;\n const [minX, minY, maxX, maxY] = bounds || [0, 0, 1, 1];\n const xScale = maxX - minX;\n const yScale = maxY - minY;\n const zScale = maxHeight - minHeight;\n\n const nCoords = vertexData.length / 3;\n // vec3. x, y defined by bounds, z in meters\n const positions = new Float32Array(nCoords * 3);\n\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(nCoords * 2);\n\n // Data is not interleaved; all u, then all v, then all heights\n for (let i = 0; i < nCoords; i++) {\n const x = vertexData[i] / 32767;\n const y = vertexData[i + nCoords] / 32767;\n const z = vertexData[i + nCoords * 2] / 32767;\n\n positions[3 * i + 0] = x * xScale + minX;\n positions[3 * i + 1] = y * yScale + minY;\n positions[3 * i + 2] = z * zScale + minHeight;\n\n texCoords[2 * i + 0] = x;\n texCoords[2 * i + 1] = y;\n }\n\n return {\n POSITION: {value: positions, size: 3},\n TEXCOORD_0: {value: texCoords, size: 2}\n // TODO: Parse normals if they exist in the file\n // NORMAL: {}, - optional, but creates the high poly look with lighting\n };\n}\n\nfunction getTileMesh(arrayBuffer, options) {\n if (!arrayBuffer) {\n return null;\n }\n const {bounds} = options;\n // Don't parse edge indices or format extensions\n const {\n header,\n vertexData,\n triangleIndices: originalTriangleIndices,\n westIndices,\n northIndices,\n eastIndices,\n southIndices\n } = decode(arrayBuffer, DECODING_STEPS.triangleIndices);\n let triangleIndices = originalTriangleIndices;\n let attributes = getMeshAttributes(vertexData, header, bounds);\n\n // Compute bounding box before adding skirt so that z values are not skewed\n // TODO: Find bounding box from header, instead of doing extra pass over\n // vertices.\n const boundingBox = getMeshBoundingBox(attributes);\n\n if (options.skirtHeight) {\n const {attributes: newAttributes, triangles: newTriangles} = addSkirt(\n attributes,\n triangleIndices,\n options.skirtHeight,\n {\n westIndices,\n northIndices,\n eastIndices,\n southIndices\n }\n );\n attributes = newAttributes;\n triangleIndices = newTriangles;\n }\n\n return {\n // Data return by this loader implementation\n loaderData: {\n header: {}\n },\n header: {\n // @ts-ignore\n vertexCount: triangleIndices.length,\n boundingBox\n },\n mode: 4, // TRIANGLES\n indices: {value: triangleIndices, size: 1},\n attributes\n };\n}\n\nexport default function loadQuantizedMesh(arrayBuffer, options) {\n return getTileMesh(arrayBuffer, options['quantized-mesh']);\n}\n"],"file":"parse-quantized-mesh.js"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = loadTerrain;
9
+
10
+ var _schema = require("@loaders.gl/schema");
11
+
12
+ var _martini = _interopRequireDefault(require("@mapbox/martini"));
13
+
14
+ var _delatin = _interopRequireDefault(require("./delatin"));
15
+
16
+ var _skirt = require("./helpers/skirt");
17
+
18
+ function getTerrain(imageData, width, height, elevationDecoder, tesselator) {
19
+ const {
20
+ rScaler,
21
+ bScaler,
22
+ gScaler,
23
+ offset
24
+ } = elevationDecoder;
25
+ const terrain = new Float32Array((width + 1) * (height + 1));
26
+
27
+ for (let i = 0, y = 0; y < height; y++) {
28
+ for (let x = 0; x < width; x++, i++) {
29
+ const k = i * 4;
30
+ const r = imageData[k + 0];
31
+ const g = imageData[k + 1];
32
+ const b = imageData[k + 2];
33
+ terrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;
34
+ }
35
+ }
36
+
37
+ if (tesselator === 'martini') {
38
+ for (let i = (width + 1) * width, x = 0; x < width; x++, i++) {
39
+ terrain[i] = terrain[i - width - 1];
40
+ }
41
+
42
+ for (let i = height, y = 0; y < height + 1; y++, i += height + 1) {
43
+ terrain[i] = terrain[i - 1];
44
+ }
45
+ }
46
+
47
+ return terrain;
48
+ }
49
+
50
+ function getMeshAttributes(vertices, terrain, width, height, bounds) {
51
+ const gridSize = width + 1;
52
+ const numOfVerticies = vertices.length / 2;
53
+ const positions = new Float32Array(numOfVerticies * 3);
54
+ const texCoords = new Float32Array(numOfVerticies * 2);
55
+ const [minX, minY, maxX, maxY] = bounds || [0, 0, width, height];
56
+ const xScale = (maxX - minX) / width;
57
+ const yScale = (maxY - minY) / height;
58
+
59
+ for (let i = 0; i < numOfVerticies; i++) {
60
+ const x = vertices[i * 2];
61
+ const y = vertices[i * 2 + 1];
62
+ const pixelIdx = y * gridSize + x;
63
+ positions[3 * i + 0] = x * xScale + minX;
64
+ positions[3 * i + 1] = -y * yScale + maxY;
65
+ positions[3 * i + 2] = terrain[pixelIdx];
66
+ texCoords[2 * i + 0] = x / width;
67
+ texCoords[2 * i + 1] = y / height;
68
+ }
69
+
70
+ return {
71
+ POSITION: {
72
+ value: positions,
73
+ size: 3
74
+ },
75
+ TEXCOORD_0: {
76
+ value: texCoords,
77
+ size: 2
78
+ }
79
+ };
80
+ }
81
+
82
+ function getMesh(terrainImage, terrainOptions) {
83
+ if (terrainImage === null) {
84
+ return null;
85
+ }
86
+
87
+ const {
88
+ meshMaxError,
89
+ bounds,
90
+ elevationDecoder
91
+ } = terrainOptions;
92
+ const {
93
+ data,
94
+ width,
95
+ height
96
+ } = terrainImage;
97
+ let terrain;
98
+ let mesh;
99
+
100
+ switch (terrainOptions.tesselator) {
101
+ case 'martini':
102
+ terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);
103
+ mesh = getMartiniTileMesh(meshMaxError, width, terrain);
104
+ break;
105
+
106
+ case 'delatin':
107
+ terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);
108
+ mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);
109
+ break;
110
+
111
+ default:
112
+ if (width === height && !(height & width - 1)) {
113
+ terrain = getTerrain(data, width, height, elevationDecoder, 'martini');
114
+ mesh = getMartiniTileMesh(meshMaxError, width, terrain);
115
+ } else {
116
+ terrain = getTerrain(data, width, height, elevationDecoder, 'delatin');
117
+ mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);
118
+ }
119
+
120
+ break;
121
+ }
122
+
123
+ const {
124
+ vertices
125
+ } = mesh;
126
+ let {
127
+ triangles
128
+ } = mesh;
129
+ let attributes = getMeshAttributes(vertices, terrain, width, height, bounds);
130
+ const boundingBox = (0, _schema.getMeshBoundingBox)(attributes);
131
+
132
+ if (terrainOptions.skirtHeight) {
133
+ const {
134
+ attributes: newAttributes,
135
+ triangles: newTriangles
136
+ } = (0, _skirt.addSkirt)(attributes, triangles, terrainOptions.skirtHeight);
137
+ attributes = newAttributes;
138
+ triangles = newTriangles;
139
+ }
140
+
141
+ return {
142
+ loaderData: {
143
+ header: {}
144
+ },
145
+ header: {
146
+ vertexCount: triangles.length,
147
+ boundingBox
148
+ },
149
+ mode: 4,
150
+ indices: {
151
+ value: Uint32Array.from(triangles),
152
+ size: 1
153
+ },
154
+ attributes
155
+ };
156
+ }
157
+
158
+ function getMartiniTileMesh(meshMaxError, width, terrain) {
159
+ const gridSize = width + 1;
160
+ const martini = new _martini.default(gridSize);
161
+ const tile = martini.createTile(terrain);
162
+ const {
163
+ vertices,
164
+ triangles
165
+ } = tile.getMesh(meshMaxError);
166
+ return {
167
+ vertices,
168
+ triangles
169
+ };
170
+ }
171
+
172
+ function getDelatinTileMesh(meshMaxError, width, height, terrain) {
173
+ const tin = new _delatin.default(terrain, width + 1, height + 1);
174
+ tin.run(meshMaxError);
175
+ const {
176
+ coords,
177
+ triangles
178
+ } = tin;
179
+ const vertices = coords;
180
+ return {
181
+ vertices,
182
+ triangles
183
+ };
184
+ }
185
+
186
+ async function loadTerrain(arrayBuffer, options, context) {
187
+ options.image = options.image || {};
188
+ options.image.type = 'data';
189
+ const image = await context.parse(arrayBuffer, options, options.baseUri);
190
+ return getMesh(image, options.terrain);
191
+ }
192
+ //# sourceMappingURL=parse-terrain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/parse-terrain.ts"],"names":["getTerrain","imageData","width","height","elevationDecoder","tesselator","rScaler","bScaler","gScaler","offset","terrain","Float32Array","i","y","x","k","r","g","b","getMeshAttributes","vertices","bounds","gridSize","numOfVerticies","length","positions","texCoords","minX","minY","maxX","maxY","xScale","yScale","pixelIdx","POSITION","value","size","TEXCOORD_0","getMesh","terrainImage","terrainOptions","meshMaxError","data","mesh","getMartiniTileMesh","getDelatinTileMesh","triangles","attributes","boundingBox","skirtHeight","newAttributes","newTriangles","loaderData","header","vertexCount","mode","indices","Uint32Array","from","martini","Martini","tile","createTile","tin","Delatin","run","coords","loadTerrain","arrayBuffer","options","context","image","type","parse","baseUri"],"mappings":"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","sourcesContent":["import {getMeshBoundingBox} from '@loaders.gl/schema';\nimport Martini from '@mapbox/martini';\nimport Delatin from './delatin';\nimport {addSkirt} from './helpers/skirt';\n\ntype TerrainOptions = {\n meshMaxError: number;\n bounds: number[];\n elevationDecoder: ElevationDecoder;\n tesselator: 'martini' | 'delatin';\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\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\n/**\n * Returns generated mesh object from image data\n *\n * @param {object} terrainImage terrain image data\n * @param {object} terrainOptions terrain options\n * @returns mesh object\n */\nfunction getMesh(terrainImage: TerrainImage, terrainOptions: TerrainOptions) {\n if (terrainImage === null) {\n return null;\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\nexport default async function loadTerrain(arrayBuffer, options, context) {\n options.image = options.image || {};\n options.image.type = 'data';\n const image = await context.parse(arrayBuffer, options, options.baseUri);\n // Extend function to support additional mesh generation options (square grid or delatin)\n return getMesh(image, options.terrain);\n}\n"],"file":"parse-terrain.js"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VERSION = void 0;
7
+ const VERSION = typeof "3.1.0-beta.2" !== 'undefined' ? "3.1.0-beta.2" : 'latest';
8
+ exports.VERSION = VERSION;
9
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":";;;;;;AAGO,MAAMA,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE","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"],"file":"version.js"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports._typecheckQuantizedMeshLoader = exports.QuantizedMeshLoader = void 0;
7
+
8
+ var _version = require("./lib/utils/version");
9
+
10
+ const QuantizedMeshLoader = {
11
+ name: 'Quantized Mesh',
12
+ id: 'quantized-mesh',
13
+ module: 'terrain',
14
+ version: _version.VERSION,
15
+ worker: true,
16
+ extensions: ['terrain'],
17
+ mimeTypes: ['application/vnd.quantized-mesh'],
18
+ options: {
19
+ 'quantized-mesh': {
20
+ bounds: [0, 0, 1, 1],
21
+ skirtHeight: null
22
+ }
23
+ }
24
+ };
25
+ exports.QuantizedMeshLoader = QuantizedMeshLoader;
26
+ const _typecheckQuantizedMeshLoader = QuantizedMeshLoader;
27
+ exports._typecheckQuantizedMeshLoader = _typecheckQuantizedMeshLoader;
28
+ //# sourceMappingURL=quantized-mesh-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/quantized-mesh-loader.ts"],"names":["QuantizedMeshLoader","name","id","module","version","VERSION","worker","extensions","mimeTypes","options","bounds","skirtHeight","_typecheckQuantizedMeshLoader"],"mappings":";;;;;;;AACA;;AAKO,MAAMA,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,gBAD2B;AAEjCC,EAAAA,EAAE,EAAE,gBAF6B;AAGjCC,EAAAA,MAAM,EAAE,SAHyB;AAIjCC,EAAAA,OAAO,EAAEC,gBAJwB;AAKjCC,EAAAA,MAAM,EAAE,IALyB;AAMjCC,EAAAA,UAAU,EAAE,CAAC,SAAD,CANqB;AAOjCC,EAAAA,SAAS,EAAE,CAAC,gCAAD,CAPsB;AAQjCC,EAAAA,OAAO,EAAE;AACP,sBAAkB;AAChBC,MAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CADQ;AAEhBC,MAAAA,WAAW,EAAE;AAFG;AADX;AARwB,CAA5B;;AAgBA,MAAMC,6BAAqC,GAAGZ,mBAA9C","sourcesContent":["import type {Loader} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\n\n/**\n * Worker loader for quantized meshes\n */\nexport const QuantizedMeshLoader = {\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\nexport const _typecheckQuantizedMeshLoader: Loader = QuantizedMeshLoader;\n"],"file":"quantized-mesh-loader.js"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports._typecheckTerrainWorkerLoader = exports.TerrainLoader = void 0;
7
+
8
+ var _version = require("./lib/utils/version");
9
+
10
+ const TerrainLoader = {
11
+ name: 'Terrain',
12
+ id: 'terrain',
13
+ module: 'terrain',
14
+ version: _version.VERSION,
15
+ worker: true,
16
+ extensions: ['png', 'pngraw'],
17
+ mimeTypes: ['image/png'],
18
+ options: {
19
+ terrain: {
20
+ tesselator: 'auto',
21
+ bounds: null,
22
+ meshMaxError: 10,
23
+ elevationDecoder: {
24
+ rScaler: 1,
25
+ gScaler: 0,
26
+ bScaler: 0,
27
+ offset: 0
28
+ },
29
+ skirtHeight: null
30
+ }
31
+ }
32
+ };
33
+ exports.TerrainLoader = TerrainLoader;
34
+ const _typecheckTerrainWorkerLoader = TerrainLoader;
35
+ exports._typecheckTerrainWorkerLoader = _typecheckTerrainWorkerLoader;
36
+ //# sourceMappingURL=terrain-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/terrain-loader.ts"],"names":["TerrainLoader","name","id","module","version","VERSION","worker","extensions","mimeTypes","options","terrain","tesselator","bounds","meshMaxError","elevationDecoder","rScaler","gScaler","bScaler","offset","skirtHeight","_typecheckTerrainWorkerLoader"],"mappings":";;;;;;;AACA;;AAKO,MAAMA,aAAa,GAAG;AAC3BC,EAAAA,IAAI,EAAE,SADqB;AAE3BC,EAAAA,EAAE,EAAE,SAFuB;AAG3BC,EAAAA,MAAM,EAAE,SAHmB;AAI3BC,EAAAA,OAAO,EAAEC,gBAJkB;AAK3BC,EAAAA,MAAM,EAAE,IALmB;AAM3BC,EAAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,QAAR,CANe;AAO3BC,EAAAA,SAAS,EAAE,CAAC,WAAD,CAPgB;AAQ3BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,OAAO,EAAE;AACPC,MAAAA,UAAU,EAAE,MADL;AAEPC,MAAAA,MAAM,EAAE,IAFD;AAGPC,MAAAA,YAAY,EAAE,EAHP;AAIPC,MAAAA,gBAAgB,EAAE;AAChBC,QAAAA,OAAO,EAAE,CADO;AAEhBC,QAAAA,OAAO,EAAE,CAFO;AAGhBC,QAAAA,OAAO,EAAE,CAHO;AAIhBC,QAAAA,MAAM,EAAE;AAJQ,OAJX;AAUPC,MAAAA,WAAW,EAAE;AAVN;AADF;AARkB,CAAtB;;AA2BA,MAAMC,6BAAqC,GAAGpB,aAA9C","sourcesContent":["import type {Loader} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\n\n/**\n * Worker loader for quantized meshes\n */\nexport const TerrainLoader = {\n name: 'Terrain',\n id: 'terrain',\n module: 'terrain',\n version: VERSION,\n worker: true,\n extensions: ['png', 'pngraw'],\n mimeTypes: ['image/png'],\n options: {\n terrain: {\n tesselator: 'auto',\n bounds: null,\n meshMaxError: 10,\n elevationDecoder: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n },\n skirtHeight: null\n }\n }\n};\n\n/**\n * Loader for quantized meshes\n */\nexport const _typecheckTerrainWorkerLoader: Loader = TerrainLoader;\n"],"file":"terrain-loader.js"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ var _loaderUtils = require("@loaders.gl/loader-utils");
4
+
5
+ var _index = require("../index");
6
+
7
+ (0, _loaderUtils.createLoaderWorker)(_index.QuantizedMeshLoader);
8
+ //# sourceMappingURL=quantized-mesh-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/workers/quantized-mesh-worker.ts"],"names":["QuantizedMeshLoader"],"mappings":";;AAAA;;AACA;;AAEA,qCAAmBA,0BAAnB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {QuantizedMeshLoader} from '../index';\n\ncreateLoaderWorker(QuantizedMeshLoader);\n"],"file":"quantized-mesh-worker.js"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ var _loaderUtils = require("@loaders.gl/loader-utils");
4
+
5
+ var _index = require("../index");
6
+
7
+ (0, _loaderUtils.createLoaderWorker)(_index.TerrainLoader);
8
+ //# sourceMappingURL=terrain-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/workers/terrain-worker.ts"],"names":["TerrainLoader"],"mappings":";;AAAA;;AACA;;AAEA,qCAAmBA,oBAAnB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {TerrainLoader} from '../index';\n\ncreateLoaderWorker(TerrainLoader);\n"],"file":"terrain-worker.js"}
@@ -0,0 +1,5 @@
1
+ const moduleExports = require('./index');
2
+
3
+ globalThis.loaders = globalThis.loaders || {};
4
+ module.exports = Object.assign(globalThis.loaders, moduleExports);
5
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
@@ -0,0 +1,16 @@
1
+ import parseQuantizedMesh from './lib/parse-quantized-mesh';
2
+ import loadTerrain from './lib/parse-terrain';
3
+ import { TerrainLoader as TerrainWorkerLoader } from './terrain-loader';
4
+ import { QuantizedMeshLoader as QuantizedMeshWorkerLoader } from './quantized-mesh-loader';
5
+ export { TerrainWorkerLoader };
6
+ export const TerrainLoader = { ...TerrainWorkerLoader,
7
+ parse: loadTerrain
8
+ };
9
+ export const _typecheckTerrainLoader = TerrainLoader;
10
+ export { QuantizedMeshWorkerLoader };
11
+ export const QuantizedMeshLoader = { ...QuantizedMeshWorkerLoader,
12
+ parseSync: parseQuantizedMesh,
13
+ parse: async (arrayBuffer, options) => parseQuantizedMesh(arrayBuffer, options)
14
+ };
15
+ export const _typecheckQuantizedMeshLoader = QuantizedMeshLoader;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["parseQuantizedMesh","loadTerrain","TerrainLoader","TerrainWorkerLoader","QuantizedMeshLoader","QuantizedMeshWorkerLoader","parse","_typecheckTerrainLoader","parseSync","arrayBuffer","options","_typecheckQuantizedMeshLoader"],"mappings":"AACA,OAAOA,kBAAP,MAA+B,4BAA/B;AACA,OAAOC,WAAP,MAAwB,qBAAxB;AAEA,SAAQC,aAAa,IAAIC,mBAAzB,QAAmD,kBAAnD;AACA,SAAQC,mBAAmB,IAAIC,yBAA/B,QAA+D,yBAA/D;AAIA,SAAQF,mBAAR;AAEA,OAAO,MAAMD,aAAa,GAAG,EAC3B,GAAGC,mBADwB;AAE3BG,EAAAA,KAAK,EAAEL;AAFoB,CAAtB;AAKP,OAAO,MAAMM,uBAAyC,GAAGL,aAAlD;AAIP,SAAQG,yBAAR;AAKA,OAAO,MAAMD,mBAAmB,GAAG,EACjC,GAAGC,yBAD8B;AAEjCG,EAAAA,SAAS,EAAER,kBAFsB;AAGjCM,EAAAA,KAAK,EAAE,OAAOG,WAAP,EAAoBC,OAApB,KAAgCV,kBAAkB,CAACS,WAAD,EAAcC,OAAd;AAHxB,CAA5B;AAMP,OAAO,MAAMC,6BAA+C,GAAGP,mBAAxD","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parseQuantizedMesh from './lib/parse-quantized-mesh';\nimport loadTerrain from './lib/parse-terrain';\n\nimport {TerrainLoader as TerrainWorkerLoader} from './terrain-loader';\nimport {QuantizedMeshLoader as QuantizedMeshWorkerLoader} from './quantized-mesh-loader';\n\n// TerrainLoader\n\nexport {TerrainWorkerLoader};\n\nexport const TerrainLoader = {\n ...TerrainWorkerLoader,\n parse: loadTerrain\n};\n\nexport const _typecheckTerrainLoader: LoaderWithParser = TerrainLoader; // eslint-disable-line\n\n// QuantizedMeshLoader\n\nexport {QuantizedMeshWorkerLoader};\n\n/**\n * Loader for quantized meshes\n */\nexport const QuantizedMeshLoader = {\n ...QuantizedMeshWorkerLoader,\n parseSync: parseQuantizedMesh,\n parse: async (arrayBuffer, options) => parseQuantizedMesh(arrayBuffer, options)\n};\n\nexport const _typecheckQuantizedMeshLoader: LoaderWithParser = QuantizedMeshLoader;\n"],"file":"index.js"}