Fix critique : normales murs inversées
Problème : (dz, 0, -dx)/L = perpendiculaire DROITE = normale SORTANTE (vers l’extérieur).
Les murs étaient sombres car la normale pointait à l’opposé du joueur et de la headlight.
Fix : (-dz, 0, dx)/L = perpendiculaire GAUCHE = normale ENTRANTE (vers l’intérieur de la zone).
leftPt ──────────────► rightPt
direction →
intérieur = côté GAUCHE
normale correcte = (-dz, 0, dx)/L
Fichiers corrigés : LevelSceneBuilder, LevelGeometry, DoorSystem, DoorControl
Fix : FaceCullMode.Off sur tous les matériaux
Dans un donjon, les murs/sols/plafonds sont vus des deux côtés.
Le flip Z (jme.z = -worldZ) peut inverser le winding des polygones de sol/plafond.
Solution : désactiver le backface culling sur tous les matériaux.
mat.getAdditionalRenderState().setFaceCullMode(RenderState.FaceCullMode.Off);
Fix : Ambient 0.5 dans les matériaux
Ambient = (0.5, 0.5, 0.5) → les zones sombres (brightness=0) restent partiellement visibles.
La headlight PointLight et les lumières de zones ajoutent l’éclairage directionnel.
Fix : textures dans .j3o
Ordre obligatoire : convertAssets AVANT buildScenes.
Si texMat() ne trouve pas la PNG → warning (pas de crash) → fallback magenta.
Le .j3o sauvegarde les références de textures par chemin relatif (Textures/walls/...).
Au runtime, JME retrouve les PNG via le subproject assets/ sur le classpath.
gradle.properties — toutes les tâches documentées
Actions NetBeans custom (clic droit → Custom) :
1 - Copy Amiga resources copyResources
2 - Convert assets convertAssets
3 - Convert levels convertLevels
4 - Build scenes buildScenes
5 - Setup ALL setupAll (pipeline complet)
6 - Resources status resourcesStatus
7 - Clean generated assets cleanResources
JVM daemon Gradle : org.gradle.jvmargs=-Xmx2g