# Paperdoll Renderer

Desktopprogramma voor een paperdoll-project. Je bewaart een projectmap, leest modellen uit, en bekijkt een glTF-lichaam als bewegend 3D-model.

Rust 1.96.0 staat in `rust-toolchain.toml`. Voor het venster: `pkg-config`, `libxcb1-dev`, `libx11-dev`, `libxkbcommon-dev`, `libxkbcommon-x11-dev` en `libgl1-mesa-dev`.

```bash
cargo run
cargo run -- --preview-fixture
cargo run -- --status
cargo test --locked
```

`--preview-fixture` opent de preview met de testlichamen uit `tests/fixtures/bodies/`.

## Project

**Nieuw** maakt een map met `character.ppd`, `assets/body/`, `assets/equipment/`, `presets/`, `cache/` en `renders/`. **Open** leest een `.ppd`. **Opslaan** schrijft het bestand via een tijdelijk buurbestand.

In het bestand staan de projectnaam, de paden van het mannelijke en vrouwelijke model, de paden van equipment-presets, de uitvoermap, en breedte, hoogte en fps. Paden zijn relatief aan de projectmap. Een leeg geslachtsslot blijft leeg. **Lees man** en **Lees vrouw** tonen meshes, materialen, textures, joints en clips van glTF/GLB, FBX of OBJ+MTL.

## 3D-preview

Het middelste vlak tekent een geskind glTF/GLB-lichaam.

- **Laad testlichamen** zet de man en de vrouw uit de fixture in de view.
- **3D van project** gebruikt de `.glb`- of `.gltf`-paden van man en vrouw.
- **Man** en **Vrouw** wisselen het lichaam. **walk** en **attack** wisselen de clip. **Pauze** / **Speel** zet de animatie stil of laat haar lopen.
- Sleep in het vlak om te draaien. Scroll om te zoomen.
- **Yaw −** en **Yaw +** stappen langs twaalf hoeken van 30°. **pitch -30**, **pitch 0** en **pitch 30** zetten de drie hoogtes. Yaw 0 kijkt op de voorkant; de testlichamen wijzen naar −Z.

## Tests

```bash
cargo fmt --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
```

De testlichamen komen uit `scripts/generate_test_bodies.py`. Het FBX-bestand van de man komt uit `scripts/convert_test_body_to_fbx.py` met Blender.
