docs: document model gallery

This commit is contained in:
Tom Boullay
2026-05-25 16:24:12 +02:00
parent 626dc47bbe
commit 36180279b2
6 changed files with 77 additions and 7 deletions
+9 -6
View File
@@ -25,12 +25,13 @@ The current prototype puts the player in a repair-oriented world where they prog
## Routes ## Routes
| Route | Purpose | | Route | Purpose |
| --------- | --------------------------------------------------- | | ---------- | --------------------------------------------------- |
| `/` | Playable 3D experience | | `/` | Playable 3D experience |
| `/?debug` | Playable scene with debug GUI and overlays | | `/?debug` | Playable scene with debug GUI and overlays |
| `/editor` | Local map, dialogue, subtitle, and cinematic editor | | `/editor` | Local map, dialogue, subtitle, and cinematic editor |
| `/docs` | In-app documentation index | | `/galerie` | 3D model gallery for browsing project assets |
| `/docs` | In-app documentation index |
## Tech Stack ## Tech Stack
@@ -98,6 +99,7 @@ Useful local URLs:
```txt ```txt
http://localhost:5173/?debug http://localhost:5173/?debug
http://localhost:5173/editor http://localhost:5173/editor
http://localhost:5173/galerie
http://localhost:5173/docs http://localhost:5173/docs
``` ```
@@ -148,6 +150,7 @@ WS ws://localhost:8000/ws
| `docs/user/features.md` | Implemented feature inventory | | `docs/user/features.md` | Implemented feature inventory |
| `docs/user/main-feature.md` | User-facing repair-game walkthrough | | `docs/user/main-feature.md` | User-facing repair-game walkthrough |
| `docs/user/editor.md` | Editor user guide | | `docs/user/editor.md` | Editor user guide |
| `docs/user/gallery.md` | Model gallery user guide |
| `docs/code-review-preparation.md` | French code-review preparation support | | `docs/code-review-preparation.md` | French code-review preparation support |
## Current Caveats ## Current Caveats
+41
View File
@@ -0,0 +1,41 @@
# Galerie des modèles
La galerie est disponible sur `/galerie`. Elle permet de parcourir les modèles 3D présents dans `public/models/` sans lancer la boucle de gameplay principale.
## Objectif
Cette page sert à remercier et valoriser le travail des designers du projet La Fabrik. Chaque modèle est affiché dans un canvas dédié, avec la même skybox que l'expérience principale pour garder une ambiance visuelle cohérente.
## Utilisation
1. Ouvrir `/galerie`.
2. Utiliser les flèches pour passer au modèle précédent ou suivant.
3. Tourner autour du modèle avec la souris ou le doigt.
4. Lire le chemin affiché pour retrouver le fichier source dans `public/models/`.
## Fonctionnement
- La liste des modèles est déclarée dans `src/data/galleryModels.ts`.
- Le viewer utilise `@react-three/fiber` et `@react-three/drei`.
- `OrbitControls` permet de manipuler la caméra autour du modèle.
- `Bounds` et `Center` recadrent automatiquement le modèle actif.
- `SkyModel` réutilise la skybox du jeu.
- Les animations GLTF présentes dans un modèle sont lancées automatiquement.
## Ajouter un modèle
1. Ajouter le dossier du modèle dans `public/models/{nom}`.
2. Vérifier que le modèle possède un fichier chargeable, par exemple `model.gltf`, `model.glb` ou un nom explicite comme `potager.gltf`.
3. Ajouter une entrée dans `src/data/galleryModels.ts` avec un `id`, un `name` et un `path`.
Exemple :
```ts
{ id: "nouveau-modele", name: "Nouveau modèle", path: "/models/nouveau-modele/model.gltf" }
```
## Limites connues
- Le navigateur ne liste pas automatiquement les dossiers de `public/models/`, donc la liste reste déclarative.
- Les modèles très lourds peuvent prendre du temps à charger.
- La galerie est un viewer simple : elle ne remplace pas les outils d'inspection avancée comme Blender ou le viewer d'upload.
+7 -1
View File
@@ -109,6 +109,12 @@ export const docGroups: DocGroup[] = [
subtitle: "Components and usage", subtitle: "Components and usage",
meta: "15", meta: "15",
}, },
{
path: "/docs/gallery",
title: "Model Gallery",
subtitle: "Browsing 3D assets",
meta: "16",
},
], ],
}, },
{ {
@@ -118,7 +124,7 @@ export const docGroups: DocGroup[] = [
path: "/docs/code-review", path: "/docs/code-review",
title: "Code Review Prep", title: "Code Review Prep",
subtitle: "Presentation support", subtitle: "Presentation support",
meta: "16", meta: "17",
}, },
], ],
}, },
+13
View File
@@ -0,0 +1,13 @@
import gallery from "../../../../docs/user/gallery.md?raw";
import { DocsDocument } from "@/components/docs/DocsDocument";
export function DocsGalleryPage(): React.JSX.Element {
return (
<DocsDocument
content={gallery}
frContent={gallery}
meta="16"
title="Model Gallery"
/>
);
}
+2
View File
@@ -14,6 +14,7 @@ import {
DocsCodeReviewRoute, DocsCodeReviewRoute,
DocsEditorRoute, DocsEditorRoute,
DocsFeaturesRoute, DocsFeaturesRoute,
DocsGalleryRoute,
DocsHandTrackingRoute, DocsHandTrackingRoute,
DocsInteractionRoute, DocsInteractionRoute,
DocsLayoutRoute, DocsLayoutRoute,
@@ -73,6 +74,7 @@ const docsChildRoutes = [
{ path: "main-feature", component: DocsMainFeatureRoute }, { path: "main-feature", component: DocsMainFeatureRoute },
{ path: "editor", component: DocsEditorRoute }, { path: "editor", component: DocsEditorRoute },
{ path: "animation", component: DocsAnimationRoute }, { path: "animation", component: DocsAnimationRoute },
{ path: "gallery", component: DocsGalleryRoute },
{ path: "code-review", component: DocsCodeReviewRoute }, { path: "code-review", component: DocsCodeReviewRoute },
].map(({ path, component }) => ].map(({ path, component }) =>
createRoute({ createRoute({
+5
View File
@@ -87,6 +87,10 @@ const LazyDocsAnimationPage = lazyNamed(
() => import("@/pages/docs/animation/page"), () => import("@/pages/docs/animation/page"),
"DocsAnimationPage", "DocsAnimationPage",
); );
const LazyDocsGalleryPage = lazyNamed(
() => import("@/pages/docs/gallery/page"),
"DocsGalleryPage",
);
const LazyDocsCodeReviewPage = lazyNamed( const LazyDocsCodeReviewPage = lazyNamed(
() => import("@/pages/docs/code-review/page"), () => import("@/pages/docs/code-review/page"),
"DocsCodeReviewPage", "DocsCodeReviewPage",
@@ -119,6 +123,7 @@ export const DocsFeaturesRoute = createDocsRoute(LazyDocsFeaturesPage);
export const DocsMainFeatureRoute = createDocsRoute(LazyDocsMainFeaturePage); export const DocsMainFeatureRoute = createDocsRoute(LazyDocsMainFeaturePage);
export const DocsEditorRoute = createDocsRoute(LazyDocsEditorPage); export const DocsEditorRoute = createDocsRoute(LazyDocsEditorPage);
export const DocsAnimationRoute = createDocsRoute(LazyDocsAnimationPage); export const DocsAnimationRoute = createDocsRoute(LazyDocsAnimationPage);
export const DocsGalleryRoute = createDocsRoute(LazyDocsGalleryPage);
export const DocsCodeReviewRoute = createDocsRoute(LazyDocsCodeReviewPage); export const DocsCodeReviewRoute = createDocsRoute(LazyDocsCodeReviewPage);
export const DocsMissionFlowRoute = createDocsRoute(LazyDocsMissionFlowPage); export const DocsMissionFlowRoute = createDocsRoute(LazyDocsMissionFlowPage);
export const DocsThreeDebuggingRoute = createDocsRoute( export const DocsThreeDebuggingRoute = createDocsRoute(