Aller au contenu principal

Session 61 — VectObj : fix nombre de vertex = numLines+1

Probleme

Apres session 60 la geometrie etait bonne mais il manquait des faces.

Diagnostic

Le passkey a des polygones avec numLines=3 mais contient des quads
(4 vertices) : par exemple le face arriere ptIdx [3,2,1,0] = le rectangle
au plan Z=-16 (tous les 4 points ont z=-16, coplanaires).

Avec numVerts = numLines = 3, on lisait seulement 3 des 4 vertices du quad,
generant un seul triangle au lieu de 2. Resultat : environ la moitie des
faces manquantes
.

Preuve ASM (draw_PutInLines l.3352-3357)

this_line_flat:
    addq    #4, a1              ; avance vers vertex suivant
    dbra    d7, draw_PutInLines ; boucle numLines+1 fois (d7=numLines -> -1)
    addq    #4, a1              ; +4 final apres la boucle
    rts

La boucle tourne numLines+1 fois, chaque iteration dessine un edge
v[i] -> v[i+1]. Pour un polygone FERME a V vertices il faut exactement
V edges donc V = numLines + 1.

Verification budget polygone

polySize = 18 + numLines*4  (verifie par lea 18(a1,d0.w*4),a1)

= 4 bytes header (numLines + flags)
+ 4*(numLines+1) bytes vertex list  <- V = numLines+1 vertex reels
+ 4 bytes 1 vertex phantom (lu par PutInLines mais ignore)
+ 6 bytes footer (texOffset WORD + brightness BYTE + polyAngle BYTE + gouraud WORD)
= 4 + 4*numLines + 4 + 4 + 6 = 4*numLines + 18 ✓

Exemple passkey polygone 1

0070: 00 03 00 00 | 00 03 20 10 | 00 02 30 10 | 00 01 30 20 | 00 00 20 20 | ...
         N=3  fl        v[0]=3       v[1]=2       v[2]=1       v[3]=0 <-- FIX

Les 4 vertices pointent vers les pts 3,2,1,0 -> rectangle face Z=-16
(tous les points ont z=-16, verifie coplanarite).

Correction

// AVANT
int numVerts = numLines;          // QUAD lu comme TRI -> 1 tri au lieu de 2

// APRES
int numVerts = numLines + 1;      // QUAD lu comme QUAD -> fan 2 tris

Impact attendu

Les polygones reel du modele ont maintenant le bon nombre de sommets :
– numLines=2 -> 3 sommets = triangle
– numLines=3 -> 4 sommets = quad (fan 2 triangles)
– numLines=4 -> 5 sommets = pentagon (fan 3 triangles)
– etc.

Faces qui manquaient devraient etre maintenant visibles.

Laisser un commentaire

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