SOLVED Rendu Item 3D Plus détaillé ?


  • Bonjour,
    Un amis à moi a fait une épée en 3d sur toolbox jusqu'à la tout va bien mais le soucis et que une fois cette épée rendu en jeu elle n'est pas du tout comme sur toolbox .

    Je vous glisse des screens pour mieux comprendre:

    ToolBox:

    En jeu:

    La question que je pose pas mal aussi est-ce que c'est possible?

    J'attends vos réponses merci!


  • File nous la classe du model et celle de ta classe implémentant IItemRenderer
    Il y a sûrement des shapes manquantes dans ton modèle ou alors dessinées de la mauvaise manière. Peut-être que l'exporteur java de Toolbox n'est pas encore 100% fonctionnel


  • Render:

    
    package net.legacymod.items;
    
    import org.lwjgl.opengl.GL11;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.renderer.entity.RenderItem;
    import net.minecraft.entity.Entity;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.client.IItemRenderer;
    
    public class ItemEpee3D implements IItemRenderer{
    
    protected Epee1 model;
    protected static final ResourceLocation texture = new ResourceLocation("lc:textures/items/Epee1.png");
    
    public ItemEpee3D ()
    {
    model = new Epee1();
    }
    
    @Override
    public boolean handleRenderType(ItemStack item, ItemRenderType type) 
    {
    switch(type)
    {
    case EQUIPPED:
    return true;
    case EQUIPPED_FIRST_PERSON:
    return true;
    case ENTITY:
    return true;
    default:
    return false;
    }
    }
    
    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item,
    ItemRendererHelper helper) 
    {
    return false;
    }
    
    @Override
    public void renderItem(ItemRenderType type, ItemStack item, Object… data) 
    {
    switch (type)
            {
                case EQUIPPED:
                {
                    GL11.glPushMatrix();
                    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                    GL11.glRotatef(180F, 5.0F, 2.9F, 0.35F); // ANGLE BON,   ,1F,
                    GL11.glTranslatef(0.45F, -0.25F, 0.05F);
                    GL11.glShadeModel(GL11.GL_SMOOTH);
                    model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                    GL11.glPopMatrix();
                    break;
                }
    
                case EQUIPPED_FIRST_PERSON:
                {
                    GL11.glPushMatrix();
                    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                    GL11.glRotatef(175F, 20.0F, 4.5F, 0.25F);
                    GL11.glTranslatef(0.8F, -0.20F, 0.05F);
                    GL11.glShadeModel(GL11.GL_SMOOTH);
                    model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                    GL11.glPopMatrix();
                    break;
                }
    
                case ENTITY:
                {
                    GL11.glPushMatrix();
                    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
    
                    if (RenderItem.renderInFrame)
                    {
                        GL11.glScalef(0.F, 0.F, 0.F);
                        GL11.glTranslatef(0.9F, 0.5F, 0.0F);
                        GL11.glRotatef(26F, 0.0F, 0.0F, 1.0F);
                    }
    
                    GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F);
                    GL11.glRotatef(140F, 1.0F, 0.0F, 0.0F);
                    GL11.glTranslatef(0.0F, 0.0F, -0.8F);
                    GL11.glShadeModel(GL11.GL_SMOOTH);
                    model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F);
                    GL11.glPopMatrix();
                    break;
                }
    
                default:
                    break;
            }
        }
    
    }
    
    

    model:

    
    //This File was created with the Minecraft-SMP Modelling Toolbox 2.2.2.4
    // Copyright (C) 2016 Minecraft-SMP.de
    // This file is for Flan's Flying Mod Version 4.0.x+
    
    // Model: 
    // Model Creator: 
    // Created on: 19.07.2016 - 15:22:55
    // Last changed on: 19.07.2016 - 15:22:55
    
    package net.legacymod.items;
    
    import net.minecraft.client.model.ModelBase;
    import net.minecraft.client.model.ModelRenderer;
    import net.minecraft.entity.Entity;
    
    public class Epee1 extends ModelBase
    {
    ModelRenderer Part_0; // Box_0
    ModelRenderer Part_1; // Box_1
    ModelRenderer Part_2; // Box_2
    ModelRenderer Part_3; // Box_3
    ModelRenderer Part_4; // Box_4
    ModelRenderer Part_5; // Box_5
    ModelRenderer Part_6; // Box_6
    ModelRenderer Part_7; // Box_8
    ModelRenderer Part_8; // Box_9
    ModelRenderer Part_9; // Box_10
    ModelRenderer Part_10; // Box_11
    ModelRenderer Part_11; // Box_12
    ModelRenderer Part_12; // Box_13
    ModelRenderer Part_13; // Box_14
    ModelRenderer Part_14; // Box_15
    ModelRenderer Part_15; // Box_16
    ModelRenderer Part_16; // Box_17
    ModelRenderer Part_17; // Box_18
    ModelRenderer Part_18; // Box_19
    
    public Epee1()
    {
    textureWidth = 512;
    textureHeight = 512;
    
    Part_0 = new ModelRenderer(this, 1, 1); // Box_0
    Part_0.addBox(0F, 0F, 0F, 2, 9, 2);
    Part_0.setRotationPoint(0F, 2F, 0F);
    Part_0.setTextureSize(512, 512);
    Part_0.mirror = true;
    setRotation(Part_0, 0F, 0F, 0F);
    Part_1 = new ModelRenderer(this, 17, 1); // Box_1
    Part_1.addBox(0F, 0F, 0F, 2, 2, 2);
    Part_1.setRotationPoint(0F, 11F, 0F);
    Part_1.setTextureSize(512, 512);
    Part_1.mirror = true;
    setRotation(Part_1, 0F, 0F, 0F);
    Part_2 = new ModelRenderer(this, 33, 1); // Box_2
    Part_2.addBox(0F, 0F, 0F, 5, 24, 2);
    Part_2.setRotationPoint(1.5F, -23F, 0F);
    Part_2.setTextureSize(512, 512);
    Part_2.mirror = true;
    setRotation(Part_2, 0F, 0F, 0F);
    Part_3 = new ModelRenderer(this, 49, 1); // Box_3
    Part_3.addBox(0F, 0F, 0F, 3, 20, 2);
    Part_3.setRotationPoint(-2F, -18F, 0F);
    Part_3.setTextureSize(512, 512);
    Part_3.mirror = true;
    setRotation(Part_3, 0F, 0F, 0F);
    Part_4 = new ModelRenderer(this, 65, 1); // Box_4
    Part_4.addBox(0F, 0F, 0F, 3, 5, 1);
    Part_4.setRotationPoint(-2F, 1F, -2F);
    Part_4.setTextureSize(512, 512);
    Part_4.mirror = true;
    setRotation(Part_4, 0F, 0F, 0F);
    Part_5 = new ModelRenderer(this, 81, 1); // Box_5
    Part_5.addBox(0F, 0F, 0F, 3, 5, 1);
    Part_5.setRotationPoint(-3F, -1F, -1F);
    Part_5.setTextureSize(512, 512);
    Part_5.mirror = true;
    setRotation(Part_5, 0F, 0F, 0F);
    Part_6 = new ModelRenderer(this, 97, 1); // Box_6
    Part_6.addBox(0F, 0F, 0F, 3, 5, 1);
    Part_6.setRotationPoint(-3F, -1F, 2F);
    Part_6.setTextureSize(512, 512);
    Part_6.mirror = true;
    setRotation(Part_6, 0F, 0F, 0F);
    Part_7 = new ModelRenderer(this, 113, 1); // Box_8
    Part_7.addBox(0F, 0F, 0F, 5, 2, 1);
    Part_7.setRotationPoint(0F, -1F, -1F);
    Part_7.setTextureSize(512, 512);
    Part_7.mirror = true;
    setRotation(Part_7, 0F, 0F, 0F);
    Part_8 = new ModelRenderer(this, 129, 1); // Box_9
    Part_8.addBox(0F, 0F, 0F, 5, 2, 1);
    Part_8.setRotationPoint(0F, -1F, 2F);
    Part_8.setTextureSize(512, 512);
    Part_8.mirror = true;
    setRotation(Part_8, 0F, 0F, 0F);
    Part_9 = new ModelRenderer(this, 145, 1); // Box_10
    Part_9.addBox(0F, 0F, 0F, 3, 3, 1);
    Part_9.setRotationPoint(1F, 1F, -2F);
    Part_9.setTextureSize(512, 512);
    Part_9.mirror = true;
    setRotation(Part_9, 0F, 0F, 0F);
    Part_10 = new ModelRenderer(this, 161, 1); // Box_11
    Part_10.addBox(0F, 0F, 0F, 3, 3, 1);
    Part_10.setRotationPoint(1F, 1F, 3F);
    Part_10.setTextureSize(512, 512);
    Part_10.mirror = true;
    setRotation(Part_10, 0F, 0F, 0F);
    Part_11 = new ModelRenderer(this, 177, 1); // Box_12
    Part_11.addBox(0F, 0F, 0F, 3, 5, 1);
    Part_11.setRotationPoint(-2F, 1F, 3F);
    Part_11.setTextureSize(512, 512);
    Part_11.mirror = true;
    setRotation(Part_11, 0F, 0F, 0F);
    Part_12 = new ModelRenderer(this, 193, 1); // Box_13
    Part_12.addBox(0F, 0F, 0F, 2, 2, 4);
    Part_12.setRotationPoint(1F, 1.5F, -1F);
    Part_12.setTextureSize(512, 512);
    Part_12.mirror = true;
    setRotation(Part_12, 0F, 0F, 0F);
    Part_13 = new ModelRenderer(this, 209, 1); // Box_14
    Part_13.addBox(0F, 0F, 0F, 5, 2, 1);
    Part_13.setRotationPoint(-1.5F, 11.5F, 0.5F);
    Part_13.setTextureSize(512, 512);
    Part_13.mirror = true;
    setRotation(Part_13, 0F, 0F, 0F);
    Part_14 = new ModelRenderer(this, 225, 1); // Box_15
    Part_14.addBox(-3F, 0F, 0F, 3, 1, 1);
    Part_14.setRotationPoint(7.5F, 1F, 0.5F);
    Part_14.setTextureSize(512, 512);
    Part_14.mirror = true;
    setRotation(Part_14, 0F, 0F, -0.19198622F);
    Part_15 = new ModelRenderer(this, 241, 1); // Box_16
    Part_15.addBox(-3F, 0F, 0F, 3, 1, 1);
    Part_15.setRotationPoint(6.5F, 3F, 0.5F);
    Part_15.setTextureSize(512, 512);
    Part_15.mirror = true;
    setRotation(Part_15, 0F, 0F, 0F);
    Part_16 = new ModelRenderer(this, 257, 1); // Box_17
    Part_16.addBox(-3F, 0F, 0F, 3, 1, 1);
    Part_16.setRotationPoint(5.5F, 4.5F, 0.5F);
    Part_16.setTextureSize(512, 512);
    Part_16.mirror = true;
    setRotation(Part_16, 0F, 0F, 0.2443461F);
    Part_17 = new ModelRenderer(this, 193, 1); // Box_18
    Part_17.addBox(0F, 0F, 0F, 2, 2, 4);
    Part_17.setRotationPoint(3F, 1.5F, -1F);
    Part_17.setTextureSize(512, 512);
    Part_17.mirror = true;
    setRotation(Part_17, 0F, 0F, 0F);
    Part_18 = new ModelRenderer(this, 193, 1); // Box_19
    Part_18.addBox(0F, 0F, 0F, 2, 1, 4);
    Part_18.setRotationPoint(2F, 3.5F, -1F);
    Part_18.setTextureSize(512, 512);
    Part_18.mirror = true;
    setRotation(Part_18, 0F, 0F, 0F);
    }
    
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
    {
    super.render(entity, f, f1, f2, f3, f4, f5);
    setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    
    Part_0.render(f5); // Box_0
    Part_1.render(f5); // Box_1
    Part_2.render(f5); // Box_2
    Part_3.render(f5); // Box_3
    Part_4.render(f5); // Box_4
    Part_5.render(f5); // Box_5
    Part_6.render(f5); // Box_6
    Part_7.render(f5); // Box_8
    Part_8.render(f5); // Box_9
    Part_9.render(f5); // Box_10
    Part_10.render(f5); // Box_11
    Part_11.render(f5); // Box_12
    Part_12.render(f5); // Box_13
    Part_13.render(f5); // Box_14
    Part_14.render(f5); // Box_15
    Part_15.render(f5); // Box_16
    Part_16.render(f5); // Box_17
    Part_17.render(f5); // Box_18
    Part_18.render(f5); // Box_19
    }
    
    private void setRotation(ModelRenderer model, float x, float y, float z)
    {
    model.rotateAngleX = x;
    model.rotateAngleY = y;
    model.rotateAngleZ = z;
    }
    
    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
    {
    super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    }
    
    }
    
    

  • Je n'ai pas trop le temps et surtout l'envie (les modèles, j'ai eu ma dose avec backpack & smart moving à rendre compatibles ^^') de regarder ce qui cloche dans tes classes. Donc attends la réponse de quelqu'un d'autre et commence à débug le code dans ton modèle.


  • D'accord merci quand meme


  • Le problème doit venir de l'exportation, car apparemment plusieurs éléments n'ont pas la bonne rotation


  • @'SCAREX':

    Le problème doit venir de l'exportation, car apparemment plusieurs éléments n'ont pas la bonne rotation

    J'ai refais l'exportation pareil peut-être que le problème vient de Toolbox …


  • Je pense aussi.
    Essaie un autre software tels que techne ou craftstudio


  • Je prob c'est que techne rend pas les modèles aussi " réaliste, détaillé" que toolbox ou alors je procède mal.
    Je vais voir craftstudio je ne connais pas !
    Merci de l'info 🙂 .


  • Qu'est-ce que tu appelles "réaliste et détaillé" ? Un modèle, soit un ensemble de shapes, avec une même texture loaded reste le même que ça soit sur techne ou toolbox 🙂
    Après oui, peut-être qu'on y aurait consacré beaucoup + de temps sur techne car on n'a pas forcément l'habitude des commandes et de son interface, mais le résultat reste au final identique.
    Essaie craftstudio, @ZeAmateis sera le premier à te le recommande. Le seul bémol est qu'il faut un compte payant pour exporter le model, je crois…Je ne sais plus le prix exacte cependant 😕


  • problème de rotation réglable facilement, normalement…

    Si la toolbox ne fais pas l'export elle même des angles c'est quelle est mal faite, mais y'a une alternative longue et chia***

    remplace les render(scale) par des renderWithRotation(scale)

    ensuite pour chaque modèles et c'est long et pas très "opti" il faut que tu règles les rotationsAngles

    voici un exemple concret:

    
    Part_0.rotateAngleX = angleEnDegréConvertitEnRadian;
    Part_0.rotateAngleY = angleEnDegréConvertitEnRadian;
    Part_0.rotateAngleZ = angleEnDegréConvertitEnRadian;
    Part_0.renderWithRotation(scale);
    
    

    Et comme dis plaigon je te recommande CraftStudio, car tu pourra faire des modèles plus détaillés et complets que n'importe quel logiciel de modélisation 3D
    29€ le prix il me semble

    Je te renvoie à ce "tuto" pour plus d'infos: https://www.minecraftforgefrance.fr/showthread.php?tid=2685

    Edit: Un modèle .java n'est pas une solution pour faire des modèles de blocs/items, je t'invite si ça n'est pas une entité (d'où l'utilisation de CraftStudio) d'utiliser Cubik Pro de BdCraft (version payante +9€ il me semble) idéal et très bien adapté pour les items/blocs car un modèle .java + rendu c'est très caca surtout si c'est que pour un item
    http://bdcraft.net/cubik


  • @'ZeAmateis':

    problème de rotation réglable facilement, normalement…

    Si la toolbox ne fais pas l'export elle même des angles c'est quelle est mal faite, mais y'a une alternative longue et chia***

    remplace les render(scale) par des renderWithRotation(scale)

    ensuite pour chaque modèles et c'est long et pas très "opti" il faut que tu règles les rotationsAngles

    voici un exemple concret:

    
    Part_0.rotateAngleX = angleEnDegréConvertitEnRadian;
    Part_0.rotateAngleY = angleEnDegréConvertitEnRadian;
    Part_0.rotateAngleZ = angleEnDegréConvertitEnRadian;
    Part_0.renderWithRotation(scale);
    
    

    Et comme dis plaigon je te recommande CraftStudio, car tu pourra faire des modèles plus détaillés et complets que n'importe quel logiciel de modélisation 3D
    29€ le prix il me semble

    Je te renvoie à ce "tuto" pour plus d'infos: https://www.minecraftforgefrance.fr/showthread.php?tid=2685

    Edit: Un modèle .java n'est pas une solution pour faire des modèles de blocs/items, je t'invite si ça n'est pas une entité (d'où l'utilisation de CraftStudio) d'utiliser Cubik Pro de BdCraft (version payante +9€ il me semble) idéal et très bien adapté pour les items/blocs car un modèle .java + rendu c'est très caca surtout si c'est que pour un item
    http://bdcraft.net/cubik

    D'acc merci des infos j'essaye de mon côté je te communique mon rendu merci en tout cas 🙂

    J'ai une question pour ça:

    Part_0.rotateAngleX = 0F;
    Part_0.rotateAngleY = 2F;
    Part_0.rotateAngleZ = 0F;
    Part_0.renderWithRotation(0);

    Y'a pas de magie ? faut toucher a tout ? ou y'a des chiffres bien précis à mettre ?


  • Faut que tu convertisse des degrés en Radian, par exemple 180° en radian ça donne 3,14159 en radian

  • Moddeurs confirmés Rédacteurs Administrateurs

    @'ZeAmateis':

    Faut que tu convertisse des degrés en Radian, par exemple 180° en radian ça donne 3,14159 en radian

    ça donne Math.PI en radian 😉


  • effectivement c'était un exemple un peu facile x)


  • @'ZeAmateis':

    effectivement c'était un exemple un peu facile x)

    D'accord! et du coup les degrés je les met au pif ?? ou sur toolbox je peux les avoirs ?
    Faut que je teste un peut tout les degrés 90° , 180 etc.. ?

    edit: Part_0.rotateAngleX = Math.PI; me fait une érreur normal car c'est en dooble et il faut en float donc je cast float mais je met ou 180F ?
    Et ici: Part_0.renderWithRotation(0); je doit mettre quoi? 0 ?


  • Oui il faut cast. Sachant que Math.PI = 180°, 90° = Math.PI / 2, 270° = Math.PI * 1.5 et 360° = Math.PI * 2.


  • @'AymericRed':

    Oui il faut cast. Sachant que Math.PI = 180°, 90° = Math.PI / 2, 270° = Math.PI * 1.5 et 360° = Math.PI * 2.

    Euuh on est d'accord que :

    Part_0.rotateAngleX = (float) Math.PI * 2;
    Part_0.rotateAngleY = (float) Math.PI * 2;
    Part_0.rotateAngleZ = (float) Math.PI * 2;

    se met dans la fonction public Epee1() pas dans render() ?
    Car je change les angles les parts bouge bien j'ai beau les changer a 360° c'est exactement pareil.


  • 360° = tour complet, c'est normal que tu ne voies aucun changement.
    Tu peux le mettre dans ton constructeur, mais le problème est que ça ne marchera pas si tu changes de vue, il va falloir mettre dans angles en fonction de la vue.


  • Bah sur toolbox t'a forcément les angles qui sont affichés en fonction des parties de ton modèle