feat: wire vertical exaggeration through the shell #13

Merged
moldybits merged 25 commits from feat/terrain-gen-abstraction into main 2026-05-20 23:00:29 -04:00
2 changed files with 16 additions and 7 deletions
Showing only changes of commit cd077f4b6b - Show all commits
+4 -4
View File
@@ -13,7 +13,7 @@ This repository currently contains:
- An implementation roadmap under `docs/plans/`.
- Legal and reference-material hygiene notes under `docs/legal/` and `docs/research/`.
- A clean-room terrain import boundary with project-owned `ovp-text` fixtures, a PNG heightmap script importer, an SRTM/HGT byte importer behind the `hgt` Cargo feature, an ESRI ASCII Grid parser behind the `ascii-grid-import` feature, and a deterministic terrain-generation module in `src/terrain_gen.rs` with `TerrainGenerationSpec` / `DeterministicTerrainGenerator` (see `cargo test terrain_gen` and its determinism/seed note).
- A project-owned script parser + executor in `src/script.rs` / `src/script_exec.rs`, MakePath-inspired camera path generation in `src/path.rs`, explicit camera heading/pitch/bank plus lens/range and vertical-exaggeration controls in `src/scene.rs`, and an `app` feature shell with working import/script/path/project controls in `src/app_state.rs`, `src/app.rs`, and `src/ui_shell.rs`.
- A project-owned script parser + executor in `src/script.rs` / `src/script_exec.rs`, MakePath-inspired camera path generation in `src/path.rs`, a project-owned color-map model with editable thresholds/bands in `src/scene.rs`, and an `app` feature shell with working import/script/path/project controls in `src/app_state.rs`, `src/app.rs`, and `src/ui_shell.rs`.
## Development
@@ -66,9 +66,9 @@ model.
Scene files use the project-owned `.ovp.toml` format. Version 1 stores a
top-level `schema = "openvistapro.scene"`, `version = 1`, and a serialized
`Scene` payload containing camera position/target, camera heading-pitch-bank,
lens/FOV/clip ranges, light, water, tree-line, snow-line, and haze settings.
The format is intentionally human-readable while the data model is still
evolving.
lens/FOV/clip ranges, light, water, tree-line, snow-line, haze, and the
color-map thresholds/bands. The format is intentionally human-readable while
the data model is still evolving.
## Script language (MVP)
+12 -3
View File
@@ -334,9 +334,10 @@ impl AppData {
import_path: self.import_path.clone(),
path_target: self.path_target.clone(),
status_line: format!(
"CPU preview · {} · {} · exag {:.2} · {width}×{height}",
"CPU preview · {} · {} · {} · exag {:.2} · {width}×{height}",
self.terrain_preset.label(),
self.renderer_mode.label(),
self.render_quality.label(),
self.scene.vertical_exaggeration,
),
script_preview: ScriptPreview::from_source(&self.script_source),
@@ -351,8 +352,16 @@ impl AppData {
let grid = self.build_preview_grid()?;
let (width, height) = self.preview_size;
let image = match self.renderer_mode {
RendererMode::TopDown => render_top_down(&grid, &self.scene),
RendererMode::Perspective => render_perspective(&grid, &self.scene, width, height),
RendererMode::TopDown => {
render_top_down_with_quality(&grid, &self.scene, self.render_quality.preset())
}
RendererMode::Perspective => render_perspective_with_quality(
&grid,
&self.scene,
width,
height,
self.render_quality.preset(),
),
};
Ok(image)
}