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

    Rendu de boîtes de collision

    Sans suite
    1.7.10
    4
    12
    2167
    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.
    • bin4r1s
      bin4r1s dernière édition par

      Bonjour,
      J’avais pour objectif d’effectuer le rendu d’une boîte de couleur différente pour chaque type d’entités. Je me suis donc servis de l’event RenderLivingEvent et des boîtes de collision des entités.
      Seul problème : ça ne fonctionne que sur les mob spawners et d’une manière très étrange… J’ai aussi des boîtes qui se balladent un peu partout dans les airs et qui disparaissent quand on s’en approche (~60 blocs de distance).
      Pouvez-vous m’aider ?

      EDIT :
      Ce que je trouve anormal, c’est que les valeurs sont tout à fait cohérentes… J’ai même testé avec les coordonnées des entités au lieu des AABB, utilisé GL11.glTrasnlated(posX, posY, posZ), mais ça donne la même chose…

      Sources :

      
      @SubscribeEvent
      public void onRenderLivingEvent(RenderLivingEvent.Pre event)
      {
           EntityLivingBase entity = event.entity;
           AxisAlignedBB bb = entity.boundingBox;
      
           GL11.glPushMatrix();
      
           if(entity instanceof EntityMob || entity instanceof EntityFlying || entity instanceof EntitySlime)
                GL11.glColor3f(1.0F, 0.0F, 0.0F);
           else if(entity instanceof EntityAgeable || entity instanceof EntityAmbientCreature || entity instanceof EntityWaterMob)
                GL11.glColor3f(0.0F, 1.0F, 0.0F);
           else if(entity instanceof EntityDragon)
                GL11.glColor3f(1.0F, 0.0F, 1.0F);
           else if(entity instanceof EntityGolem)
                GL11.glColor3f(0.0F, 0.0F, 1.0F);
           else
                GL11.glColor3f(1.0F, 1.0F, 1.0F);
      
           GL11.glEnable(GL11.GL_BLEND);
           GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
      
           Tessellator t = Tessellator.instance;
      
           GL11.glDisable(GL11.GL_LIGHTING);
           GL11.glDisable(GL11.GL_TEXTURE_2D);
           GL11.glDisable(GL11.GL_DEPTH_TEST);
      
           GL11.glLineWidth(6);
           GL11.glEnable(GL11.GL_LINE_SMOOTH);
           GL11.glHint( GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST );
      
           t.startDrawing(GL11.GL_LINE_STRIP);
           {
                // Floor
                t.addVertex(bb.minX, bb.minY, bb.minZ);
                t.addVertex(bb.maxX, bb.minY, bb.minZ);
                t.addVertex(bb.maxX, bb.minY, bb.minZ);
                t.addVertex(bb.maxX, bb.minY, bb.maxZ);
                t.addVertex(bb.maxX, bb.minY, bb.maxZ);
                t.addVertex(bb.minX, bb.minY, bb.maxZ);
                t.addVertex(bb.minX, bb.minY, bb.maxZ);
                t.addVertex(bb.minX, bb.minY, bb.minZ);
      
                // Top
                t.addVertex(bb.minX, bb.maxY, bb.minZ);
                t.addVertex(bb.maxX, bb.maxY, bb.minZ);
                t.addVertex(bb.maxX, bb.maxY, bb.minZ);
                t.addVertex(bb.maxX, bb.maxY, bb.maxZ);
                t.addVertex(bb.maxX, bb.maxY, bb.maxZ);
                t.addVertex(bb.minX, bb.maxY, bb.maxZ);
                t.addVertex(bb.minX, bb.maxY, bb.maxZ);
                t.addVertex(bb.minX, bb.maxY, bb.minZ);
      
                // Heights
                t.addVertex(bb.minX, bb.minY, bb.minZ);
                t.addVertex(bb.minX, bb.maxY, bb.minZ);
                t.addVertex(bb.maxX, bb.minY, bb.minZ);
                t.addVertex(bb.maxX, bb.maxY, bb.minZ);
                t.addVertex(bb.maxX, bb.minY, bb.maxZ);
                t.addVertex(bb.maxX, bb.maxY, bb.maxZ);
                t.addVertex(bb.minX, bb.minY, bb.maxZ);
                t.addVertex(bb.minX, bb.maxY, bb.maxZ);
           }
           t.draw();
      
           GL11.glEnable(GL11.GL_LIGHTING);
           GL11.glEnable(GL11.GL_TEXTURE_2D);
           GL11.glEnable(GL11.GL_DEPTH_TEST);
      
           GL11.glDisable(GL11.GL_BLEND);
           GL11.glColor3f(1.0F, 1.0F, 1.0F);
           GL11.glPopMatrix();
      }
      
      

      Mes mods:

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

        Je crois que la couleur de la tesselation ne se fait pas de cette manière, regarde s’il n’y a pas une méthode dans la classe Tesselator pour ça

        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

          t.setColorRGBA(rouge, vert, bleu, alpha) il me semble.

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

            C’est inutile, (en premier lieu), ça ne change rien à mon problème (je viens de tester).

            Mes mods:

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

              Au pire tu peux utiliser de l’openGL simple

              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

                Il me semble qu’il faut prendre en compte le fait que les coordonnées ne sont pas à partir du point (0,0,0) mais à partir de la position de la caméra.

                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
                • bin4r1s
                  bin4r1s dernière édition par

                  @SCAREX :
                  Déjà testé.

                  @jglrxavpok :
                  Ah oui, j’étais pas au courant de ça x) maintenant je vais tester ^^
                  Donc, en gros, la position des rendus OpenGL se fait en fonction de celle du joueur ? Ou ais-je mal compris ?
                  Non parce que là, quand je bouge, le carré que j’utilise pour tester ne bouge pas, il est juste proche du rendu d’un mob spawner et sa position n’a aucun rapport avec autre chose…
                  Et pourquoi dans ce cas ça fonctionne avec les mob spawners ?

                  Mes mods:

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

                    Le rendu tesselator utilise les coordonnées de l’écran alors que l’openGL utilise son propre système de coordonnées, donc à mon avis utiliser l’openGL de base est plus simple

                    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

                      Scarex, ça dépend quand tu l’utilises, il n’utilise que le repère courrant

                      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
                      • bin4r1s
                        bin4r1s dernière édition par

                        Non OpenGL, ça ne change rien, sinon c’est quoi cette histoire de repère courant ? Je pourrais essayer de me débrouiller avec ça… (Parce qu’en plus si le joueur est le centre du repère, il suffit juste de mesurer la distance et d’appliquer une translation).

                        Nouveau code (OpenGL) :

                        
                        GL11.glBegin(GL11.GL_LINE_STRIP);
                        {
                            // Floor
                            GL11.glVertex3d(entity.posX, entity.posY, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY, entity.posZ);
                        
                            // Top
                            GL11.glVertex3d(entity.posX, entity.posY + delta_y, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY + delta_y, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY + delta_y, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY + delta_y, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY + delta_y, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY + delta_y, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY + delta_y, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY + delta_y, entity.posZ);
                        
                            // Heights
                            GL11.glVertex3d(entity.posX, entity.posY, entity.posZ);
                            GL11.glVertex3d(entity.posX, entity.posY + delta_y, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY + delta_y, entity.posZ);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX + delta_x, entity.posY + delta_y, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY, entity.posZ + delta_z);
                            GL11.glVertex3d(entity.posX, entity.posY + delta_y, entity.posZ + delta_z);
                        }
                        GL11.glEnd();
                        
                        

                        Et un petit screen au passage : 
                         

                        Mes mods:

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

                          Je suis en train de me demander si la translation pour avoir la position de l’entité ne se ferrait pas avant l’event… Il faudrait vérifier ça dans la classe qui envoie cet évent (cherche les appels au constructeur de l’event pour ça, c’est sera plus simple).

                          De plus, pourrais-tu envoyer une image avec plusieurs boîtes affichées ?

                          Sent from my GT-I9195I using Tapatalk

                          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
                          • bin4r1s
                            bin4r1s dernière édition par

                            Des screens :
                            Boîtes flottantes (quand on s’en approche, elles disparaissent) :

                            Boîte fonctionnelle (c’est-à-dire que les mob spawners) :

                            Pour le rendu, l’event que j’utilise actuellement est le Pre, et j’ai testé une translation sans succès. L’utile serait de connaître l’origine du repère dont tu m’as parlé avant…
                            (Je vais quand même continuer à chercher en arrière-plan)

                            Mes mods:

                            • New Ores
                            • More Dragons
                            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