feat(data-only): mode openpos #9 (skeleton)
Ajoute un 10e viz_mode 'openpos' dans data_only_viz pour afficher le squelette multi-personne sur un fond minimal qui met en valeur les corps detectes. state.py : - viz_mode_names complete avec 'openpos' a l'index 9 - KEYMAP_VIDEO : touche 'p' -> openpos (slot precedemment libre) shaders/scene.metal : - nouveau mode_openpos : fond radial sombre avec une grille de points discrete + pulsation legere sur ~rms. Le bg sert juste a faire ressortir le skel_pipeline rendu PAR-DESSUS par le renderer (qui beneficie deja du depth_fog + palette par pid + epaisseur confiance-adaptee). - bg_fragment dispatcher : mode == 9 -> mode_openpos web/public/control.html : - 10e bouton 'openpos' dans la grille #vizmodes.
This commit is contained in:
@@ -426,6 +426,25 @@ float3 mode_hands3d(float2 p, constant SceneUniforms& U) {
|
||||
return col;
|
||||
}
|
||||
|
||||
// ---- 9 openpos : fond minimal radial pour faire ressortir le squelette ----
|
||||
// Le rendu des joints + bones se fait par le skel_pipeline rendu PAR-DESSUS
|
||||
// (cf renderer.py). On laisse juste un degrade radial sombre pour le contraste.
|
||||
float3 mode_openpos(float2 p, constant SceneUniforms& U) {
|
||||
float r = length(p);
|
||||
// Centre legerement plus clair, bords sombres. Touche de couleur
|
||||
// chaude au centre selon rms pour reagir a la musique.
|
||||
float3 inner = float3(0.05, 0.05, 0.10) + float3(0.30, 0.12, 0.18) * U.rms;
|
||||
float3 outer = float3(0.01, 0.01, 0.02);
|
||||
float3 col = mix(inner, outer, smoothstep(0.0, 1.4, r));
|
||||
// Grille de points discrete pour donner une ref de profondeur
|
||||
float2 g = fmod(p * 12.0, 2.0) - 1.0;
|
||||
float dot_grid = exp(-dot(g, g) * 6.0) * 0.04;
|
||||
col += float3(dot_grid);
|
||||
// Pulsation legere sur le kick / drop
|
||||
col *= 1.0 + U.rms * 0.4;
|
||||
return col;
|
||||
}
|
||||
|
||||
// ===== Fragment dispatcher =========================================
|
||||
|
||||
fragment float4 bg_fragment(VsOut in [[stage_in]],
|
||||
@@ -444,6 +463,7 @@ fragment float4 bg_fragment(VsOut in [[stage_in]],
|
||||
else if (mode == 6) color = mode_starfield(p, U);
|
||||
else if (mode == 7) color = mode_bars(p, U);
|
||||
else if (mode == 8) color = mode_hands3d(p, U);
|
||||
else if (mode == 9) color = mode_openpos(p, U);
|
||||
else color = mode_storm(p, U);
|
||||
|
||||
// Flash global + vignette
|
||||
|
||||
@@ -116,6 +116,7 @@ class State:
|
||||
"storm", "tunnel", "plasma", "kaleido",
|
||||
"voronoi", "metaballs", "starfield", "bars",
|
||||
"hands3d", # mode 8 : voyage 3D pilote par les mains
|
||||
"openpos", # mode 9 : skeleton multi-personne sur fond minimal
|
||||
)
|
||||
# Preset open-data actif (USGS, Blitz, Wind, Kp/Bz, X-ray, OpenSky,
|
||||
# Bsky, Pose, Cosmos) — affiche dans le HUD.
|
||||
@@ -153,7 +154,7 @@ KEYMAP_VIDEO: tuple[tuple[str, str], ...] = (
|
||||
("u", "starfield"),
|
||||
("i", "bars"),
|
||||
("o", "hands3d"), # voyage 3D pilote par les mains MediaPipe
|
||||
# p : libre
|
||||
("p", "openpos"), # skeleton multi-personne 3D-stylise
|
||||
)
|
||||
|
||||
KEYMAP_AUDIO: tuple[tuple[str, str], ...] = (
|
||||
|
||||
@@ -179,6 +179,7 @@
|
||||
<button class="scene-btn" data-viz="6">stars</button>
|
||||
<button class="scene-btn" data-viz="7">bars</button>
|
||||
<button class="scene-btn" data-viz="8">hands3d</button>
|
||||
<button class="scene-btn" data-viz="9">openpos</button>
|
||||
</div>
|
||||
|
||||
<h2 style="margin-top:18px">Retour SC</h2>
|
||||
|
||||
Reference in New Issue
Block a user