MFF

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

    GLUtils animation seulement d'une partie de l'objet 3d

    Planifier Épinglé Verrouillé Déplacé Sans suite
    14 Messages 5 Publieurs 4.2k Vues 2 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.
    • jglrxavpokJ Hors-ligne
      jglrxavpok Modérateurs
      dernière édition par

      Sans glRotated dans ton rendu, c’est sûr que ça va pas tourner…
      Passe par les events de GLUtils pour faire tourner les différentes parties du modèle.

      Ensuite donne nous toute l’exception même si je pense que cela vient du fait que [font=Monaco, Consolas, Courier, monospacethis.worldObj ]soit null

      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
      • Superloup10S Hors-ligne
        Superloup10 Modérateurs
        dernière édition par

        Ce serait bien d’utiliser les balises java pour le code Java.

        Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

        Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

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

          Oui c’est ça j’ai corrigé mais je comprends pas trop la logique du truc: worldobj alterne entre null et pas null vous savez pourquoi? 
          Ok donc pour l’animation j’ai tenté ça:
          Mon tileEntity

          ​package fr.lefgolas.TurretsMod;
          
          import java.util.Iterator;
          import java.util.List;
          
          import fr.lefgolas.TurretsMod.client.TileEntitySentryObjRenderer;
          import net.minecraft.command.IEntitySelector;
          import net.minecraft.entity.Entity;
          import net.minecraft.entity.EntityLivingBase;
          import net.minecraft.entity.passive.EntityChicken;
          import net.minecraft.entity.passive.EntityCow;
          import net.minecraft.entity.passive.EntityPig;
          import net.minecraft.nbt.NBTTagCompound;
          import net.minecraft.tileentity.TileEntity;
          
          public class TileEntitySentry extends TileEntity {
          protected String username;
          protected IEntitySelector iEntitySelector;
          
          public TileEntitySentry() {
          this.iEntitySelector = new IEntitySelector()
                  {
          @Override
          public boolean isEntityApplicable(Entity entity) {
                          return entity instanceof EntityLivingBase;
          
          }
                  };
          }
          
          @Override
          public void readFromNBT(NBTTagCompound compound) {
          super.readFromNBT(compound);
          this.username = compound.getString("Player");
          }
          
          @Override
          public void writeToNBT(NBTTagCompound compound) {
          super.writeToNBT(compound);
          compound.setString("Player", this.username);
          }
          
          public void setUsername(String playerPseudo) {
          this.username = playerPseudo;
          }
          
          public String getUsername(){
          return this.username;
          }
          
          @Override
          public void updateEntity(){
          if(this.worldObj != null && username != null){
          List listEntity = this.worldObj.getEntitiesWithinAABBExcludingEntity(this.worldObj.getPlayerEntityByName(username), this.getRenderBoundingBox().expand(20D, 20D, 20D), iEntitySelector);
          if(!listEntity.isEmpty()){
          EntityLivingBase entity = (EntityLivingBase) listEntity.get(0);
          TileEntitySentryObjRenderer.px = entity.posX;
          TileEntitySentryObjRenderer.py = entity.posY;
          TileEntitySentryObjRenderer.pz = entity.posZ;
          TileEntitySentryObjRenderer.hasEntityTarget = true;
          }
          }
          }
          
          }
          

          Mon tileentityrenderer

          ​package fr.lefgolas.TurretsMod.client;
          
          import java.util.List;
          
          import javax.vecmath.Vector3d;
          
          import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
          import net.minecraft.entity.Entity;
          import net.minecraft.tileentity.TileEntity;
          
          import org.jglrxavpok.glutils.TessellatorModel;
          import org.lwjgl.opengl.GL11;
          
          import fr.lefgolas.TurretsMod.TileEntitySentry;
          import fr.lefgolas.TurretsMod.TurretsMod;
          
          public class TileEntitySentryObjRenderer extends TileEntitySpecialRenderer {
          public static double px;
          public static double py;
          public static double pz;
          private double axeX, axeY, axeZ;
          private TessellatorModel modelHaut;
          private TessellatorModel modelBas;
          public static boolean hasEntityTarget;
          public TileEntitySentryObjRenderer() {
          hasEntityTarget = false;
          axeX = 0.0D;
          axeY = 0.0D;
          axeZ = 0.0D;
          modelHaut = new TessellatorModel("/assets/" + TurretsMod.MODID + "/models/HautTurret.obj");
          modelHaut.setID("sentryHaut");
          modelHaut.regenerateNormals();
          modelBas = new TessellatorModel("/assets/" + TurretsMod.MODID + "/models/BasTurret.obj");
          modelBas.setID("sentryBas");
          modelBas.regenerateNormals();
          TessellatorModel.MODEL_RENDERING_BUS.register(this);
          }
          
          @Override
          public void renderTileEntityAt(TileEntity tileentity, double x, double y,
          double z, float partialTick) {
          GL11.glPushMatrix();
          GL11.glTranslated(x + 0.5, y, z + 0.5);
          modelBas.render();
          double sentryAngleX = 0.0D;
          double sentryAngleY = 0.0D;
          double sentryAngleZ = 0.0D;
          
          if(hasEntityTarget){
          if(x != px){
          axeX = 1.0D;
          sentryAngleX = px-x;
          }
          if(y != py){
          axeY = 1.0D;
          sentryAngleY = py - y;
          }
          if(z != pz){
          axeZ = 1.0D;
          sentryAngleZ = pz - z; 
          } 
          GL11.glRotated(sentryAngleX, axeX, 0.0D, 0.0D);
          GL11.glRotated(sentryAngleY, 0.0D, axeY, 0.0D);
          axeX = 0.0D;
          axeY = 0.0D;
          axeZ = 0.0D;
          }
          
          modelHaut.render();
          GL11.glPopMatrix();
          }
          
          }
          

          Mais je n’ai pas trop les résultats escomptés…
          Sans animation:

          Avec animation:
          ___Voici le modele:  https://dl.dropboxusercontent.com/u/46928438/modele.zip___Après quelques test seul la rotation autour de l’axe Y est correcte (même si l’angle lui ne l’est pas)
          Je ne vois pas comment trouver l’angle 😞

          Et je n’arrive pas à la faire pivoter vers le haut ou vers le bas!
          Mes talents de graphisme sont limités… 😉

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

            Y a t-il un moyen de visualiser le point de rotation?
            Et comment calculer l’angle 😞 ?

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

              @‘gargan’:

              Y a t-il un moyen de visualiser le point de rotation?
              Et comment calculer l’angle 😞 ?

              Pareil je recherche aussi comment placer un point de rotation perso j’ai vu que la méthode :

              ​%(#555555)[[size=xx-small]GL11.glTranslated(x, y, z); et GL11.glTranslated(-x, -y, -z)]
              

              Mais pour moi elle permet plus de bouger l’objet en lui même ou plus la shape concernée non le point de rotation.
              Par exemple si je souhaite balancer  la jambe d’un de mes modele 3d je vais devoir placer un point de rotation qui serait en haut de la jambe ? Je peux faire ça ave c cette méthode mais y à pas un autre moyen d’y parvenir ? Je pense que ça en interesserai plus d’un ou plus de deux  :rolleyes:

              Par exemple dans techne y’a la petite boule bleue qui est le point de rotation on peut bouger l’objet sans le point de rotation mais avec un modele 3d on peut pas voir où est le point de rotation ?

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

                “La boule bleue” de Techne fait à peu près la même chose:

                GL11.glTranslated(x, y, z); et GL11.glTranslated(-x, -y, -z)
                

                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
                • Bowser338B Hors-ligne
                  Bowser338
                  dernière édition par

                  ce qu’il veut a mon avis et j’ai pas encore trouvé perso c’est de bouger le point de rotation sans bouger le shape

                  Tout probleme a sa solution, s'il n'y a pas de solution c'est qu'il n'y a pas de problemes

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

                    @‘Bowser338’:

                    ce qu’il veut a mon avis et j’ai pas encore trouvé perso c’est de bouger le point de rotation sans bouger le shape

                    Oui c’est exactement ça  😄

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

                      Pour la rotation sur l’axe Y déjà je croyais avoir trouver la solution mais ça ne marche pas!
                      Je créais un vecteur de base (0;5;0)
                      Je creais un vecteur tourelle/entité
                      Je calculais l’angle entre les supports des 2 vecteurs

                      Mais sa ne marche pas…

                      La classe du tileEntity

                      ​package fr.lefgolas.TurretsMod;
                      
                      import java.util.Iterator;
                      import java.util.List;
                      
                      import fr.lefgolas.TurretsMod.client.TileEntitySentryObjRenderer;
                      import net.minecraft.command.IEntitySelector;
                      import net.minecraft.entity.Entity;
                      import net.minecraft.entity.EntityLivingBase;
                      import net.minecraft.entity.passive.EntityChicken;
                      import net.minecraft.entity.passive.EntityCow;
                      import net.minecraft.entity.passive.EntityPig;
                      import net.minecraft.nbt.NBTTagCompound;
                      import net.minecraft.tileentity.TileEntity;
                      
                      public class TileEntitySentry extends TileEntity {
                      protected String username;
                      protected IEntitySelector iEntitySelector;
                      
                      public TileEntitySentry() {
                      this.iEntitySelector = new IEntitySelector()
                              {
                      @Override
                      public boolean isEntityApplicable(Entity entity) {
                                      return entity instanceof EntityLivingBase;
                      
                      }
                              };
                      }
                      
                      @Override
                      public void readFromNBT(NBTTagCompound compound) {
                      super.readFromNBT(compound);
                      this.username = compound.getString("Player");
                      }
                      
                      @Override
                      public void writeToNBT(NBTTagCompound compound) {
                      super.writeToNBT(compound);
                      compound.setString("Player", this.username);
                      }
                      
                      public void setUsername(String playerPseudo) {
                      this.username = playerPseudo;
                      }
                      
                      public String getUsername(){
                      return this.username;
                      }
                      
                      @Override
                      public void updateEntity(){
                      if(this.worldObj != null && username != null){
                      List listEntity = this.worldObj.getEntitiesWithinAABBExcludingEntity(this.worldObj.getPlayerEntityByName(username), this.getRenderBoundingBox().expand(20D, 20D, 20D), iEntitySelector);
                      if(!listEntity.isEmpty()){
                      EntityLivingBase entity = (EntityLivingBase) listEntity.get(0);
                      TileEntitySentryObjRenderer.entityPosX = entity.posX;
                      TileEntitySentryObjRenderer.entityPosY = entity.posY;
                      TileEntitySentryObjRenderer.entityPosZ = entity.posZ;
                      TileEntitySentryObjRenderer.turretPosX = this.xCoord;
                      TileEntitySentryObjRenderer.turretPosX = this.yCoord;
                      TileEntitySentryObjRenderer.turretPosX = this.zCoord;
                      }
                      }
                      }
                      
                      }
                      

                      La classe du tileobjrenderer

                      ​package fr.lefgolas.TurretsMod.client;
                      
                      import javax.vecmath.Vector3d;
                      
                      import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
                      import net.minecraft.tileentity.TileEntity;
                      
                      import org.jglrxavpok.glutils.TessellatorModel;
                      import org.jglrxavpok.glutils.TessellatorModelEvent;
                      import org.jglrxavpok.glutils.TessellatorModelEvent.RenderGroupEvent;
                      import org.lwjgl.opengl.GL11;
                      import org.lwjgl.util.vector.Vector;
                      
                      import cpw.mods.fml.common.eventhandler.SubscribeEvent;
                      import fr.lefgolas.TurretsMod.TurretsMod;
                      
                      public class TileEntitySentryObjRenderer extends TileEntitySpecialRenderer {
                      
                      public static double entityPosX;
                      public static double entityPosY;
                      public static double entityPosZ;
                      
                      public static double turretPosX;
                      public static double turretPosY;
                      public static double turretPosZ;
                      
                      private TessellatorModel modelHaut, modelBas;
                      double angleX, angleY,angleZ;
                      
                      public TileEntitySentryObjRenderer() {
                      entityPosX = 0;
                      entityPosY = 0;
                      entityPosZ = 0;
                      turretPosX = 0;
                      turretPosY = 0;
                      turretPosZ = 0;
                      modelHaut = new TessellatorModel("/assets/" + TurretsMod.MODID + "/models/HautTurret.obj");
                      modelHaut.setID("sentryHaut");
                      modelHaut.regenerateNormals();
                      modelBas = new TessellatorModel("/assets/" + TurretsMod.MODID + "/models/BasTurret.obj");
                      modelBas.regenerateNormals();
                      TessellatorModel.MODEL_RENDERING_BUS.register(this);
                      }
                      
                      @SubscribeEvent
                          public void onPreRenderModel(TessellatorModelEvent.RenderPre event)
                          {
                              if(event.model.getID() != null && event.model.getID().equals("sentryHaut")){
                              Vector3d vectorXTurret = new Vector3d(0,5,0);
                              Vector3d VectorXEntity = new Vector3d(0,entityPosX-(turretPosX),0);
                              System.out.println("vecteur turret: " + vectorXTurret.y);
                              System.out.println("vecteur entité: " + VectorXEntity.y);
                              this.angleY = vectorXTurret.angle(VectorXEntity);
                              System.out.println(this.angleY);
                              this.angleX = 180 * this.angleY / Math.PI;
                              System.out.println(this.angleY);
                              }
                      
                          }
                      
                      @SubscribeEvent
                          public void onPreRenderGroup(RenderGroupEvent.Pre event)
                          {
                              if(event.model.getID() != null)
                              {
                                  if(event.model.getID().equals("sentryHaut"))
                                  {
                                      if(event.group.equals("sentryHaut"))
                                      {
                                          GL11.glPushMatrix();
                                          //point de rotation perso
                                          //double x = 0;
                                          //double y = 6;
                                          //double z = 0;
                                          //GL11.glTranslated(x, y, z);
                                          GL11.glRotated(this.angleY, 0, 1, 0);
                                          //GL11.glTranslated(-x, -y, -z);
                                      }
                                  }
                              }
                          }
                      
                      @SubscribeEvent
                          public void onPostRenderGroup(RenderGroupEvent.Post event)
                          {
                              if(event.model.getID() != null)
                              {
                                  if(event.model.getID().equals("sentryHaut"))
                                  {
                                      if(event.group.equals("sentryHaut"))
                                      {
                                          GL11.glPopMatrix();
                                      }
                                  }
                      
                              }
                          }
                      
                      @Override
                      public void renderTileEntityAt(TileEntity tileentity, double x, double y,
                      double z, float partialTick) {
                      GL11.glPushMatrix();
                      GL11.glTranslated(x + 0.5, y, z + 0.5);
                      GL11.glShadeModel(GL11.GL_SMOOTH);
                      modelBas.render();
                      modelHaut.render();
                      GL11.glPopMatrix();
                      }
                      }
                      

                      Après pour la rotation vers le haut ou vers le bas Je pense que ça vient du point de rotation qu’il faudrait ajuster (grâce à GLtranslated). Mais comment le visualiser afin de pouvoir le déplacer? Faire par tâtonnement est impossible quand on ne sais pas ou il est au départ et ou on veut qu’il arrive!

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

                        Je me suis demander si sa ne venait pas de mon “détecteur d’entité” dans la fonction updateEntity du coup j’ai remplacé par

                        ​ public void updateEntity(){
                        
                        if(this.worldObj != null && username != null){
                        //List listEntity = this.worldObj.getEntitiesWithinAABBExcludingEntity(this.worldObj.getPlayerEntityByName(username), this.getRenderBoundingBox().expand(20D, 20D, 20D), iEntitySelector);
                        
                        //if(!listEntity.isEmpty()){
                        //EntityLivingBase entity = (EntityLivingBase) listEntity.get(0);
                        EntityPlayer entity = this.worldObj.getPlayerEntityByName("gargan");
                        if(entity != null){
                        TileEntitySentryObjRenderer.entityPosX = entity.posX;
                        TileEntitySentryObjRenderer.entityPosY = entity.posY;
                        TileEntitySentryObjRenderer.entityPosZ = entity.posZ;
                        TileEntitySentryObjRenderer.turretPosX = this.xCoord;
                        TileEntitySentryObjRenderer.turretPosX = this.yCoord;
                        TileEntitySentryObjRenderer.turretPosX = this.zCoord;
                        }
                        //}
                        }
                        }
                        

                        Mais toujours le même problème pas de rotation…

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

                          @‘Bowser338’:

                          ce qu’il veut a mon avis et j’ai pas encore trouvé perso c’est de bouger le point de rotation sans bouger le shape

                          D’où l’Intérêt du

                          ​GL11.Translated(-x,-y,-z);
                          

                          Avant le model.render();
                          Le problème c’est que l’ajuster quand on ne le voit pas…
                          Une solution pour le rendre visible?
                          J’ai penser à essayer de le dessiner avec tesselator
                          Tessellator t = Tessellator.instance;
                          t.startDrawingQuads();//method 1
                          t.draw();//method 2

                          Mais sa ne marche pas vraiment…

                          De toute façon je n’arrive pas à calculer l’angle y 😞 , le seul axe qui est correct…

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

                            Quelqu’un?

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

                            MINECRAFT FORGE FRANCE © 2024

                            Powered by NodeBB