Résolu 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 sembleJe 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 sembleJe 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/cubikD’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
-
@‘ZeAmateis’:
Faut que tu convertisse des degrés en Radian, par exemple 180° en radian ça donne
3,14159en 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