MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Rendu 3D translucide - Le retour

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    30 Messages 7 Publieurs 5.9k Vues 1 Watching
    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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      import STATIC
      http://patatos.over-blog.com/article-comment-faire-un-import-static-en-java-48226821.html

      Une fois fait tu pourras donc virer tous les GL11. Et comme ça t’auras appris une autre petite notion bien pratique en Java 😃

      1 réponse Dernière réponse Répondre Citer 0
      • FolganskyF Hors-ligne
        Folgansky Correcteurs
        dernière édition par

        Ah ok, c’est noté oO

        package fr.folgansky.powerdeco.client;
        
        import static org.lwjgl.opengl.GL11.*;
        
        import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
        import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
        import net.minecraft.tileentity.TileEntity;
        import net.minecraft.util.ResourceLocation;
        
        public class TileEntityPlasmaSpecialRenderer extends TileEntitySpecialRenderer
        {
            public static ModelPlasma model = new ModelPlasma();
            public static ResourceLocation texture = new ResourceLocation("ModPowerDeco:textures/models/blocks/Plasma.png");
        
            public TileEntityPlasmaSpecialRenderer()
            {
                this.func_147497_a(TileEntityRendererDispatcher.instance);
            }
        
            @Override
            public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick)
            {
                this.renderTileEntityPlasmaAt((TileEntityPlasma) tile, x, y, z, partialRenderTick);
            }
        
            private void renderTileEntityPlasmaAt(TileEntityPlasma tile, double x, double y, double z, float partialRenderTick)
            {
                glPushMatrix();
                glEnable(GL_BLEND);
                glBlendFunc(GL_SRC_ALPHA, GL_ONE);
                glDisable(GL_ALPHA_TEST);
                glEnable(GL_CULL_FACE);
                glDepthMask(false);
                glTranslated(x + 0.5D, y + 0.15D, z + 0.5D);
                glRotatef(180F, 0.0F, 0.0F, 1.0F);
                glRotatef((90F * tile.getDirection()) + 180F, 0.0F, 1.0F, 0.0F);
                glScaled(0.1, 0.1, 0.1);
                this.bindTexture(texture);
                model.renderAll();
                glDisable(GL_BLEND);
                glEnable(GL_ALPHA_TEST);
                glDisable(GL_CULL_FACE);
                glDepthMask(true);
                glPopMatrix();
            }
        }
        

        Résultat: Ultra surbrillance tout le temps. Au moins y’a eu un effet tangible pour le coup comparé à mes bidouillages inutiles x]
        edit: (en gros comme dans le second screen)

        1 réponse Dernière réponse Répondre Citer 0
        • DeletedD Hors-ligne
          Deleted
          dernière édition par

          Bon bah t’as essayé ce qu’avait dit @SCAREX ? Sinon faudra attendre le retour d’un pro, tel que @xavpok 😃

          1 réponse Dernière réponse Répondre Citer 0
          • FolganskyF Hors-ligne
            Folgansky Correcteurs
            dernière édition par

            Je n’ai pas trouvé de choses qui ressemble à GLStateManager dans le focus sur GL11.

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

              Me voilà! Alors je regarderai plus en détails ce soir mais je peux déjà conseiller ceci:

              glEnable (GL_BLEND);
              glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
              

              au lieu de

              glEnable (GL_BLEND);
              glBlendFunc (GL_SRC_ALPHA, GL_ONE);
              

              (je fais ça de tête, je suis pas trop sûr de ce que je dis)

              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
              • FolganskyF Hors-ligne
                Folgansky Correcteurs
                dernière édition par

                Eh bien monsieur, de tête et de façon incertaine, tu as résolu mon problème de surbrillance

                Petit comble maintenant je me souviens avoir vu cette ligne en faisant une recherche très rapide sur la transparence pour les rendus, mais c’était avant qu’on m’explique pour il n’était pas nécessaire de mettreGL.11 si y’a l’import static, bref

                Merci =D

                1 réponse Dernière réponse Répondre Citer 0
                • FolganskyF Hors-ligne
                  Folgansky Correcteurs
                  dernière édition par



                  Je me suis réjouis assez vite, il reste des détails à régler x]

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

                    Alors ça c’est plus compliqué, ça vient du fait que les vitres sont dessinées par dessus ton modèle. En théorie, il faudrait dessiner ta table après les vitres quand on regarde dans le sens de la dernière image et l’inverse en regardant par les vitres.
                    Je dois bien avouer que je ne pense pas qu’il soit possible de dire à Minecraft dans quel ordre dessiner les faces.

                    De plus, Minecraft a du mal avec les rendus translucides (exemples pris aujourd’hui sur la 1.7.10):


                    Youtube Video

                    Je te conseille de séparer ton modèle en deux: la partie opaque et la vitre, tu dessines le modèle de la table normalement puis celui de la vitre avec les options des réponses précédentes pour la transparence.

                    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 1
                    • AmaA Hors-ligne
                      Ama
                      dernière édition par

                      Essaie avec ça, j’ai pas fais gaffe au précédents messages donc sorry si c’est du doublon:

                      
                      GL11.glPushMatrix();
                      GL11.glEnable(GL11.GL_NORMALIZE);  
                      GL11.glEnable(GL11.GL_BLEND);  
                      GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);  
                      GL11.glColor4f(0.75F, 0.75F, 0.75F, 0.25F);
                      
                      //Le rendu du model ici
                      
                      GL11.glDisable(GL11.GL_BLEND);
                      GL11.glPopMatrix();
                      
                      

                      Je te conseille aussi de passer en priorité si possible par des modèles “vanilla” et pas des tiles entity pour de si simple modèles, sans doute sans animations
                      Utilise donc Cubik de Sphax pour faire tes modèles 3D simple d’utilisation et complet, payant par contre (la version pro) sinon tu as le models creator de MrCrayfish 😉

                      Si je t'ai filé un coup de main n'oublie pas le + / -
                      Par contre évite les demandes d'aides en MP, tu sera sympa'

                      La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

                      Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

                      1 réponse Dernière réponse Répondre Citer 0
                      • DeletedD Hors-ligne
                        Deleted
                        dernière édition par

                        Il peut pas il est en 1.7x

                        1 réponse Dernière réponse Répondre Citer 0
                        • FolganskyF Hors-ligne
                          Folgansky Correcteurs
                          dernière édition par

                          J’ai essayé plusieurs trucs

                          Je fais deux rendu, en utilisant la technique d’Ama pour la partie en “verre”

                          Le rendu

                          private void renderTileEntityGlassTableAt(TileEntityGlassTable tile, double x, double y, double z, float partialRenderTick)
                              {
                                  glPushMatrix();
                                  glEnable(GL_NORMALIZE);  
                                  glEnable(GL_BLEND);  
                                  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);   
                                  glColor4f(0.75F, 0.75F, 0.75F, 0.25F);
                                  glTranslated(x + 0.5D, y + 1.5D, z + 0.5D);
                                  glRotatef(180F, 0.0F, 0.0F, 1.0F);
                                  glRotatef((90F * tile.getDirection()) + 180F, 0.0F, 1.0F, 0.0F);
                                  this.bindTexture(texture);
                                  model.renderTop();   //Le plateau de verre
                                  glDisable(GL_BLEND);
                                  model.renderBase();  // Les pieds et le contour du plateau de la table
                                  glPopMatrix();
                              }
                          

                          Deuxième méthode

                          Le rendu

                          glPushMatrix();
                                  glEnable(GL_BLEND);
                                  glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
                                  glDisable(GL_ALPHA_TEST);
                                  glEnable(GL_CULL_FACE);
                                  glDepthMask(false);   
                                  glColor4f(0.75F, 0.75F, 0.75F, 0.25F);
                                  glTranslated(x + 0.5D, y + 1.5D, z + 0.5D);
                                  glRotatef(180F, 0.0F, 0.0F, 1.0F);
                                  glRotatef((90F * tile.getDirection()) + 180F, 0.0F, 1.0F, 0.0F);
                                  this.bindTexture(texture);
                                  model.renderTop();   //Le plateau de verre
                                  glDisable(GL_BLEND);
                                  glEnable(GL_ALPHA_TEST);
                                  glDisable(GL_CULL_FACE);
                                  glDepthMask(true);
                                  model.renderBase();  // Les pieds et le contour du plateau de la table
                                  glPopMatrix();
                          

                          EDIT:

                          Au final le deux me convient (je vais changer la couleur du verre) mais l’effet texturé n’y est pas du tout, on n’a pas du tout l’impression qu’il y ait un verre à la table. Du coup je pense que je vais faire une seconde texture par dessus celle du verre mais en terme de code je ne sais pas trop comment gérer et où bind la texture en fait

                          1 réponse Dernière réponse Répondre Citer 0
                          • AymericRedA Hors-ligne
                            AymericRed
                            dernière édition par

                            Tu peux bind la texture où tu veux, avant le rendu du modèle correspondant.
                            Tu peux aussi agrandir ton image et mettre ta texture de verre à côté de celle de la table, ensuite tu spécifie l’u et v (pos sur la texture) dans ton modèle, je pense que c’est moins lourd.

                            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                            1 réponse Dernière réponse Répondre Citer 0
                            • FolganskyF Hors-ligne
                              Folgansky Correcteurs
                              dernière édition par

                              Mon soucis c’est de bind deux textures différentes sur mon modèle

                              Mes essais n’ont pas été conclus, en général ça ne prend en compte que la première texture bind

                              1 réponse Dernière réponse Répondre Citer 0
                              • AymericRedA Hors-ligne
                                AymericRed
                                dernière édition par

                                Ça je ne pense pas que ce soit possible, mais sinon combiné juste les textures

                                Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk

                                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

                                  Pour utiliser deux textures, il faut couper en deux modèles complètement distincts et faire quelque comme ceci:

                                  utiliser texture1
                                  dessiner modele1
                                  
                                  utiliser texture2
                                  dessiner modele2
                                  

                                  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
                                  • FolganskyF Hors-ligne
                                    Folgansky Correcteurs
                                    dernière édition par

                                    Ah en effet c’est le “complètement distincts” qui fait la différence ^^

                                    Il me reste un ou deux détails à vérifier et je conclurai ensuite sur l’état du sujet, merci pour les infos et conseils

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • FolganskyF Hors-ligne
                                      Folgansky Correcteurs
                                      dernière édition par

                                      Donc à ce que j’ai cru comprendre Minecraft ne me permettra pas d’obtenir mieux que:



                                      :::
                                      Voyez-vous le verre de bière à moitié vide ou à moitié remplis?
                                      :::

                                      Malheureusement il y a des bouts des rendus qui ne sont pas copains et certains sont même portés sur la délation puisqu’ils laissent clairement voir où sont leurs camarades…

                                      Mais je suis déjà bien plus à l’aise avec les rendus par transparence et les rendus multiples, alors je vous remercie de m’avoir aidé et/ou éclairé sur certains points et je clos le sujet dans la nuit si il n’y a pas de choses à ajouter.

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • OurtenO Hors-ligne
                                        Ourten Moddeurs confirmés
                                        dernière édition par

                                        Minecraft ou la translucidité des TESR

                                        I) La bouillabaise du rendu :
                                            On constate assez rapidement quand on commence à faire des rendus de TESR qui sortent de l’ordinaire que Minecraft fait ses rendus en plusieurs phases, jusque là tout va bien. Mais ces phases ont la sale habitude de se marcher sur les pieds, notamment avec les particules et les fluides.
                                            Quand on veux rendre un objet translucide on a le choix d’une flopée **d’attributs **OpenGL pour le faire correctement, néanmoins ces phases viennent mettre leur nez dans tout ça. Minecraft rend les TESR à part des autres blocks et quand il les rends, il le fait en mode “TOUS ENSEMBLE!”. On observe donc des problèmes étranges comme un coffre qui vient faire son rendu par dessus notre block translucide alors que ce coffre se trouve loin derrière.

                                        II) A la recherche du fix parfait :
                                            Mettre un ou plusieurs éléments translucides dans un rendu de TESR est un problème qui semble affecter de nombreux moddeurs. Beaucoup n’ont jamais trouvé la solution et ont sont donc partis pour des work-arounds, comme passer leurs rendus en ISBRH. Ou encore enlever les éléments translucides de leurs modèles.
                                            J’ai moi même rencontré ce problème à de nombreuses reprises et après m’y être replongé de nombreuses fois j’ai fait la découverte de fonctionnalités non documentées qui sont la solution divine de ce problème.
                                        Pour reprendre, il nous faut un moyen de rendre les parties opaques de notre modèle lors de la phase habituelle des TESR et ensuite il nous faut rendre les parties translucides dans une phase où juste elles sont rendues pour qu’elles ne viennent pas détruire les rendus opaques préalablement effectués.
                                            Il existe dans la class TileEntity une petite méthode incroyable qui permet de commander dans quelles phases notre TESR doit être rendu :

                                           public boolean shouldRenderInPass(int pass)
                                           {
                                               return pass == 0;
                                           }
                                        

                                        La phase 0 est là par défaut et consiste en le “TOUS ENSEMBLE!” des TESR, néanmoins peu savent qu’il y a la phase 1, qui elles contient les éléments translucides des TESR.
                                        Il nous faut donc override cette méthode dans nos Tiles possédants des rendus translucides :

                                           @Override
                                           public boolean shouldRenderInPass(int pass)
                                           {
                                               return (pass == 0 || pass == 1);
                                           }
                                        

                                        Néanmoins, après avoir ajouter ceci il n’y a aucun changements visibles à part de nouveaux glitchs, car nous avons oublié une chose très importante : Faire le rendu du modèle opaque uniquement dans la phase opaque, et le rendu translucide uniquement dans la phase appropriée.
                                        Une petite méthode de forge vient ici nous sauver :

                                        MinecraftForgeClient.getRenderPass();
                                        

                                        Elle renvoi un entier correspondant à la phase de rendu en cours au moment de l’appel.
                                        Si vous mettez un print de cet entier dans votre rendu :

                                           @Override
                                           public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f, int destroy)
                                           {
                                               System.out.println(MinecraftForgeClient.getRenderPass());
                                           }
                                        

                                        Vous verrez que votre rendu est appelé deux fois de suite, sur deux phases contingentes : 0 et 1. Si jamais vous enlevez de votre TileEntity la méthode que nous avons ajouté plus haut, le rendu ne sera appelé que lors de la phase 0.
                                        La suite devient donc d’une simplicité déconcertante :

                                                   if (MinecraftForgeClient.getRenderPass() == 0)
                                                       this.MODEL.renderOpaque();
                                                   else if (MinecraftForgeClient.getRenderPass() == 1)
                                                       this.MODEL.renderAlpha();
                                        

                                        Ainsi, on rend les éléments opaques dans la phase 0 et les autres dans la 1. Les glitchs disparaissent, pour ne **jamais **revenir avec un peu de chance !
                                        III) Le pitfall :
                                            Il est assez facile d’oublier que l’ont fait le rendu de nos TESR avec des ISBRH dans l’inventaire quand on est en 1.7.10 parce que nous sommes des gros fainéants.
                                        Il va falloir ajouter une vérification dans le rendu car il y aura que la phase 0 de rendu quand le modèle est appelé dans l’inventaire, du coup seulement un morceau du modèle sera rendu.
                                        Voilà. Une réponse exhaustive à un problème qui mine les rendus depuis pas mal de versions. On notera également que ce problème a complètement changé à partir de la 1.8, mais ça c’est pour une autre fois.

                                        1 réponse Dernière réponse Répondre Citer 3
                                        • DeletedD Hors-ligne
                                          Deleted
                                          dernière édition par

                                          Bonsoir (désolé du UP…Si c’en est un ?)
                                          J’ai une entity qui cause le même problème, ou au moins un problème de rendu de vitres. Et je pense qu’il faut que je change l’odre de rendu de certaines shapes de son modèle, je sais pas…Voici ce gif qui illustre mon problème :

                                          Donc on voit très bien que si on regarde par le pare-brise avant de mon bus, les vitres à l’arrière, disparaissent. Donc faut-il que j’utilise ta méthode Ourten, ou y’a-t-il quelque chose de + rapide / facile (même si ça m’a pas non plus l’air très compliqué ^^') ?

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • FolganskyF Hors-ligne
                                            Folgansky Correcteurs
                                            dernière édition par

                                            Je précise que la méthode d’Ourten n’a pas fonctionné pour moi. Sa méthode ne cause pas plus de problèmes ceci dit et m’a permis plus clairement d’arriver au même résultat que la bonne poignée de conseils précédents réunis, entrecoupés et autre.

                                            Est ce que tu fais un rendu pour chaque partie transparente?

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB