From ff2c10bc2abb67d719e0579bce5d3488f17435a8 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Thu, 30 Apr 2026 02:55:02 +0200 Subject: [PATCH] Enhance terrain chunk rendering, add picking mesh, and improve brush state tracking --- src/viewport-three/viewport-host.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index 3fd56382..c639a3a6 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -104,7 +104,6 @@ import { type ScenePath } from "../document/paths"; import { - areTerrainsEqual, cloneTerrain, getTerrains, type Terrain @@ -181,15 +180,17 @@ import { import { buildBoxBrushDerivedMeshData } from "../geometry/box-brush-mesh"; import { buildTerrainDerivedMeshData, + buildTerrainLodChunkMeshData, buildTerrainLodMeshData, resolveTerrainLodLevelIndexWithHysteresis, TERRAIN_LOD_DEBUG_COLORS } from "../geometry/terrain-mesh"; import { - applyTerrainBrushStamp, + applyTerrainBrushStampInPlace, createTerrainBrushPreviewPoints, getTerrainBrushStrokeSpacing, - sampleTerrainHeightAtWorldPosition + sampleTerrainHeightAtWorldPosition, + type TerrainBrushDirtySampleBounds } from "../geometry/terrain-brush"; import { getBrushEdgeIds, @@ -356,8 +357,13 @@ interface TerrainRenderObjects { interface TerrainRenderChunkObjects { mesh: Mesh; debugMesh: Mesh; + pickMesh: Mesh; levelGeometries: BufferGeometry[]; activeLevelIndex: number; + startSampleX: number; + startSampleZ: number; + endSampleX: number; + endSampleZ: number; worldCenter: Vec3; diagonal: number; } @@ -375,6 +381,7 @@ interface LightVolumeRenderObjects { interface ActiveTerrainBrushStroke { pointerId: number; previewTerrain: Terrain; + changed: boolean; referenceHeight: number | null; lastAppliedPoint: { x: number; @@ -6523,8 +6530,13 @@ export class ViewportHost { chunks.push({ mesh, debugMesh, + pickMesh, levelGeometries, activeLevelIndex: 0, + startSampleX: chunk.startSampleX, + startSampleZ: chunk.startSampleZ, + endSampleX: chunk.endSampleX, + endSampleZ: chunk.endSampleZ, worldCenter: { x: terrain.position.x + chunk.localCenter.x, y: terrain.position.y + chunk.localCenter.y,