Probleme decouvert apres test session 79
Les modeles vectobj (crab surtout) avaient toujours des textures manquantes
apres le fix de session 79 (transparence index palette 0 sur l’atlas). Les
zones noires ont ete remplacees par des zones traversantes (on voit a
travers le corps du crab).
Cause racine : mauvaise lecture de l’ASM
L’outil VectObjFlagsInventory de session 79 interpretait gouraud != 0
comme le mode GLARE. C’est faux.
La vraie structure dans objdrawhires.s :
draw_PreGouraud_b: dc.b 0 ; written as WORD (so writes also to next byte)
draw_Gouraud_b: dc.b 0 ; tested as BYTE
draw_PreHoles_b: dc.b 0 ; written as WORD
draw_Holes_b: dc.b 0 ; tested as BYTE
Quand move.w (a1)+, draw_PreHoles_b s’execute :
– byte HAUT du WORD → draw_PreHoles_b
– byte BAS du WORD → draw_Holes_b (byte suivant en memoire)
Les tests sont sur les bytes bas/haut :
– tst.b draw_Holes_b → byte BAS @ poly+2 → drawpolh (skip idx0)
– tst.b draw_Gouraud_b → byte BAS @ poly+N4+16 → drawpolg (shading normal, TOUT dessine)
– tst.b draw_PreGouraud_b → byte HAUT @ poly+N4+16 → drawpolGL (glare, skip idx0)
Pour les polys du crab : gouraud = 0x0001 donc byte HAUT = 0 (pas glare),
byte BAS = 1 (mode GOURAUD normal). drawpolg dessine TOUS les pixels,
y compris index 0. Donc l’atlas doit etre opaque.
Fix (revert session 79 + correction outil diagnostic)
TextureMapConverter.java : revert a TYPE_INT_RGB, index 0 → rgb(0,0,0)
opaque comme avant session 79.
VectObjConverter.buildMaterial() : suppression de AlphaDiscardThreshold
et BlendMode.Alpha (inutiles, le rendu normal suffit).
VectObjFlagsInventory.java : correction pour decoder correctement les
bytes haut/bas des WORDs flags et gouraud, avec trois modes distincts :
HOLES, gouraud, GLARE.
Consequence pour les vraies textures manquantes
Les tiles 22 et 26 du crab ont ~40-50% de pixels d’index palette 0 qui se
rendent en noir rgb(0,0,0) sur l’atlas. Ce n’est PAS un bug de rendu, c’est
le comportement original de l’Amiga : drawpolg dessine ces pixels en noir.
Le vrai probleme des textures du crab est ailleurs et sera investigue
en session 81. Pistes :
– Le shade level (brightness) applique peut rendre la texture totalement noire
– Le mapping UV tile 64×64 peut etre legerement mal aligne
– L’ordre/offset des points dans la tile peut etre inverse
Fichiers modifies
src/main/java/com/ab3d2/tools/TextureMapConverter.java: revert RGB opaquesrc/main/java/com/ab3d2/tools/VectObjConverter.java: suppression alphasrc/main/java/com/ab3d2/tools/VectObjFlagsInventory.java: decodage correct