Add test case for terrain LoD stability using hysteresis
This commit is contained in:
@@ -4,7 +4,8 @@ import { createTerrain } from "../../src/document/terrains";
|
|||||||
import {
|
import {
|
||||||
buildTerrainDerivedMeshData,
|
buildTerrainDerivedMeshData,
|
||||||
buildTerrainLodMeshData,
|
buildTerrainLodMeshData,
|
||||||
resolveTerrainLodLevelIndex
|
resolveTerrainLodLevelIndex,
|
||||||
|
resolveTerrainLodLevelIndexWithHysteresis
|
||||||
} from "../../src/geometry/terrain-mesh";
|
} from "../../src/geometry/terrain-mesh";
|
||||||
|
|
||||||
describe("terrain mesh generation", () => {
|
describe("terrain mesh generation", () => {
|
||||||
@@ -263,4 +264,51 @@ describe("terrain mesh generation", () => {
|
|||||||
})
|
})
|
||||||
).toBe(4);
|
).toBe(4);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("keeps terrain LoD stable near distance thresholds", () => {
|
||||||
|
const levelCount = 5;
|
||||||
|
const chunkDiagonal = 100;
|
||||||
|
const chunkWorldCenter = { x: 0, y: 0, z: 0 };
|
||||||
|
|
||||||
|
expect(
|
||||||
|
resolveTerrainLodLevelIndexWithHysteresis({
|
||||||
|
levelCount,
|
||||||
|
activeLevelIndex: 0,
|
||||||
|
chunkDiagonal,
|
||||||
|
chunkWorldCenter,
|
||||||
|
cameraPosition: { x: 0, y: 0, z: 80 },
|
||||||
|
perspective: true
|
||||||
|
})
|
||||||
|
).toBe(0);
|
||||||
|
expect(
|
||||||
|
resolveTerrainLodLevelIndexWithHysteresis({
|
||||||
|
levelCount,
|
||||||
|
activeLevelIndex: 0,
|
||||||
|
chunkDiagonal,
|
||||||
|
chunkWorldCenter,
|
||||||
|
cameraPosition: { x: 0, y: 0, z: 90 },
|
||||||
|
perspective: true
|
||||||
|
})
|
||||||
|
).toBe(1);
|
||||||
|
expect(
|
||||||
|
resolveTerrainLodLevelIndexWithHysteresis({
|
||||||
|
levelCount,
|
||||||
|
activeLevelIndex: 1,
|
||||||
|
chunkDiagonal,
|
||||||
|
chunkWorldCenter,
|
||||||
|
cameraPosition: { x: 0, y: 0, z: 132 },
|
||||||
|
perspective: true
|
||||||
|
})
|
||||||
|
).toBe(1);
|
||||||
|
expect(
|
||||||
|
resolveTerrainLodLevelIndexWithHysteresis({
|
||||||
|
levelCount,
|
||||||
|
activeLevelIndex: 1,
|
||||||
|
chunkDiagonal,
|
||||||
|
chunkWorldCenter,
|
||||||
|
cameraPosition: { x: 0, y: 0, z: 60 },
|
||||||
|
perspective: true
|
||||||
|
})
|
||||||
|
).toBe(0);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user