@cesium/engine
Version:
CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.
122 lines (119 loc) • 4.16 kB
JavaScript
/**
* @license
* Cesium - https://github.com/CesiumGS/cesium
* Version 1.136.0
*
* Copyright 2011-2022 Cesium Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Columbus View (Pat. Pend.)
*
* Portions licensed separately.
* See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details.
*/
import {
createTaskProcessorWorker_default
} from "./chunk-2AM4E2WD.js";
import {
AxisAlignedBoundingBox_default
} from "./chunk-OXFU5HNU.js";
import "./chunk-23T2IPHV.js";
import {
Matrix4_default
} from "./chunk-W4XUEDU5.js";
import "./chunk-5JKH4AMT.js";
import {
Cartesian3_default
} from "./chunk-3YTMGEXW.js";
import "./chunk-IL5F6WEE.js";
import "./chunk-QEANVUGT.js";
import "./chunk-2RCIRXNI.js";
// packages/engine/Source/Workers/incrementallyBuildTerrainPicker.js
var scratchAABBCornerMin = new Cartesian3_default();
var scratchAABBCornerMax = new Cartesian3_default();
var scratchTrianglePoints = [
new Cartesian3_default(),
new Cartesian3_default(),
new Cartesian3_default()
];
var scratchTriangleAABB = new AxisAlignedBoundingBox_default();
function incrementallyBuildTerrainPicker(parameters, transferableObjects) {
const aabbs = new Float64Array(parameters.aabbs);
const nodeAABBs = Array.from({ length: 4 }, (_, i) => {
const min = Cartesian3_default.unpack(aabbs, i * 6, scratchAABBCornerMin);
const max = Cartesian3_default.unpack(aabbs, i * 6 + 3, scratchAABBCornerMax);
return AxisAlignedBoundingBox_default.fromCorners(
min,
max,
new AxisAlignedBoundingBox_default()
);
});
const inverseTransformArray = new Float64Array(parameters.inverseTransform);
const inverseTransform = Matrix4_default.unpack(
inverseTransformArray,
0,
new Matrix4_default()
);
const triangleIndices = new Uint32Array(parameters.triangleIndices);
const trianglePositions = new Float32Array(parameters.trianglePositions);
const intersectingTrianglesArrays = Array.from({ length: 4 }, () => []);
for (let j = 0; j < triangleIndices.length; j++) {
Cartesian3_default.unpack(trianglePositions, j * 9, scratchTrianglePoints[0]);
Cartesian3_default.unpack(trianglePositions, j * 9 + 3, scratchTrianglePoints[1]);
Cartesian3_default.unpack(trianglePositions, j * 9 + 6, scratchTrianglePoints[2]);
const triangleAABB = createAABBFromTriangle(
inverseTransform,
scratchTrianglePoints
);
for (let i = 0; i < 4; i++) {
const aabbsIntersect = nodeAABBs[i].intersectAxisAlignedBoundingBox(triangleAABB);
if (!aabbsIntersect) {
continue;
}
intersectingTrianglesArrays[i].push(triangleIndices[j]);
}
}
const intersectingTrianglesTypedArrays = intersectingTrianglesArrays.map(
(array) => {
const uintArray = new Uint32Array(array);
transferableObjects.push(uintArray.buffer);
return uintArray.buffer;
}
);
return {
intersectingTrianglesArrays: intersectingTrianglesTypedArrays
};
}
function createAABBFromTriangle(inverseTransform, trianglePoints) {
Matrix4_default.multiplyByPoint(
inverseTransform,
trianglePoints[0],
trianglePoints[0]
);
Matrix4_default.multiplyByPoint(
inverseTransform,
trianglePoints[1],
trianglePoints[1]
);
Matrix4_default.multiplyByPoint(
inverseTransform,
trianglePoints[2],
trianglePoints[2]
);
return AxisAlignedBoundingBox_default.fromPoints(trianglePoints, scratchTriangleAABB);
}
var incrementallyBuildTerrainPicker_default = createTaskProcessorWorker_default(incrementallyBuildTerrainPicker);
export {
incrementallyBuildTerrainPicker_default as default
};