Enhance terrain chunk rendering, add picking mesh, and improve brush state tracking

This commit is contained in:
2026-04-30 02:55:02 +02:00
parent 4f095bd409
commit ff2c10bc2a

View File

@@ -104,7 +104,6 @@ import {
type ScenePath type ScenePath
} from "../document/paths"; } from "../document/paths";
import { import {
areTerrainsEqual,
cloneTerrain, cloneTerrain,
getTerrains, getTerrains,
type Terrain type Terrain
@@ -181,15 +180,17 @@ import {
import { buildBoxBrushDerivedMeshData } from "../geometry/box-brush-mesh"; import { buildBoxBrushDerivedMeshData } from "../geometry/box-brush-mesh";
import { import {
buildTerrainDerivedMeshData, buildTerrainDerivedMeshData,
buildTerrainLodChunkMeshData,
buildTerrainLodMeshData, buildTerrainLodMeshData,
resolveTerrainLodLevelIndexWithHysteresis, resolveTerrainLodLevelIndexWithHysteresis,
TERRAIN_LOD_DEBUG_COLORS TERRAIN_LOD_DEBUG_COLORS
} from "../geometry/terrain-mesh"; } from "../geometry/terrain-mesh";
import { import {
applyTerrainBrushStamp, applyTerrainBrushStampInPlace,
createTerrainBrushPreviewPoints, createTerrainBrushPreviewPoints,
getTerrainBrushStrokeSpacing, getTerrainBrushStrokeSpacing,
sampleTerrainHeightAtWorldPosition sampleTerrainHeightAtWorldPosition,
type TerrainBrushDirtySampleBounds
} from "../geometry/terrain-brush"; } from "../geometry/terrain-brush";
import { import {
getBrushEdgeIds, getBrushEdgeIds,
@@ -356,8 +357,13 @@ interface TerrainRenderObjects {
interface TerrainRenderChunkObjects { interface TerrainRenderChunkObjects {
mesh: Mesh<BufferGeometry, Material>; mesh: Mesh<BufferGeometry, Material>;
debugMesh: Mesh<BufferGeometry, MeshBasicMaterial>; debugMesh: Mesh<BufferGeometry, MeshBasicMaterial>;
pickMesh: Mesh<BufferGeometry, Material>;
levelGeometries: BufferGeometry[]; levelGeometries: BufferGeometry[];
activeLevelIndex: number; activeLevelIndex: number;
startSampleX: number;
startSampleZ: number;
endSampleX: number;
endSampleZ: number;
worldCenter: Vec3; worldCenter: Vec3;
diagonal: number; diagonal: number;
} }
@@ -375,6 +381,7 @@ interface LightVolumeRenderObjects {
interface ActiveTerrainBrushStroke { interface ActiveTerrainBrushStroke {
pointerId: number; pointerId: number;
previewTerrain: Terrain; previewTerrain: Terrain;
changed: boolean;
referenceHeight: number | null; referenceHeight: number | null;
lastAppliedPoint: { lastAppliedPoint: {
x: number; x: number;
@@ -6523,8 +6530,13 @@ export class ViewportHost {
chunks.push({ chunks.push({
mesh, mesh,
debugMesh, debugMesh,
pickMesh,
levelGeometries, levelGeometries,
activeLevelIndex: 0, activeLevelIndex: 0,
startSampleX: chunk.startSampleX,
startSampleZ: chunk.startSampleZ,
endSampleX: chunk.endSampleX,
endSampleZ: chunk.endSampleZ,
worldCenter: { worldCenter: {
x: terrain.position.x + chunk.localCenter.x, x: terrain.position.x + chunk.localCenter.x,
y: terrain.position.y + chunk.localCenter.y, y: terrain.position.y + chunk.localCenter.y,