Aller au contenu principal

Session 71 — Fix portes : ne rendre que la vue exterieure

Symptome apres session 70

Comparaison entre notre version et l’original :

  • Original (image Amiga) : la porte zone 30 affiche 1-2 pans de
    chevrondoor (hazard stripes) selon l’angle de vue – c’est une porte
    simple avec une face visible
    .
  • Notre version : la porte affiche 2 pans hazard lateraux correctement,
    mais au MILIEU apparaissent des bandes verticales sombres avec un
    degrade etrange – on voit a travers les pans avants les pans arrieres
    de la porte.

Diagnostic

La zone 30 est un volume octogonal (6 edges) entoure de 6 zones
voisines. Dans l’original, chaque mur de l’octogone est visible UNIQUEMENT
depuis sa zone voisine (vue « exterieure »). Ce sont 6 murs distincts, pas 6
faces d’une meme porte.

Notre code rendait TOUS les murs de la zone-porte comme pans animes, meme
ceux vus depuis la zone-porte elle-meme. Cela creait une double-paroi :
– Les pans « exterieurs » (vus depuis la zone voisine) : corrects
– Les pans « interieurs » (vus depuis la zone-porte) : dupliques, causant
Z-fighting et affichage des pans arrieres a travers les avants

La session 70 aggravait le probleme en ecrivant prioritairement la vue
interieure via le flag isInsideView, donnant des donnees texture
incorrectes.

Fix

LevelSceneBuilder.java (boucle detection portes) :

  • N’enregistrer QUE la vue exterieure (zid != doorZoneId) dans
    DoorAccum. La vue interieure est ignoree (continue).
  • Suppression de la logique « priorite vue interieure » : un seul pan par
    mur visible, donnees texture prises telles quelles depuis le
    WallRenderEntry.
  • addSeg(..., isInsideView=false) est toujours appele avec false
    desormais (parametre conserve pour compatibilite mais non utilise).

Verification

Apres rebuild (./gradlew buildScenes), la porte zone 30 (level A) doit
afficher :
– Les pans chevrondoor (jaune/noir) nets, sans bandes sombres au milieu
– Une seule paroi visible par angle de vue (pas de double-rendu)

Les autres portes (simples, 1-2 pans) doivent continuer de fonctionner.

Code en reference

  • zone_liftable_pvs.c : chaque ZDoorWall correspond a UN mur visible
    depuis UNE zone voisine, pas a une paire de faces.
  • PVS original : la zone-porte n’est pas rendue depuis son propre volume
    tant que la porte est fermee.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *