J’ai trouvé une solution. Le problème, c’est que pour les éléments que j’ajoute au modèle, je n’indiquais pas quel étais le vecteur normal de cette élément donc comme la luminosité est calculée à partir de ce vecteur, elle ne peux pas être calculée correctement. Pour corriger ce problème, j’utilise un UnpackedBakedQuad (ça doit être aussi possible de la faire avec un BakedQuad normal, mais j’ai pas trouvé comment et les UnpackedBakedQuad sont plus pratiques). Voici la fonction que j’utilise pour ajouter un élément:
private static UnpackedBakedQuad putQuad(VertexFormat format, EnumFacing side, int color, float minX, float minY, float maxX, float maxY, float z, float minU, float minV, float maxU, float maxV)
{
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(format);
builder.setQuadTint(-1);
builder.setQuadOrientation(side);
builder.setQuadColored();
putVertex(builder, format, side, minX, minY, z, minU, maxV, color);
putVertex(builder, format, side, minX, maxY, z, minU, minV, color);
putVertex(builder, format, side, maxX, maxY, z, maxU, minV, color);
putVertex(builder, format, side, maxX, minY, z, maxU, maxV, color);
return builder.build();
}
private static void putVertex(UnpackedBakedQuad.Builder builder, VertexFormat format, EnumFacing side, float x, float y, float z, float u, float v, int color)
{
for (int e = 0; e < format.getElementCount(); e++)
{
switch (format.getElement(e).getUsage())
{
case POSITION:
builder.put(e, x, y, z, 1);
break;
case COLOR:
float r = ((color >> 16) & 0xFF) / 255f; // red
float g = ((color >> 8) & 0xFF) / 255f; // green
float b = ((color >> 0) & 0xFF) / 255f; // blue
float a = ((color >> 24) & 0xFF) / 255f; // alpha
builder.put(e, r, g, b, a);
break;
case UV:
if (format.getElement(e).getIndex() == 0)
{
builder.put(e, u, v, 0f, 1f);
break;
}
case NORMAL:
builder.put(e, (float) side.getFrontOffsetX(), (float) side.getFrontOffsetY(), (float) side.getFrontOffsetZ(), 0f);
break;
default:
builder.put(e);
break;
}
}
}
Je passe donc se sujet en résolu même si ça fait plus d’un an ! 😄