fix(ship-3d): exit convergeix al VP sense travessar-lo (sense creuament entre naus)

This commit is contained in:
2026-05-22 11:57:16 +02:00
parent 85e7e70767
commit a29c2b9cc2
+10 -10
View File
@@ -24,10 +24,11 @@ namespace Title {
constexpr float SHIP_EXIT_Z = 800.0F; constexpr float SHIP_EXIT_Z = 800.0F;
constexpr Vec3 VANISHING_POINT{.x = 0.0F, .y = 0.0F, .z = SHIP_EXIT_Z}; constexpr Vec3 VANISHING_POINT{.x = 0.0F, .y = 0.0F, .z = SHIP_EXIT_Z};
// Distància que la nau recorre durant EXITING, sumada al forward_dir // Profunditat addicional darrere del VP cap a la qual les naus exiting
// sobre la posició inicial de l'exit. La nau travessa el VP i continua // convergeixen. Així P1 (X<0) i P2 (X>0) mantenen sempre els seus
// allunyant-se per perspectiva fins gairebé desaparèixer per mida. // hemisferis i no es creuen al passar pel VP — totes dues acaben al
constexpr float SHIP_EXIT_TRAVEL = 2500.0F; // centre projectat (640, 360) sense travessar-lo.
constexpr float SHIP_EXIT_OVERFLOW = 700.0F;
// Directors VP → origen de cada nau, normalitzats. P1 ve des de "les 7" // Directors VP → origen de cada nau, normalitzats. P1 ve des de "les 7"
// del rellotge (baix-esquerra), P2 des de "les 5" (baix-dreta). Els // del rellotge (baix-esquerra), P2 des de "les 5" (baix-dreta). Els
@@ -283,13 +284,12 @@ namespace Title {
const float PROGRESS = std::min(1.0F, ship.state_time / EXIT_DURATION); const float PROGRESS = std::min(1.0F, ship.state_time / EXIT_DURATION);
const float EASED = Easing::easeInQuad(PROGRESS); const float EASED = Easing::easeInQuad(PROGRESS);
// Destí: forward_dir prolongat des de l'inici de l'exit. La nau // Destí: punt fix a (VP.x, VP.y, VP.z + OVERFLOW). Cada nau s'apropa
// segueix la mateixa línia recta (mateix path), travessa el VP i // al centre projectat des del seu costat sense creuar el VP.
// continua allunyant-se fins a la mida visual ~0.
const Vec3 EXIT_DEST{ const Vec3 EXIT_DEST{
.x = ship.initial_position.x + (ship.forward_dir.x * SHIP_EXIT_TRAVEL), .x = VANISHING_POINT.x,
.y = ship.initial_position.y + (ship.forward_dir.y * SHIP_EXIT_TRAVEL), .y = VANISHING_POINT.y,
.z = ship.initial_position.z + (ship.forward_dir.z * SHIP_EXIT_TRAVEL), .z = VANISHING_POINT.z + SHIP_EXIT_OVERFLOW,
}; };
ship.current_position.x = Easing::lerp(ship.initial_position.x, EXIT_DEST.x, EASED); ship.current_position.x = Easing::lerp(ship.initial_position.x, EXIT_DEST.x, EASED);
ship.current_position.y = Easing::lerp(ship.initial_position.y, EXIT_DEST.y, EASED); ship.current_position.y = Easing::lerp(ship.initial_position.y, EXIT_DEST.y, EASED);