tweak(ship-3d): pitch -120° i naus planes (sense extrusió)

This commit is contained in:
2026-05-22 09:39:19 +02:00
parent 85e1933a83
commit 2faa3ede84
2 changed files with 19 additions and 13 deletions
+14 -9
View File
@@ -125,18 +125,19 @@ namespace Graphics {
const float HALF = depth * 0.5F;
const Vec2 CENTRE = shape.getCenter();
// Si depth <= 0, emetem només un pla (sense vèrtexs back ni connexions)
// per evitar arestes degenerades i acumulació additiva de brightness.
const bool FLAT = (depth <= 0.0F);
for (const auto& primitive : shape.getPrimitives()) {
if (primitive.points.size() < 2) {
continue;
}
// Reserva: 2 còpies (front/back) de cada vèrtex de la primitiva.
const auto BASE = static_cast<std::uint16_t>(mesh.vertices.size());
const auto N = static_cast<std::uint16_t>(primitive.points.size());
// Insereix vèrtexs frontals (z = +HALF) i posteriors (z = -HALF).
// Còpia centrada respecte al "center" del shape.
// Vèrtexs frontals (z = +HALF, o z = 0 si FLAT).
for (const auto& p : primitive.points) {
mesh.vertices.push_back(Vec3{
.x = p.x - CENTRE.x,
@@ -144,6 +145,16 @@ namespace Graphics {
.z = HALF,
});
}
// Arestes "frontals": connecten punts consecutius de la polyline.
for (std::uint16_t i = 0; i + 1 < N; ++i) {
mesh.edges.emplace_back(BASE + i, BASE + i + 1);
}
if (FLAT) {
continue;
}
// Vèrtexs posteriors (z = -HALF) i arestes corresponents.
for (const auto& p : primitive.points) {
mesh.vertices.push_back(Vec3{
.x = p.x - CENTRE.x,
@@ -151,12 +162,6 @@ namespace Graphics {
.z = -HALF,
});
}
// Arestes "frontals": connecten punts consecutius de la polyline al davant.
for (std::uint16_t i = 0; i + 1 < N; ++i) {
mesh.edges.emplace_back(BASE + i, BASE + i + 1);
}
// Arestes "posteriors": idem al darrere.
for (std::uint16_t i = 0; i + 1 < N; ++i) {
mesh.edges.emplace_back(BASE + N + i, BASE + N + i + 1);
}
+5 -4
View File
@@ -15,14 +15,15 @@ namespace Title {
namespace {
// Profunditat d'extrusió de la silueta 2D de la nau (en unitats mundials).
// Mantenir-la xicoteta: l'usuari vol naus "casi 2D" amb alçada mínima.
constexpr float SHIP_EXTRUSION_DEPTH = 1.5F;
// 0.0F → emet només la silueta plana (extrudeShape2D salta vèrtexs back
// i connexions). Tornar a >0 per recuperar el volum extrudit.
constexpr float SHIP_EXTRUSION_DEPTH = 0.0F;
// Rotació pitch que aplica el draw() per orientar la silueta cap al punt
// de fuga: el Y2D negatiu del shape (la punta) passa a +Z mundial.
// Inclinem ~18° més enllà de -π/2 perquè el "cul" baixe i la punta puje;
// Inclinem ~30° més enllà de -π/2 perquè el "cul" baixe i la punta puje;
// així la càmera (a Y=0, una mica per damunt de les naus) veu el dors.
constexpr float SHIP_PITCH_RAD = -1.8850F; // -108°
constexpr float SHIP_PITCH_RAD = -2.0944F; // -12
// 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