Problème affichage texture



  • Bonjour,

    J'ai un soucis avec l'affichage d'une texture sur l'écran de jeu, en effet les couleurs ne sont pas correct.
    Voici à quoi ressemble la texture :

    et le rendu que j'ai :

    Voici le code que j'utilise :

    %(#000000)[ @SideOnly(Side.CLIENT)
    public void drawNewElement(RenderGameOverlayEvent.Post event) {
    
    Minecraft mc = Minecraft.getMinecraft();
    Utilitaire utilitaire = new Utilitaire(mc);
    
           ScaledResolution scaledresolution = new ScaledResolution(mc.gameSettings, mc.displayWidth, mc.displayHeight);
    int k = scaledresolution.getScaledWidth();
           int l = scaledresolution.getScaledHeight();
    
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
           GL11.glEnable (GL11.GL_BLEND);
           mc.getTextureManager().bindTexture(guiCustom);
    
           //affichage de la hotbar
           InventoryPlayer inventoryplayer = mc.thePlayer.inventory;
           this.zLevel = -90.0F;
           this.drawTexturedModalRect(k / 2-112, l - 22, 0, 102, 235, 22);
    
           //affichage des item
           for (int i1 = 0; i1 < 9; ++i1)
           {
               int j1 = k / 2 - 72 + i1 * 20 + 2;
               int k1 = l - 16 - 3;
               this.renderInventorySlot(i1, j1, k1, 0.6F, mc);
           }
           RenderHelper.disableStandardItemLighting();
           GL11.glDisable(GL12.GL_RESCALE_NORMAL);
           this.mc.mcProfiler.endSection();
    
           mc.getTextureManager().bindTexture(guiCustom);
    
           //affichage curseur sélection
           this.drawTexturedModalRect(k / 2 - 64 - 1 + inventoryplayer.currentItem * 20, l - 4 - 1, 23, 57, 9, 4);      
    }]
    

    Avez vous une idée ?


  • Administrateurs

    Salut,
    Sans la boucle for en dessous de //affichage des item ça donne quoi ?



  • @'robin4002':

    Salut,
    Sans la boucle for en dessous de         //affichage des item ça donne quoi ?

    Pareil 😞



  • Alors il y a plusieurs problèmes, déjà ce code est appelé plusieurs fois à chaque draw de la fenêtre, il est tout le temps appelé que ce soit au moment de la vie, de la croix pour viser, ou de la hotbar, ensuite tu ne cancel pas l'event vanilla et tu as à la fin "this.mc.mcProfiler.endSection();" mais aucun code qui commence une section au début, donc retire ça.
    Ensuite pour le problème que tu as essaye de mettre "RenderHelper.enableStandardItemLighting();" avant le premier bind de texture.

    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk



  • @'AymericRed':

    Alors il y a plusieurs problèmes, déjà ce code est appelé plusieurs fois à chaque draw de la fenêtre, il est tout le temps appelé que ce soit au moment de la vie, de la croix pour viser, ou de la hotbar, ensuite tu ne cancel pas l'event vanilla et tu as à la fin "this.mc.mcProfiler.endSection();" mais aucun code qui commence une section au début, donc retire ça.
    Ensuite pour le problème que tu as essaye de mettre "RenderHelper.enableStandardItemLighting();" avant le premier bind de texture.

    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk

    Je cancel les event juste au dessus :

    public void clean(RenderGameOverlayEvent.Pre event) {
    Minecraft mc = Minecraft.getMinecraft();
    if (event.type == RenderGameOverlayEvent.ElementType.ARMOR) {
    //on efface ?
    event.setCanceled(true);
    }
    if(event.type == RenderGameOverlayEvent.ElementType.EXPERIENCE) {
    event.setCanceled(true);
    }
    if(event.type == RenderGameOverlayEvent.ElementType.FOOD) {
    event.setCanceled(true);
    }
    if(event.type == RenderGameOverlayEvent.ElementType.HEALTH) {
    event.setCanceled(true);
    }
    if(event.type == RenderGameOverlayEvent.ElementType.HOTBAR) {
    event.setCanceled(true);
    }
    
    }
    

    Pour l'appel à chaque draw de la fenêtre je vois pas trop comment faire car quand je rajoute par exemple "if(event.type == RenderGameOverlayEvent.ElementType.HOTBAR)" mes éléments ne s'affichent plus.

    Pour "RenderHelper.enableStandardItemLighting();" il n'y a aucun changement 😞



  • Ah d'accord ^^
    Bah du coup c'est pas un problème comme tu cancel tout c'est pas draw à chaque fois, mais sinon le if(c'est la hotbar) marche pas comme il est cancel juste avant.

    Essaye de mettre cela (RenderHelper.enableStandardItemLighting();) juste avant le for pour voir, sinon je comparerais avec mon code demain si toujours pas résolu 🙂

    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk



  • @'AymericRed':

    Ah d'accord ^^
    Bah du coup c'est pas un problème comme tu cancel tout c'est pas draw à chaque fois, mais sinon le if(c'est la hotbar) marche pas comme il est cancel juste avant.

    Essaye de mettre cela (RenderHelper.enableStandardItemLighting();) juste avant le for pour voir, sinon je comparerais avec mon code demain si toujours pas résolu 🙂

    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk

    Quand je le mets avant le for c'est toujours pareil. Mais même quand j'enlève totalement ce qui est dans le for la texture de la hotbar s'affiche avec les carrés noirs.



  • Alors selon mon code et celui de Minecraft, voici la structure de code pour le rendu d'une hotbar :

           GL11.glEnable(GL11.GL_BLEND);
           GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    
           InventoryPlayer inv = mc.thePlayer.inventory;
    //Rendu de l'image de la hotbar
    
           GL11.glDisable(GL11.GL_BLEND);
           GL11.glEnable(GL12.GL_RESCALE_NORMAL);
           RenderHelper.enableGUIStandardItemLighting();
    
    //Rendu des items dans les slots (le for)
    
           RenderHelper.disableStandardItemLighting();
           GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    

    Il fallait donc bien utiliser le RenderHelper sauf que je t'ai donné "RenderHelper.enableStandardItemLighting();" au lieu de "RenderHelper.enableGUIStandardItemLighting();" mais il y aussi des fonctions de blend qui peuvent améliorer le rendu.



  • @'AymericRed':

    Alors selon mon code et celui de Minecraft, voici la structure de code pour le rendu d'une hotbar :

           GL11.glEnable(GL11.GL_BLEND);
           GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    
           InventoryPlayer inv = mc.thePlayer.inventory;
    //Rendu de l'image de la hotbar
    
           GL11.glDisable(GL11.GL_BLEND);
           GL11.glEnable(GL12.GL_RESCALE_NORMAL);
           RenderHelper.enableGUIStandardItemLighting();
    
    //Rendu des items dans les slots (le for)
    
           RenderHelper.disableStandardItemLighting();
           GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    

    Il fallait donc bien utiliser le RenderHelper sauf que je t'ai donné "RenderHelper.enableStandardItemLighting();" au lieu de "RenderHelper.enableGUIStandardItemLighting();" mais il y aussi des fonctions de blend qui peuvent améliorer le rendu.

    Salut, merci pour ta réponse mais j'ai fait exactement ce que tu as dis mais j'ai toujours le même problème 😞



  • up, personne n'a la solution ?