Enhance terrain chunk rendering, add picking mesh, and improve brush state tracking
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user