1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import Ellipsoid from "../Core/Ellipsoid.js";
- import HeightmapEncoding from "../Core/HeightmapEncoding.js";
- import HeightmapTessellator from "../Core/HeightmapTessellator.js";
- import Rectangle from "../Core/Rectangle.js";
- import RuntimeError from "../Core/RuntimeError.js";
- import Lerc from "../ThirdParty/lerc.js";
- import createTaskProcessorWorker from "./createTaskProcessorWorker.js";
- function createVerticesFromHeightmap(parameters, transferableObjects) {
- // LERC encoded buffers must be decoded, then we can process them like normal
- if (parameters.encoding === HeightmapEncoding.LERC) {
- let result;
- try {
- result = Lerc.decode(parameters.heightmap);
- } catch (error) {
- throw new RuntimeError(error);
- }
- const lercStatistics = result.statistics[0];
- if (lercStatistics.minValue === Number.MAX_VALUE) {
- throw new RuntimeError("Invalid tile data");
- }
- parameters.heightmap = result.pixels[0];
- parameters.width = result.width;
- parameters.height = result.height;
- }
- parameters.ellipsoid = Ellipsoid.clone(parameters.ellipsoid);
- parameters.rectangle = Rectangle.clone(parameters.rectangle);
- const statistics = HeightmapTessellator.computeVertices(parameters);
- const vertices = statistics.vertices;
- transferableObjects.push(vertices.buffer);
- return {
- vertices: vertices.buffer,
- numberOfAttributes: statistics.encoding.stride,
- minimumHeight: statistics.minimumHeight,
- maximumHeight: statistics.maximumHeight,
- gridWidth: parameters.width,
- gridHeight: parameters.height,
- boundingSphere3D: statistics.boundingSphere3D,
- orientedBoundingBox: statistics.orientedBoundingBox,
- occludeePointInScaledSpace: statistics.occludeePointInScaledSpace,
- encoding: statistics.encoding,
- westIndicesSouthToNorth: statistics.westIndicesSouthToNorth,
- southIndicesEastToWest: statistics.southIndicesEastToWest,
- eastIndicesNorthToSouth: statistics.eastIndicesNorthToSouth,
- northIndicesWestToEast: statistics.northIndicesWestToEast,
- };
- }
- export default createTaskProcessorWorker(createVerticesFromHeightmap);
|