• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Rendu avec la classe Tesselator et ISBRH

    Sans suite
    1.7.x
    3
    6
    1314
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • SCAREX
      SCAREX dernière édition par

      Bonjour, depuis quelques jours j’essaies de faire le rendu d’un de mes blocks (un panneau solaire), et j’aimerai pouvoir afficher dans le rendu dans le monde les panneaux photovoltaïques ajoutés depuis le GUI donc : j’aimerai pouvoir afficher des textures d’item en fonction du contenu de la tile entity. C’est donc pour cela que j’ai choisis d’utiliser le Tesselator plutôt que de faire le model sur Techne (aussi parce que Techne est bugué), malheureusement j’ai quelques problèmes :

      • le rendu dans la mains est mal placé : http://puu.sh/l0RVg.jpg
      • le block apparaît plus sombre dans ma barre d’inventaire lorsque j’ai un item en main (mais il est rendu correctement quand j’ouvre mon inventaire)
      • le rendu ne change pas beaucoup selon la luminosité
      • parfois le block disparaît ou est à moitié transparent sur le sol

      Voici l’ISBRH :

      package fr.scarex.csp.client.render.block;
      
      import org.lwjgl.opengl.GL11;
      
      import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
      import fr.scarex.csp.CSP;
      import fr.scarex.csp.block.AbstractBlock;
      import fr.scarex.csp.block.CSPBlocks;
      import fr.scarex.csp.block.SolarPanelFrame;
      import fr.scarex.csp.client.ClientProxy;
      import net.minecraft.block.Block;
      import net.minecraft.client.renderer.RenderBlocks;
      import net.minecraft.client.renderer.Tessellator;
      import net.minecraft.world.IBlockAccess;
      
      public class ISBRHSolarPanelFrame implements ISimpleBlockRenderingHandler
      {
         @Override
         public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
             Tessellator.instance.startDrawingQuads();
             if (block.getClass() == SolarPanelFrame.class) renderSolarPanel(renderer, 0, 0, 0, (SolarPanelFrame) block);
             Tessellator.instance.draw();
         }
      
         @Override
         public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
             if (block.getClass() == SolarPanelFrame.class) return renderSolarPanel(renderer, x, y, z, (SolarPanelFrame) block);
             return false;
         }
      
         @Override
         public boolean shouldRender3DInInventory(int modelId) {
             return true;
         }
      
         @Override
         public int getRenderId() {
             return ClientProxy.renderId;
         }
      
         public static boolean renderSolarPanel(RenderBlocks renderer, float x, float y, float z, SolarPanelFrame block) {
             Tessellator t = Tessellator.instance;
             t.addTranslation(x, y, z);
      
             t.setColorRGBA(0, 30, 180, 255); // la couleur bleu
             renderCube(t, 0, 0, 0, 1, 0.2, 1); // la base
             double middleWidth = 0.2; // la taille de la barre au milieu
             renderCube(t, 0.5 - (middleWidth / 2), 0.2, 0.5 - (middleWidth / 2), 0.5 + (middleWidth / 2), 0.8, 0.5 + (middleWidth / 2)); // le rendu de la barre
             renderCube(t, 0, 0.8, 0, 1, 0.95, 1); // le dessus
      
             t.setColorRGBA(0, 0, 0, 255); // en noir
             double frameWidth = 0.07; // la taille du cadre
             renderCube(t, 0, 0.95, 0, frameWidth, 1, 1); // rendus du cadre
             renderCube(t, 0, 0.95, 0, 1, 1, frameWidth);
             renderCube(t, 0, 0.95, 1 - frameWidth, 1, 1, 1);
             renderCube(t, 1 - frameWidth, 0.95, 0, 1, 1, 1);
      
             double middleFrameWidth = 0.2 - 2 * frameWidth; // taille de la barre du milieu
             renderCube(t, 0.5 - (middleFrameWidth / 2), 0.95, 0, 0.5 + (middleFrameWidth / 2), 1, 1); // rendus des barres du milieu
             renderCube(t, 0, 0.95, 0.5 - (middleFrameWidth / 2), 1, 1, 0.5 + (middleFrameWidth / 2));
      
             t.addTranslation(-x, -y, -z);
             return true;
         }
      
         public static void renderCube(Tessellator t, double x, double y, double z, double x1, double y1, double z1) {
             t.addVertex(x1, y, z);
             t.addVertex(x1, y, z1);
             t.addVertex(x, y, z1);
             t.addVertex(x, y, z);
      
             t.addVertex(x, y, z1);
             t.addVertex(x, y1, z1);
             t.addVertex(x, y1, z);
             t.addVertex(x, y, z);
      
             t.addVertex(x, y1, z1);
             t.addVertex(x, y, z1);
             t.addVertex(x1, y, z1);
             t.addVertex(x1, y1, z1);
      
             t.addVertex(x1, y1, z1);
             t.addVertex(x1, y, z1);
             t.addVertex(x1, y, z);
             t.addVertex(x1, y1, z);
      
             t.addVertex(x1, y1, z);
             t.addVertex(x1, y, z);
             t.addVertex(x, y, z);
             t.addVertex(x, y1, z);
      
             t.addVertex(x, y1, z);
             t.addVertex(x, y1, z1);
             t.addVertex(x1, y1, z1);
             t.addVertex(x1, y1, z);
         }
      }
      
      

      Merci d’avance.

      Site web contenant mes scripts : http://SCAREXgaming.github.io

      Pas de demandes de support par MP ni par skype SVP.
      Je n'accepte sur skype que l…

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        if (block.getClass() == SolarPanelFrame.class) renderSolarPanel(renderer, 0, 0, 0, (SolarPanelFrame) block);
        ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
              if (block.getClass() == SolarPanelFrame.class) renderSolarPanel(renderer, 0.5F, 0.5F, 0.5F, (SolarPanelFrame) block);
        ça devrait mettre le rendu dans l’inventaire au bon endroit. Par contre pour le reste je ne sais pas 😕

        1 réponse Dernière réponse Répondre Citer 0
        • SCAREX
          SCAREX dernière édition par

          J’ai réussi à améliorer quelques trucs mais j’ai des bugs de couleur : le bleu clignote

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 0
          • jglrxavpok
            jglrxavpok Modérateurs dernière édition par

            Avant ton rendu, désactives les textures:

            GL11.glDisable(GL11.GL_TEXTURE_2D)
            

            Et après l’appel de draw() du Tessellator, réactives les:

            GL11.glEnable(GL11.GL_TEXTURE_2D)
            

            Modérateur sur MFF. 
            Mon Github: http://github.com/jglrxavpok
            Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

            1 réponse Dernière réponse Répondre Citer 0
            • SCAREX
              SCAREX dernière édition par

              Toujours pareil dans le rendu dans le monde

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

              1 réponse Dernière réponse Répondre Citer 0
              • SCAREX
                SCAREX dernière édition par

                J’ai pu régler quelques problèmes : je fais le rendu du block via ISBRH et le rendu des items via TESR car le block clignote en TESR uniquement et on ne peut pas faire le rendu d’Items avec l’ISBRH.

                En revanche, j’ai remarqué que le block n’étais pas du tout rendu selon l’emplacement et que le rendu dans le monde était plus sombre lorsqu’il y avait un block avec un rendu spécial (type ISBRH) posé à côté.

                PS : toujours le même problème dans le rendu de l’inventaire, le block est plus sombre si je tient un item en main et le rendu disparaît si certains blocks sont affichés

                Site web contenant mes scripts : http://SCAREXgaming.github.io

                Pas de demandes de support par MP ni par skype SVP.
                Je n'accepte sur skype que l…

                1 réponse Dernière réponse Répondre Citer 0
                • 1 / 1
                • Premier message
                  Dernier message
                Design by Woryk
                Contact / Mentions Légales

                MINECRAFT FORGE FRANCE © 2018

                Powered by NodeBB