IItemRender
-
je penser donc que se code devrait fonctionner mais le rendu est toujours vide :
public class EwiliteSwordLvloneTechneRender implements IItemRenderer { protected modelewilitesword model; protected static ResourceLocation texture = new ResourceLocation(ewifaction.MODID, "textures/items/t.png"); public EwiliteSwordLvloneTechneRender() { model = new modelewilitesword(); } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED: 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(); GL11.glRotatef(1F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(1.0F, 2.0F, 1.5F); Minecraft.getMinecraft().renderEngine.bindTexture(texture); model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); } default: break; } } } -
Personne ne sait pourquoi mon rendu est vide ? ( désolé tu double poste )
-
Tu peux envoyer la classe de ton modèle ?
-
Oui la voici :
public class modelewilitesword extends ModelBase { 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); } 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); } } -
Ton modèle est complètement vide, c’est pour ça que rien ne se rend.
-
Que dois je mettre dans mon render pour qu’il ne soit plus vide ?
-
Si tu veux le rendu normal d’un item, c’est ça qu’il te faut : https://www.minecraftforgefrance.fr/showthread.php?tid=556&pid=6186#pid6186
(sans le
GL11.glScalef(2F, 2F, 2F);
ni le glTranslatef et les rotates avant la fonction
this.renderItem(living, item, renderPass);
si tu veux l’avoir avec une taille normal). -
voila se que j’ai fait :
public class EwiliteSwordLvloneTechneRender implements IItemRenderer { protected modelewilitesword model; protected static ResourceLocation texture = new ResourceLocation(ewifaction.MODID, "textures/items/t.png"); public EwiliteSwordLvloneTechneRender() { model = new modelewilitesword(); } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED: 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: { EntityLivingBase living = (EntityLivingBase)data[1]; int renderPass = item.getItem().requiresMultipleRenderPasses() ? 1 : 0; this.renderItem(living, item, renderPass); GL11.glPopMatrix(); break; } default: break; } } private void renderItem(EntityLivingBase living, ItemStack item, int renderPass) { TextureManager texturemanager = FMLClientHandler.instance().getClient().getTextureManager(); GL11.glPushMatrix(); IIcon icon = living.getItemIcon(item, renderPass); if(icon == null) { GL11.glPopMatrix(); return; } Tessellator tessellator = Tessellator.instance; float f = ((IIcon) icon).getMinU(); float f1 = ((IIcon) icon).getMaxU(); float f2 = ((IIcon) icon).getMinV(); float f3 = ((IIcon) icon).getMaxV(); float f4 = 0.0F; float f5 = 0.3F; float f6 = 1.5F; ItemRenderer.renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F); if(item.hasEffect(renderPass)) { texturemanager.bindTexture(texture); } } }j’ai bien un rendu mais il s’agit du rendu de base de mon épée pas le nouveau savez-vous pourquoi ?
-
Peut être parce que tu ne comprends pas ton code et que tu bind la texture après le rendu au lieu de le faire avant ^^
-
En effet je ne comprend pas vraiment ce code ,j’ai beau chercher, je ne trouve pas comment modifier le code pour corriger le problème.
-
voila se que j’ai réussi à faire :
public class EwiliteSwordLvloneTechneRender implements IItemRenderer { private static final ResourceLocation texture = new ResourceLocation(ewifaction.MODID, "textures/items/t.png"); @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED: 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: { EntityLivingBase living = (EntityLivingBase)data[1]; int renderPass = item.getItem().requiresMultipleRenderPasses() ? 1 : 0; GL11.glPushMatrix(); this.renderItem(living, item, renderPass); GL11.glPopMatrix(); break; } default: break; } } public void renderItem(EntityLivingBase living, ItemStack stack, int pass) { TextureManager texturemanager = FMLClientHandler.instance().getClient().getTextureManager(); GL11.glPushMatrix(); IIcon icon = living.getItemIcon(stack, pass); if(icon == null) { GL11.glPopMatrix(); return; } texturemanager.bindTexture(texture); Tessellator tessellator = Tessellator.instance; float f = icon.getMinU(); float f1 = icon.getMaxU(); float f2 = icon.getMinV(); float f3 = icon.getMaxV(); float f4 = 0.0F; float f5 = 0.3F; GL11.glEnable(GL12.GL_RESCALE_NORMAL); float f6 = 1.5F; ItemRenderer.renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F); if(stack.hasEffect(pass)) { GL11.glDepthFunc(GL11.GL_EQUAL); GL11.glDisable(GL11.GL_LIGHTING); texturemanager.bindTexture(texture); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); float f7 = 0.76F; GL11.glColor4f(0.5F * f7, 0.25F * f7, 0.8F * f7, 1.0F); GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glPushMatrix(); float f8 = 0.125F; GL11.glScalef(f8, f8, f8); float f9 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; GL11.glTranslatef(f9, 0.0F, 0.0F); GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glScalef(f8, f8, f8); f9 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; GL11.glTranslatef(-f9, 0.0F, 0.0F); GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); GL11.glPopMatrix(); GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_LIGHTING); GL11.glDepthFunc(GL11.GL_LEQUAL); } GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } }Quand je met un chemin de texture invalide j’obtient un carré noir comme prévue mais quand je met un chemin valide le rendu deviens vide.