fix(ship-3d): path únic VP→les7/les5 perquè initial, target i VP siguen col·lineals
This commit is contained in:
@@ -18,22 +18,23 @@ namespace Title {
|
||||
// 0.0F → emet només la silueta plana. >0 emet volum extrudit.
|
||||
constexpr float SHIP_EXTRUSION_DEPTH = 1.0F;
|
||||
|
||||
// Posicions en l'espai 3D (càmera a (0,0,0) mirant cap a +Z, Y cap amunt).
|
||||
constexpr float SHIP_FLOAT_X = 25.0F; // Separació horitzontal
|
||||
constexpr float SHIP_FLOAT_Y = -8.0F; // Lleugerament per davall del centre
|
||||
constexpr float SHIP_FLOAT_Z = 90.0F; // Distància de flotació (allunyada per fer-les més petites)
|
||||
|
||||
// Posició d'entrada (a prop de càmera, fora del frustrum lateral).
|
||||
constexpr float SHIP_ENTRY_X = 62.0F;
|
||||
constexpr float SHIP_ENTRY_Y = -15.0F;
|
||||
constexpr float SHIP_ENTRY_Z = 42.0F;
|
||||
|
||||
// Posició de fuga (al fons, centre projectat).
|
||||
// Punt de fuga (al fons, centre projectat). Tots els paths convergeixen aquí.
|
||||
constexpr float SHIP_EXIT_Z = 800.0F;
|
||||
|
||||
// Punt cap a on apunten les naus durant FLOATING i EXITING (centre lluny).
|
||||
constexpr Vec3 VANISHING_POINT{.x = 0.0F, .y = 0.0F, .z = SHIP_EXIT_Z};
|
||||
|
||||
// Directors VP → origen de cada nau, normalitzats. P1 ve des de "les 7"
|
||||
// del rellotge (baix-esquerra), P2 des de "les 5" (baix-dreta). El rellotge
|
||||
// envolta el VP en l'espai 3D; el seu centre coincideix amb el VP a pantalla.
|
||||
// Tots tres punts d'animació (initial, target, EXIT) cauen sobre aquesta
|
||||
// línia recta, així el forward_dir és constant i no hi ha "POP" en
|
||||
// canviar d'estat.
|
||||
constexpr Vec3 PATH_DIR_P1{.x = -0.286F, .y = -0.143F, .z = -0.949F};
|
||||
constexpr Vec3 PATH_DIR_P2{.x = +0.286F, .y = -0.143F, .z = -0.949F};
|
||||
|
||||
// Distàncies des del VP al llarg del path (unitats mundials).
|
||||
constexpr float TARGET_DIST = 540.0F; // Posició de descans (intermèdia)
|
||||
constexpr float ENTRY_DIST = 740.0F; // Posició inicial (més a prop de càmera)
|
||||
|
||||
// Look-at: calcula pitch+yaw que duen (0,-1,0) local a forward_dir mundial.
|
||||
// Requereix l'ordre de rotació X→Y→Z al applyTransform de wireframe3d.
|
||||
// Si forward és quasi vertical (sin(pitch) ≈ 0), retorna yaw=0 (qualsevol).
|
||||
@@ -282,15 +283,9 @@ namespace Title {
|
||||
void ShipAnimator3D::configureShipP1(TitleShip3D& ship) {
|
||||
ship.state = ShipState3D::FLOATING;
|
||||
ship.state_time = 0.0F;
|
||||
// Esquerra: x negatiu.
|
||||
ship.target_position = Vec3{
|
||||
.x = -SHIP_FLOAT_X,
|
||||
.y = SHIP_FLOAT_Y,
|
||||
.z = SHIP_FLOAT_Z};
|
||||
ship.initial_position = Vec3{
|
||||
.x = -SHIP_ENTRY_X,
|
||||
.y = SHIP_ENTRY_Y,
|
||||
.z = SHIP_ENTRY_Z};
|
||||
// Target i initial sobre el path VP → "les 7" del rellotge (P1).
|
||||
ship.target_position = VANISHING_POINT + (PATH_DIR_P1 * TARGET_DIST);
|
||||
ship.initial_position = VANISHING_POINT + (PATH_DIR_P1 * ENTRY_DIST);
|
||||
ship.current_position = ship.initial_position;
|
||||
ship.target_scale = SHIP_FLOAT_SCALE;
|
||||
ship.current_scale = SHIP_FLOAT_SCALE;
|
||||
@@ -308,15 +303,9 @@ namespace Title {
|
||||
void ShipAnimator3D::configureShipP2(TitleShip3D& ship) {
|
||||
ship.state = ShipState3D::FLOATING;
|
||||
ship.state_time = 0.0F;
|
||||
// Dreta: x positiu.
|
||||
ship.target_position = Vec3{
|
||||
.x = SHIP_FLOAT_X,
|
||||
.y = SHIP_FLOAT_Y,
|
||||
.z = SHIP_FLOAT_Z};
|
||||
ship.initial_position = Vec3{
|
||||
.x = SHIP_ENTRY_X,
|
||||
.y = SHIP_ENTRY_Y,
|
||||
.z = SHIP_ENTRY_Z};
|
||||
// Target i initial sobre el path VP → "les 5" del rellotge (P2).
|
||||
ship.target_position = VANISHING_POINT + (PATH_DIR_P2 * TARGET_DIST);
|
||||
ship.initial_position = VANISHING_POINT + (PATH_DIR_P2 * ENTRY_DIST);
|
||||
ship.current_position = ship.initial_position;
|
||||
ship.target_scale = SHIP_FLOAT_SCALE;
|
||||
ship.current_scale = SHIP_FLOAT_SCALE;
|
||||
|
||||
Reference in New Issue
Block a user