Résolu Rendu d'un item dans le dos
-
Bonjour, j’essaye de faire un rendu des épées / arc dans le dos du personnage lorsque ces items sont équipé j’ai réussi plus ou moins mais je ne trouve pas comment faire suivre l’item parallélement au dos :
–> http://puu.sh/axw0I/ecdeb5b56a.png
Mais si je tourne mon perso sur lui même :
–> http://puu.sh/axw4H/912459f5bc.png
–> http://puu.sh/axw5J/fb13d2010e.pngpackage fr.cc; import java.awt.image.BufferedImage; import java.net.URL; import java.util.HashMap; import javax.imageio.ImageIO; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBow; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; public class CoolCraftPlayer extends RenderPlayerBase { private Minecraft mc = Minecraft.getMinecraft(); @Override public void renderPlayer(AbstractClientPlayer player, double x, double z, double y, float f, float f2) { if (player.getHeldItem() != null) { ItemStack heldItem = player.getHeldItem(); if (heldItem.getItem() instanceof ItemSword || heldItem.getItem() instanceof ItemBow) { GL11.glPushMatrix(); GL11.glTranslatef(0.0F, -0.5F, 0.16F); if (player.inventory.armorItemInSlot(2) != null) { GL11.glTranslatef(0.0F, player.isSneaking() ? -0.1F : 0.0F, player.isSneaking() ? 0.025F : 0.06F); } if (player.isSneaking()) { GL11.glRotatef(-28.799999F, 1.0F, 0.0F, 0.0F); GL11.glTranslatef(0.0F, 0.0F, 0.18F); } int i = heldItem.getItem() instanceof ItemSword ? 1 : 2; GL11.glRotatef(i * -90.0F, 0F, 0F, 1F); GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); System.out.println(f); GL11.glEnable(3042); GL11.glBlendFunc(770, 771); renderItemIn3d(heldItem); GL11.glDisable(3042); GL11.glPopMatrix(); } } super.renderPlayer(player, x, z, y, f, f2); } public static void renderItemIn3d(ItemStack stack) { TextureManager textureManager = Minecraft.getMinecraft().getTextureManager(); if (textureManager == null) return; Item item = stack.getItem(); GL11.glPushMatrix(); Tessellator tessellator = Tessellator.instance; GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(-0.5F, -0.5F, 1 / 32.0F); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); int passes = item.getRenderPasses(stack.getItemDamage()); for (int pass = 0; pass < passes; pass++) { textureManager.bindTexture(((stack.getItemSpriteNumber() == 0) ? TextureMap.locationBlocksTexture : TextureMap.locationItemsTexture)); IIcon icon = item.getIcon(stack, pass); float minU = icon.getMinU(); float maxU = icon.getMaxU(); float minV = icon.getMinV(); float maxV = icon.getMaxV(); setColorFromInt(item.getColorFromItemStack(stack, pass)); ItemRenderer.renderItemIn2D(tessellator, maxU, minV, minU, maxV, icon.getIconWidth(), icon.getIconHeight(), 0.0625F); } GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } public static void setColorFromInt(int color) { float r = (color >> 16 & 255) / 255.0F; float g = (color >> 8 & 255) / 255.0F; float b = (color & 255) / 255.0F; GL11.glColor4f(r, g, b, 1.0F); } }
-
il te faut jouer avec les rotatef et scalef de ton code de rendu pour trouver la bonne position
-
tu n’a pas pris en compte le paramètre de rotation du corps : " player.rotationYaw; ", il me semble que c’est ce paramètre ou alors c’est un paramètre avec un nom similaire.
-
exact phenix j’avais mal lu sa question
-
Je maitrise mal la fonction GL11.glRotatef()
D’après ce que je comprends y’a :
GL11.glRotatef(ANGLE , X , Y , Z)
dont je fais :
GL11.glRotatef(player.renderYawOffset, ?F, 0F, ?F);
Pour faire un rotation sur X / Z mais comment savoir les valeurs de X / Z ?
Ah ! j’ai trouvé le float du corps :
int i = heldItem.getItem() instanceof ItemSword ? 1 : 2; GL11.glRotatef(i * -90.0F, 0F, 0F, 1F); GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-player.renderYawOffset, 0F, 1F, 0F); GL11.glEnable(3042); GL11.glBlendFunc(770, 771); renderItemIn3d(heldItem); GL11.glDisable(3042); GL11.glPopMatrix();