docs: mark Étape 5 / 3D MVP reached (PLAN, ROADMAP, DRAFT, README)
This commit is contained in:
+15
-16
@@ -24,15 +24,14 @@ generated: { by: human:jerome, at: 2026-07-31T00:00:00Z }
|
||||
> initialement non branchés au pipeline — **désormais branchés** (caméra active + matrices monde écrites
|
||||
> chaque frame, Étape 4.3, 2026-09-16 ; voir §1.1/1.5 ci-dessous).
|
||||
|
||||
> **Étape suivante (prochaine itération) — « 3D + éclairage Phong » (ROADMAP 1.3 + 1.5).**
|
||||
> Le rendu automatique est aujourd'hui **plat** : le `basic_shader.wgsl` interprète les positions comme
|
||||
> déjà en NDC, sans matrice monde/vue/projection ni lumière. **Une grande partie de l'infrastructure est
|
||||
> déjà en place (Étapes 3+4, 2026-09-16)** : le `standard_shader.wgsl` Phong (matrice
|
||||
> `projection * view * world` + lumière directionnelle) existe et valide ; les uniform buffers sont
|
||||
> branchés (frame : view/proj/cam_pos + lumière ; par mesh : `world` dérivé du `Transform`) ; le `Renderer`
|
||||
> écrit chaque frame la caméra active (via `Scene::set_camera`/`camera()`) et la matrice monde de chaque
|
||||
> entité. **Reste à faire** pour un mesh 3D éclairé à l'écran : brancher `standard` sur un exemple et
|
||||
> ajouter un mesh de test (cube). Objectif MVP : **un mesh 3D éclairé à l'écran**.
|
||||
> **Étape suivante (résolue 2026-09-17).** « 3D + éclairage Phong » (ROADMAP 1.3 + 1.5) est **atteinte** :
|
||||
> le rendu automatique n'est plus plat. L'infrastructure (Étapes 3+4, 2026-09-16) — `standard_shader.wgsl`
|
||||
> Phong (matrice `projection * view * world` + lumière directionnelle), uniform buffers branchés
|
||||
> (frame : view/proj/cam_pos + lumière ; par mesh : `world` dérivé du `Transform`), `Renderer` écrivant
|
||||
> chaque frame la caméra active et la matrice monde de chaque entité — est **branchée** sur l'exemple
|
||||
> `cube` (Étape 5, 2026-09-17) : un cube unitaire éclairé qui tourne à l'écran via `App::render_scene`.
|
||||
> Le shader `basic` est supprimé : le 2D plat devient la variante **unlit** de `standard`
|
||||
> (`Renderer::set_unlit(true)`). Objectif MVP **atteint**.
|
||||
|
||||
---
|
||||
|
||||
@@ -50,23 +49,23 @@ generated: { by: human:jerome, at: 2026-07-31T00:00:00Z }
|
||||
- [x] Fonctions `view_matrix()` et `projection_matrix(fov, aspect, near, far)` (Étape 4.3 : `projection_matrix(aspect)` utilise fov/near/far stockés)
|
||||
|
||||
### 1.2 Geometry & Mesh
|
||||
- [ ] Créer struct `Geometry` (math/geometry.rs) :
|
||||
- [ ] `positions: Vec<[f32; 3]>` (obligatoire)
|
||||
- [ ] `indices: Option<Vec<u16>>` (optionnel)
|
||||
- [ ] `normals: Option<Vec<[f32; 3]>>` (pour Phong)
|
||||
- [x] Créer struct `Geometry` (math/geometry.rs) — **fait** :
|
||||
- [x] `positions: Vec<[f32; 3]>` (obligatoire)
|
||||
- [x] `indices: Option<Vec<u16>>` (optionnel)
|
||||
- [x] `normals: Option<Vec<[f32; 3]>>` (pour Phong) — plus `uvs: Option<Vec<[f32; 2]>>`
|
||||
- [ ] Refactorer `Mesh` pour contenir :
|
||||
- [ ] `geometry: Arc<Geometry>`
|
||||
- [ ] `vertex_buffer: wgpu::Buffer`
|
||||
- [ ] `index_buffer: Option<wgpu::Buffer>`
|
||||
- [ ] `transform: Transform` (état CPU)
|
||||
- [ ] Ajouter un mesh de test (cube unitaire) en exemple
|
||||
- [x] Ajouter un mesh de test (cube unitaire) en exemple — **fait** (helper `cube_geometry` dans l'exemple `cube`, Étape 5, 2026-09-17)
|
||||
|
||||
### 1.3 Shader Phong Minimal
|
||||
- [x] Créer `standard_shader.wgsl` (Étape 2, 2026-09-16) :
|
||||
- [x] Vertex shader : projection * view * world * position
|
||||
- [x] Fragment shader : éclairage directionnel (+ hémisphérique)
|
||||
- [x] Uniforms : `view`, `proj`, `cam_pos`, `light_dir`, `light_color`, `options`
|
||||
- [x] Mettre à jour `Material` / pipeline pour supporter les uniforms du shader Phong (bind group layouts frame+object, Étape 3) — `standard` n'est pas encore branché sur un exemple
|
||||
- [x] Mettre à jour `Material` / pipeline pour supporter les uniforms du shader Phong (bind group layouts frame+object, Étape 3) — **désormais branché** sur l'exemple `cube` (Étape 5, 2026-09-17)
|
||||
|
||||
### 1.4 Scene avec identifiants (MVP : String IDs)
|
||||
- [x] `Scene` implémentée avec **String IDs** (`HashMap<String, Arc<Mesh>>`, `...Material`, entités) — état actuel validé ; décision : rester en String IDs pour le MVP
|
||||
@@ -78,7 +77,7 @@ generated: { by: human:jerome, at: 2026-07-31T00:00:00Z }
|
||||
- [x] Uniform buffer pour la frame : `view`, `proj`, `cam_pos`, `light_dir` (Étapes 3+4) — écrit chaque frame depuis la caméra active
|
||||
- [x] Uniform buffer par mesh : `world` (calculée sur CPU depuis `transform.to_matrix()`, Étape 4.2)
|
||||
- [x] `Renderer::render_scene()` itère sur les entités de la Scene et dessine chacune (liaison bind groups frame+object)
|
||||
- [ ] Exemple fonctionnel : un cube éclairé tourne à l'écran — **à faire** (Étape 5 : brancher `standard` sur un exemple + mesh cube)
|
||||
- [x] Exemple fonctionnel : un cube éclairé tourne à l'écran — **fait** (Étape 5, 2026-09-17 : brancher `standard` sur l'exemple `cube` + mesh cube + rotation via `App::render_scene`)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user