Aller au contenu principal

Session 67 — Fix final UV : swap U <-> V

Symptome

Apres sessions 65-66, la majorite des textures etaient correctes mais
certains polygones apparaissaient avec la mauvaise zone de texture :
– Rifle Part 12 : zones rouges vives au lieu de metal chrome
– Polygones avec patches marron/bois sur des armes metalliques
– Des motifs qui paraissaient tournes 90 deg ou decales

Diagnostic

Apres dump UV detaille via VectObjUVDump et analyse ligne par ligne
de draw_PutInLines dans objdrawhires.s :

move.b  2(a1), d2      ; byte +2 du vertex
...
move.l  d2, a6         ; a6 = xbitconst -> INCREMENTE AVEC X ECRAN

move.b  3(a1), d5      ; byte +3 du vertex
...
move.l  d5, a5         ; a5 = dy constant -> INCREMENTE AVEC Y ECRAN

X ecran -> COLONNE de la texture ; Y ecran -> LIGNE de la texture.

Donc :
– byte +2 (appele « U » historiquement) = COLONNE (axe horizontal)
– byte +3 (appele « V » historiquement) = LIGNE (axe vertical)

On avait code l’inverse depuis la session 62.

Fix

Dans VectObjConverter.readPolygons(), generation des UV vertex :

// AVANT (sessions 62-66, INCORRECT)
int colFinal = colStart + vtxV[v];
int rowFinal = rowStart + vtxU[v];

// APRES (session 67, CORRECT)
int colFinal = colStart + vtxU[v];   // byte +2 -> colonne
int rowFinal = rowStart + vtxV[v];   // byte +3 -> ligne

Methodologie de validation

Ajout de flags experimentaux via system properties :
-Dvectobj.flipU : miroir sur axe U (row = 63-U)
-Dvectobj.flipV : miroir sur axe V (col = 63-V)
-Dvectobj.swapUV : swap U<->V

Exposes via build.gradle avec -PflipU, -PflipV, -PswapUV.
Test empirique : -PswapUV correction parfaite du rifle (metal continu).

Nettoyage

Flags experimentaux retires du code definitif apres validation. Swap
applique en dur dans readPolygons(). Documentation du format binaire
mise a jour dans le JavaDoc de VectObjConverter pour eviter la confusion
future : byte +2 = V (colonne), byte +3 = U (ligne).

Pipeline

./gradlew convertVectObj   # regenere les j3o avec UV corrects

Laisser un commentaire

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