docs: consolidate phase 4 status #9
@@ -12,7 +12,7 @@ This repository currently contains:
|
|||||||
- A first-pass knowledgebase under `docs/knowledgebase/`.
|
- A first-pass knowledgebase under `docs/knowledgebase/`.
|
||||||
- An implementation roadmap under `docs/plans/`.
|
- An implementation roadmap under `docs/plans/`.
|
||||||
- Legal and reference-material hygiene notes under `docs/legal/` and `docs/research/`.
|
- Legal and reference-material hygiene notes under `docs/legal/` and `docs/research/`.
|
||||||
- A clean-room terrain import boundary with project-owned `ovp-text` fixtures and an SRTM/HGT byte importer behind the `hgt` Cargo feature.
|
- 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, and an ESRI ASCII Grid parser behind the `ascii-grid-import` feature.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
@@ -32,15 +32,20 @@ It opens an `eframe`/`egui` window titled `OpenVistaPro` with scene controls and
|
|||||||
|
|
||||||
Importer status:
|
Importer status:
|
||||||
|
|
||||||
- `ovp-text`: project-owned plain-text heightfield fixture format used for tests.
|
- `heightmap`: script execution can import grayscale PNG heightmaps with `import heightmap "path.png"` and map brightness to elevation.
|
||||||
|
- `ovp-text`: project-owned plain-text heightfield fixture format used for import-boundary tests.
|
||||||
- `hgt`: enabled by the optional `hgt` Cargo feature; parses SRTM HGT payloads as square grids of big-endian signed 16-bit metre samples. The implementation and tests use open specifications and synthetic/tiny fixtures only.
|
- `hgt`: enabled by the optional `hgt` Cargo feature; parses SRTM HGT payloads as square grids of big-endian signed 16-bit metre samples. The implementation and tests use open specifications and synthetic/tiny fixtures only.
|
||||||
|
- `esri-ascii-grid`: enabled by the optional `ascii-grid-import` Cargo feature; parses open ESRI ASCII Grid text with synthetic/project-owned fixtures only.
|
||||||
|
|
||||||
To verify the importer feature surface:
|
To verify the importer feature surface:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cargo test import
|
||||||
cargo test hgt
|
cargo test hgt
|
||||||
cargo test hgt --features hgt
|
cargo test hgt --features hgt
|
||||||
|
cargo test ascii_grid --features ascii-grid-import
|
||||||
cargo run --features hgt --bin openvistapro -- info
|
cargo run --features hgt --bin openvistapro -- info
|
||||||
|
cargo run --features ascii-grid-import --bin openvistapro -- info
|
||||||
cargo test --no-default-features
|
cargo test --no-default-features
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -70,14 +75,19 @@ or one command:
|
|||||||
```text
|
```text
|
||||||
use preset hill # `hill` or `plane`
|
use preset hill # `hill` or `plane`
|
||||||
set thresholds water=0.18 tree=0.42 snow=0.77
|
set thresholds water=0.18 tree=0.42 snow=0.77
|
||||||
import heightmap "data/demo-height.png"
|
import heightmap "data/demo-height.png" # optional grayscale PNG terrain input
|
||||||
render output "out/demo.png"
|
render output "out/demo.png"
|
||||||
```
|
```
|
||||||
|
|
||||||
Design goals for the MVP: one command per line for readable diffs,
|
Run the checked-in demo script with:
|
||||||
deterministic parsing with no I/O, and parse errors that carry a 1-based line
|
|
||||||
number. This slice only parses scripts into an AST; executing those commands is
|
```bash
|
||||||
intentionally left for a later card.
|
cargo run --bin openvistapro -- script run --input examples/demo.ovps
|
||||||
|
```
|
||||||
|
|
||||||
|
Script paths are resolved relative to the script file. `use preset` and
|
||||||
|
`import heightmap` select the active terrain, `set thresholds` updates scene
|
||||||
|
bands, and execution writes each `render output` to a deterministic PNG.
|
||||||
|
|
||||||
## Project principles
|
## Project principles
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
# Architecture Notes
|
# Architecture Notes
|
||||||
|
|
||||||
## Proposed Rust workspace structure
|
## Current Rust module structure
|
||||||
|
|
||||||
Start simple, then split into crates when module boundaries stabilize.
|
Start simple, then split into crates when module boundaries stabilize.
|
||||||
|
|
||||||
- `src/terrain.rs`: height grid, bounds, sampling, normals, terrain transforms.
|
- `src/terrain.rs`: height grid, bounds, sampling, and deterministic terrain fixtures.
|
||||||
- `src/import/`: importers for open/safe formats; historical compatibility later.
|
- `src/import.rs`: importers for open/safe formats (`ovp-text`, feature-gated HGT, feature-gated ESRI ASCII Grid); historical compatibility later.
|
||||||
- `src/scene.rs`: camera, target, light, atmosphere, water, vegetation parameters.
|
- `src/scene.rs` and `src/scene_file.rs`: camera, light, atmosphere, water/vegetation thresholds, and `.ovp.toml` persistence.
|
||||||
- `src/render/`: CPU reference renderer first, then WGPU renderer.
|
- `src/render.rs`: deterministic CPU top-down renderer plus CPU perspective demo renderer; WGPU renderer later.
|
||||||
- `src/script.rs`: parse and execute OpenVistaPro script commands.
|
- `src/script.rs` and `src/script_exec.rs`: parse and execute project-owned OpenVistaPro script commands.
|
||||||
|
- `src/path.rs`: MakePath-inspired camera keyframe interpolation.
|
||||||
- `src/colormap.rs`: palettes and elevation/biome color mapping.
|
- `src/colormap.rs`: palettes and elevation/biome color mapping.
|
||||||
- `src/bin/openvistapro.rs` or current `src/main.rs`: CLI entry point.
|
- `src/cli.rs` plus `src/main.rs`: CLI entry point for `info`, `scene export`, `render`, and `script run`.
|
||||||
|
- `src/app_state.rs`, `src/app.rs`, and `src/bin/openvistapro_app.rs`: optional `app` feature shell built with `eframe`/`egui`.
|
||||||
|
|
||||||
## Suggested technology choices
|
## Suggested technology choices
|
||||||
|
|
||||||
|
|||||||
@@ -183,11 +183,18 @@ Expected: image is created; no panic for reasonable scene defaults.
|
|||||||
## Phase 4: Formats, scripts, UI
|
## Phase 4: Formats, scripts, UI
|
||||||
|
|
||||||
- Add open DEM/HGT/GeoTIFF importers behind feature flags.
|
- Add open DEM/HGT/GeoTIFF importers behind feature flags.
|
||||||
|
- Current importer surface: project-owned `ovp-text` fixtures, script-level PNG heightmap input, feature-gated SRTM/HGT byte parsing, and feature-gated ESRI ASCII Grid parsing.
|
||||||
|
- GeoTIFF remains a strategy/research item until a separate feature slice chooses a dependency boundary.
|
||||||
- Define OpenVistaPro scene file format.
|
- Define OpenVistaPro scene file format.
|
||||||
- Initial implementation: `.ovp.toml` files with
|
- Initial implementation: `.ovp.toml` files with
|
||||||
`schema = "openvistapro.scene"`, `version = 1`, and a serialized `Scene`
|
`schema = "openvistapro.scene"`, `version = 1`, and a serialized `Scene`
|
||||||
payload. CLI support starts with
|
payload. CLI support starts with
|
||||||
`openvistapro scene export --output scene.ovp.toml` and
|
`openvistapro scene export --output scene.ovp.toml` and
|
||||||
`openvistapro render --preset hill --scene scene.ovp.toml --output out.png`.
|
`openvistapro render --preset hill --scene scene.ovp.toml --output out.png`.
|
||||||
- Implement a VistaPro-inspired script language, then a MakePath-like spline path generator.
|
- Implement a VistaPro-inspired script language and executor.
|
||||||
|
- Current CLI: `openvistapro script run --input examples/demo.ovps`.
|
||||||
|
- The syntax is project-owned and not legacy VistaPro-compatible.
|
||||||
|
- Add a MakePath-like spline path generator.
|
||||||
|
- Current module: `src/path.rs` with deterministic keyframe interpolation used as a foundation for future animation output.
|
||||||
- Build an interactive app with WGPU and egui after CLI renderer is stable.
|
- Build an interactive app with WGPU and egui after CLI renderer is stable.
|
||||||
|
- Current app shell: `cargo run --features app --bin openvistapro_app`; it uses `eframe`/`egui` scene controls and a CPU terrain preview while full WGPU terrain rendering remains future work.
|
||||||
|
|||||||
@@ -19,10 +19,14 @@ The repository already has:
|
|||||||
- `src/scene_file.rs`: project-owned `.ovp.toml` files with `schema = "openvistapro.scene"`, `version = 1`, and a serialized `Scene` payload.
|
- `src/scene_file.rs`: project-owned `.ovp.toml` files with `schema = "openvistapro.scene"`, `version = 1`, and a serialized `Scene` payload.
|
||||||
- `src/colormap.rs`: deterministic elevation-band colors.
|
- `src/colormap.rs`: deterministic elevation-band colors.
|
||||||
- `src/render.rs`: deterministic top-down PNG renderer plus spike-quality CPU perspective raymarcher.
|
- `src/render.rs`: deterministic top-down PNG renderer plus spike-quality CPU perspective raymarcher.
|
||||||
- `src/cli.rs`: `info`, `scene export`, and `render` commands.
|
- `src/import.rs`: open-format import boundary with `ovp-text`, feature-gated SRTM/HGT bytes, and feature-gated ESRI ASCII Grid parsing.
|
||||||
|
- `src/script.rs` and `src/script_exec.rs`: project-owned script parsing and execution for presets, grayscale PNG heightmaps, threshold changes, and PNG render outputs.
|
||||||
|
- `src/path.rs`: deterministic MakePath-inspired camera keyframe interpolation.
|
||||||
|
- `src/app_state.rs`, `src/app.rs`, and `src/bin/openvistapro_app.rs`: feature-gated `app` shell using `eframe`/`egui` with scene controls and CPU preview rendering.
|
||||||
|
- `src/cli.rs`: `info`, `scene export`, `render`, and `script run` commands.
|
||||||
- `README.md`, `docs/legal/asset-policy.md`, `docs/research/reference-inventory.md`, and `docs/knowledgebase/*.md`: clean-room context and project constraints.
|
- `README.md`, `docs/legal/asset-policy.md`, `docs/research/reference-inventory.md`, and `docs/knowledgebase/*.md`: clean-room context and project constraints.
|
||||||
|
|
||||||
Phase 4 work should preserve this baseline and extend it in thin, tested slices.
|
Phase 4 thin slices have landed as implementation checkpoints, while this file remains a historical implementation plan for follow-on work and validation.
|
||||||
|
|
||||||
## Non-negotiable clean-room and repository hygiene rules
|
## Non-negotiable clean-room and repository hygiene rules
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
#[test]
|
||||||
|
fn readme_script_section_matches_executable_script_cli() {
|
||||||
|
let readme = include_str!("../README.md");
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
readme.contains("cargo run --bin openvistapro -- script run --input examples/demo.ovps"),
|
||||||
|
"README should show the executable script-run command used by examples/demo.ovps"
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
readme.contains("execut") && readme.contains("writes each `render output`"),
|
||||||
|
"README should describe current script execution behavior, not parser-only behavior"
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
!readme.contains("only parses scripts into an AST"),
|
||||||
|
"README must not retain the pre-execution script MVP wording"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn readme_lists_current_importer_surface() {
|
||||||
|
let readme = include_str!("../README.md");
|
||||||
|
|
||||||
|
for importer in ["`ovp-text`", "`hgt`", "`esri-ascii-grid`"] {
|
||||||
|
assert!(
|
||||||
|
readme.contains(importer),
|
||||||
|
"README should mention current importer {importer}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
assert!(
|
||||||
|
readme.contains("cargo test ascii_grid")
|
||||||
|
&& readme.contains("cargo test ascii_grid --features ascii-grid-import"),
|
||||||
|
"README should document the ASCII-grid validation commands"
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user