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