Проблема с рендером Шлема

Версия Minecraft
1.7.10
Я решил создать шлем с нестандартной моделью. Сделал пробную модель в Techne. Написал код. И в игре она должна была выглядеть вот так:tema.png
но случилось в итоге, в игре она, почему- то выглядит вот так:

tema2.png


не совсем понимаю в чем проблема, поэтому решил написать вам на форум...может кто поможет разобраться в чем собственно прикол...
Вот код:
Java:
package mod.mcreator;

import net.minecraftforge.common.util.EnumHelper;

import net.minecraft.world.World;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.Item;
import net.minecraft.item.EnumAction;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.Entity;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.model.ModelBiped;

import java.util.Random;

import cpw.mods.fml.relauncher.SideOnly;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;

@SuppressWarnings("unchecked")
public class mcreator_zaeblo {

    public mcreator_zaeblo() {
    }

    public static Item helm;
    public static Object instance;

    public void load() {
    }

    public void generateNether(World world, Random random, int chunkX, int chunkZ) {
    }

    public void generateSurface(World world, Random random, int chunkX, int chunkZ) {
    }

    public int addFuel(ItemStack fuel) {
        return 0;
    }

    public void serverLoad(FMLServerStartingEvent event) {
    }

    public void preInit(FMLPreInitializationEvent event) {
    }

    public void registerRenderers() {
    }

    static {
          ItemArmor.ArmorMaterial mat = EnumHelper.addArmorMaterial("Zaeblo", 5, new int[] {3, 0, 0, 0}, 5);
        helm = (new Itemzaeblo(mat, 0, 0));
          helm.setMaxStackSize(0);
        Item.itemRegistry.addObject(512, "Zaeblo", helm);

    }

    static class Itemzaeblo extends ItemArmor {
          public ItemStack heldItem = null;
        public Itemzaeblo(ArmorMaterial mat, int index, int armorType) {
               super(mat, index, armorType);
            setMaxDamage(0);
            setUnlocalizedName("Zaeblo");
            setTextureName("z_roman_helm");
            setCreativeTab(CreativeTabs.tabCombat);
        }
     public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type){
               if(stack != null){
                    if(stack.getItem() == mcreator_zaeblo.helm){
                         return "Golova.png";
                         }
                    }
                         return null;
                    }
@Override
    @SideOnly(Side.CLIENT)
    public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) {
 
ArmorRenderer armorModel = new ArmorRenderer();
        if (armorModel != null) {
armorModel.bipedHead.showModel = armorSlot == 0;
            armorModel.bipedHeadwear.showModel = true;
            armorModel.bipedBody.showModel = armorSlot == 1 || armorSlot == 2;
            armorModel.bipedRightArm.showModel = armorSlot == 1;
            armorModel.bipedLeftArm.showModel = armorSlot == 1;
            armorModel.bipedRightLeg.showModel = armorSlot == 2 || armorSlot == 3;
            armorModel.bipedLeftLeg.showModel = armorSlot == 2 || armorSlot == 3;
            armorModel.isSneak = entityLiving.isSneaking();
            armorModel.isRiding = entityLiving.isRiding();
            armorModel.isChild = entityLiving.isChild();

            armorModel.heldItemRight = 0;
            armorModel.aimedBow = false;
 
            heldItem = entityLiving.getHeldItem();
 
            if (heldItem != null) {
 
                armorModel.heldItemRight = 1;
 
                if (entityLiving instanceof EntityPlayer) {
                    EntityPlayer player = (EntityPlayer) entityLiving;
 
                    if (player.getItemInUseCount() > 0 && entityLiving instanceof EntityPlayer) {
 
                        EnumAction enumaction = heldItem.getItemUseAction();
 
                        if (enumaction == EnumAction.bow) {
 
                            armorModel.aimedBow = true;
 
                        } else if (enumaction == EnumAction.block) {
 
                            armorModel.heldItemRight = 3;
 
                        }
                    }
 
                }
            }
        }
        return armorModel;
 
    }

}
@SideOnly(Side.CLIENT)
public static class ArmorRenderer extends ModelBiped
{
    ModelRenderer Shape1;
    ModelRenderer Shape2;
  
  public ArmorRenderer()
  {
    textureWidth = 64;
    textureHeight = 32;
    
      Shape1 = new ModelRenderer(this, 0, 0);
      Shape1.addBox(-1F, -8F, -5F, 6, 8, 1);
      Shape1.setRotationPoint(0F, 0F, 0F);
      Shape1.setTextureSize(64, 32);
      Shape1.mirror = true;
      setRotation(Shape1, 0F, 0F, 0F);
      Shape2 = new ModelRenderer(this, 15, 0);
      Shape2.addBox(3F, -13F, -6F, 1, 9, 1);
      Shape2.setRotationPoint(0F, 0F, 0F);
      Shape2.setTextureSize(64, 32);
      Shape2.mirror = true;
      setRotation(Shape2, 0F, 0F, 0F);
      this.Shape1.addChild(Shape2);
  }
  
  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);
    Shape1.render(f5);
    Shape2.render(f5);
  }
  
  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);
    this.Shape1.rotateAngleY = f3/(180/(float)Math.PI);
    this.Shape1.rotateAngleX = f4/(180/(float)Math.PI);
    if(this.isSneak){
     this.Shape1.rotationPointY = 1.0f;
     
    }
    else{
     this.Shape1.rotationPointY = 0.0f;
    }
  }

}

}
 
Проблема в повороте головы.
Течне - одна большая глючная задница, и такие проблемы иногда возникают. Конечно можно морочиться с углами, но проще экспортнуть в .obj и добавить одним объектом. Заодно там текстуры делать проще
 

Нет, я использовал код из этого видео

Его пришлось немного подправить. Птмшта он писал его на 1.8.8 и некоторые названия переменных и тд и тп различаются....тип переменная bow в классе EnumAction. Плюс... в методе public void render он использует GlStateManager... которого в 1.7.10 нет, как я понял. Мб в этом и кроется проблема...
 
Код добрый Тимаха нам дал, а модель можешь экспортировать из java => obj.
Тимаха, кончено, молодец, но obj рендерится намноооооооооого дольше (без моей обертки), чем java представление.
 
Тимаха, кончено, молодец, но obj рендерится намноооооооооого дольше (без моей обертки), чем java представление.
Но у obj и больше функций и проще. Можно узнать по поводу "обертки"? :D
 
Ребят, забыл написать. Проблему я уже давно решил, прикол в том, что
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);
Shape1.render(f5);
Shape2.render(f5);
}
- рендерит неправильно... Во первых он после того как посылает все переменные в супер класс, он рендерит потом еще раз их отдельно...
-Во вторых, чтоб не было проблем с поворотами головы, использовать надо GL11... след образом


setRotationAngles(f, f1, f2, f3, f4, f5, entity);
GL11.glPushMatrix();
if (entity.isSneaking())
{
GL11.glTranslated(0.0F, 0.0F, 0.0F);
}
GL11.glScalef(1.0F, 1.0F, 1.0F);
this.Shape1.render(f5);
GL11.glPopMatrix();
/**
хотя в принипе, это не обязательно, достаточно просто убрать повторный рендер.
**/

В мое случае проблема была в том, что не было импорта import org.lwjgl.opengl.GL11;
Сейчас все работает.
 
itemzaeblo:D
 
Назад
Сверху