Model sombre sauf dans l'inventaire



  • Salut à tous !

    J'ai récemment mis mon dernier sujet (https://www.minecraftforgefrance.fr/showthread.php?tid=3234) parlant notamment d'un model en résolu. Mais je me suis aperçu que lorsque mon l'item utilisant mon model custom était dans la main d'un joueur ou sur un item frame, la parti modifiée par le model était plus sombre que lorsque l'item est affiché dans un gui. (L'affichage dans les gui est bon, c'est l'affichage en dehors des gui qui n'est pas bon) Si quelqu'un a une idée pour éclaircir le model lorsqu'on l'a dans la main, je suis preneur !

    Pour information j'utilise un model avec ISmartItemModel et IPerspectiveAwareModel qui se basse sur un model vanilla en .json, j’utilise les évents TextureStitchEvent.Pre et ModelBakeEvent.

    Voici deux exemples pour illustrer cela (à gauche, dans un item frame, à droite dans un gui):

    0_1537628659526_2016-05-28_13.01.32++.png
    0_1537628664716_2016-05-28_13.02.13++.png



  • Personne n'a d'idée ? Dites moi si il faut que j'envoie une de mes class.



  • Est-ce que tu as de la transparence ? Et essaie de placer l'item frame à différentes coordonnées pour voir s'il y a du changement



  • Pour la transparence, je n'ai que des pixels transparents à 100 % ce n'ai pas un problème de position ou de direction de l'itemFrame puis que j'ai des itemFrames un peut partout et sa le faut aussi pour afficher l'item en 1° ou 3° personne (quand on l'a dans la main).



  • Je suis désolé mais j'ai très peu de connaissances au niveau du rendu en 1.8 donc je peux pas t'aider plus que ça



  • Toujours personne n'a d'idée ? Je ne m'y connais pas trop en model, donc il y a des chances que je me soit trompé quelque part.



  • 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 ! 😄