Неверный поворот части модели.

176
0
Сделал модельку, но часть шейпов повёрнуто неверно. В чём может быть причина?
В игре:
EoAtF6C.png


В Techne:
lxCCb5b.png


Модель:
Код:
package su.poligon.main.models;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;

public class ModelWarAxe extends ModelBase
{
  //fields
    ModelRenderer Shape1;
    ModelRenderer Shape2;
    ModelRenderer Shape3;
    ModelRenderer Shape4;
    ModelRenderer Shape5;
    ModelRenderer Shape6;
    ModelRenderer Shape7;
    ModelRenderer Shape8;
    ModelRenderer Shape9;
    ModelRenderer Shape10;
    ModelRenderer Shape11;
    ModelRenderer Shape12;
    ModelRenderer Shape13;
    ModelRenderer Shape14;
    ModelRenderer Shape15;
    ModelRenderer Shape16;
    ModelRenderer Shape17;
    ModelRenderer Shape18;
    ModelRenderer Shape19;
    ModelRenderer Shape20;
    ModelRenderer Shape21;
    ModelRenderer Shape22;
    ModelRenderer Shape23;
    ModelRenderer Shape24;
    ModelRenderer Shape25;
    ModelRenderer Shape26;
  
  public ModelWarAxe()
  {
    textureWidth = 256;
    textureHeight = 128;
    
      Shape1 = new ModelRenderer(this, 0, 0);
      Shape1.addBox(0F, 0F, 0F, 5, 62, 5);
      Shape1.setRotationPoint(0F, -39.6F, 0F);
      Shape1.setTextureSize(64, 32);
      Shape1.mirror = true;
      setRotation(Shape1, 0F, 0F, 0F);
      Shape2 = new ModelRenderer(this, 0, 0);
      Shape2.addBox(0F, 0F, 0F, 15, 4, 7);
      Shape2.setRotationPoint(-5F, -43F, -1F);
      Shape2.setTextureSize(64, 32);
      Shape2.mirror = true;
      setRotation(Shape2, 0F, 0F, 0F);
      Shape3 = new ModelRenderer(this, 0, 0);
      Shape3.addBox(0F, 0F, 0F, 5, 25, 9);
      Shape3.setRotationPoint(10F, -58F, -1.866667F);
      Shape3.setTextureSize(64, 32);
      Shape3.mirror = true;
      setRotation(Shape3, 0F, 0F, 0F);
      Shape4 = new ModelRenderer(this, 0, 0);
      Shape4.addBox(0F, 0F, 0F, 5, 25, 9);
      Shape4.setRotationPoint(-9.666667F, -58F, -2F);
      Shape4.setTextureSize(64, 32);
      Shape4.mirror = true;
      setRotation(Shape4, 0F, 0F, 0F);
      Shape5 = new ModelRenderer(this, 0, 0);
      Shape5.addBox(0F, 0F, 0F, 15, 4, 7);
      Shape5.setRotationPoint(-5F, -54F, -1F);
      Shape5.setTextureSize(64, 32);
      Shape5.mirror = true;
      setRotation(Shape5, 0F, 0F, 0F);
      Shape6 = new ModelRenderer(this, 0, 0);
      Shape6.addBox(0F, 0F, 0F, 7, 16, 9);
      Shape6.setRotationPoint(-4F, -58F, -2F);
      Shape6.setTextureSize(64, 32);
      Shape6.mirror = true;
      setRotation(Shape6, 0F, 0F, 2.111848F);
      Shape7 = new ModelRenderer(this, 0, 0);
      Shape7.addBox(0F, 0F, 0F, 7, 15, 9);
      Shape7.setRotationPoint(-7.466667F, -39F, -2F);
      Shape7.setTextureSize(64, 32);
      Shape7.mirror = true;
      setRotation(Shape7, 0F, 0F, 1.029744F);
      Shape8 = new ModelRenderer(this, 0, 0);
      Shape8.addBox(0F, 0F, 0F, 7, 15, 9);
      Shape8.setRotationPoint(9F, -33F, -2F);
      Shape8.setTextureSize(64, 32);
      Shape8.mirror = true;
      setRotation(Shape8, 0F, 0F, -1.029744F);
      Shape9 = new ModelRenderer(this, 0, 0);
      Shape9.addBox(0F, 0F, 0F, 7, 16, 9);
      Shape9.setRotationPoint(13F, -52F, -2F);
      Shape9.setTextureSize(64, 32);
      Shape9.mirror = true;
      setRotation(Shape9, 0F, 0F, -2.111848F);
      Shape10 = new ModelRenderer(this, 0, 0);
      Shape10.addBox(0F, 0F, 0F, 7, 16, 9);
      Shape10.setRotationPoint(20F, -59F, -2F);
      Shape10.setTextureSize(64, 32);
      Shape10.mirror = true;
      setRotation(Shape10, 0F, 0F, -0.2306552F);
      Shape11 = new ModelRenderer(this, 0, 0);
      Shape11.addBox(0F, 0F, 0F, 7, 22, 9);
      Shape11.setRotationPoint(23F, -46F, -2F);
      Shape11.setTextureSize(64, 32);
      Shape11.mirror = true;
      setRotation(Shape11, 0F, 0F, 0.1455835F);
      Shape12 = new ModelRenderer(this, 0, 0);
      Shape12.addBox(0F, 0F, 0F, 7, 16, 9);
      Shape12.setRotationPoint(-21F, -60F, -2F);
      Shape12.setTextureSize(64, 32);
      Shape12.mirror = true;
      setRotation(Shape12, 0F, 0F, 0.2306627F);
      Shape13 = new ModelRenderer(this, 0, 0);
      Shape13.addBox(0F, 0F, 0F, 7, 22, 9);
      Shape13.setRotationPoint(-24F, -45F, -2F);
      Shape13.setTextureSize(64, 32);
      Shape13.mirror = true;
      setRotation(Shape13, 0F, 0F, -0.1455779F);
      Shape14 = new ModelRenderer(this, 0, 0);
      Shape14.addBox(0F, 0F, 0F, 7, 8, 7);
      Shape14.setRotationPoint(-2.5F, 22F, 2.5F);
      Shape14.setTextureSize(64, 32);
      Shape14.mirror = true;
      setRotation(Shape14, 0F, 0.7853982F, 0F);
      Shape15 = new ModelRenderer(this, 0, 0);
      Shape15.addBox(0F, 0F, 0F, 5, 62, 5);
      Shape15.setRotationPoint(-1F, -39F, 2.5F);
      Shape15.setTextureSize(64, 32);
      Shape15.mirror = true;
      setRotation(Shape15, 0F, 0.7853982F, 0F);
      Shape16 = new ModelRenderer(this, 0, 0);
      Shape16.addBox(0F, 0F, 0F, 5, 15, 5);
      Shape16.setRotationPoint(-1F, -58F, 2.5F);
      Shape16.setTextureSize(64, 32);
      Shape16.mirror = true;
      setRotation(Shape16, 0F, 0.7853982F, 0F);
      Shape17 = new ModelRenderer(this, 0, 0);
      Shape17.addBox(0F, 0F, 0F, 6, 22, 6);
      Shape17.setRotationPoint(-21.7F, -70F, 2.5F);
      Shape17.setTextureSize(64, 32);
      Shape17.mirror = true;
      setRotation(Shape17, -0.2268928F, 0.7853982F, 0.2268928F);
      Shape18 = new ModelRenderer(this, 0, 0);
      Shape18.addBox(0F, 0F, 0F, 6, 18, 6);
      Shape18.setRotationPoint(-28.5F, -50F, 2.5F);
      Shape18.setTextureSize(64, 32);
      Shape18.mirror = true;
      setRotation(Shape18, 0.0523599F, 0.7853982F, -0.0523599F);
      Shape19 = new ModelRenderer(this, 0, 0);
      Shape19.addBox(0F, 0F, 0F, 6, 18, 6);
      Shape19.setRotationPoint(-27F, -32F, 2.5F);
      Shape19.setTextureSize(64, 32);
      Shape19.mirror = true;
      setRotation(Shape19, 0.1919862F, 0.7853982F, -0.1919862F);
      Shape20 = new ModelRenderer(this, 0, 0);
      Shape20.addBox(0F, 0F, 0F, 6, 18, 6);
      Shape20.setRotationPoint(28.5F, -34F, -2F);
      Shape20.setTextureSize(64, 32);
      Shape20.mirror = true;
      setRotation(Shape20, 0.1919862F, -0.7853982F, 0.1919862F);
      Shape21 = new ModelRenderer(this, 0, 0);
      Shape21.addBox(0F, 0F, 0F, 6, 18, 6);
      Shape21.setRotationPoint(29.5F, -49F, -2F);
      Shape21.setTextureSize(64, 32);
      Shape21.mirror = true;
      setRotation(Shape21, 0.0523599F, -0.7853982F, 0.0523599F);
      Shape22 = new ModelRenderer(this, 0, 0);
      Shape22.addBox(0F, 0F, 0F, 6, 24, 6);
      Shape22.setRotationPoint(22.3F, -68.5F, -2F);
      Shape22.setTextureSize(64, 32);
      Shape22.mirror = true;
      setRotation(Shape22, -0.2268928F, -0.7853982F, -0.2268928F);
      Shape23 = new ModelRenderer(this, 0, 0);
      Shape23.addBox(0F, 0F, 0F, 44, 2, 2);
      Shape23.setRotationPoint(-18F, -49F, 0F);
      Shape23.setTextureSize(64, 32);
      Shape23.mirror = true;
      setRotation(Shape23, 0F, 0F, 0F);
      Shape24 = new ModelRenderer(this, 0, 0);
      Shape24.addBox(0F, 0F, 0F, 44, 2, 2);
      Shape24.setRotationPoint(-19F, -46F, 0F);
      Shape24.setTextureSize(64, 32);
      Shape24.mirror = true;
      setRotation(Shape24, 0F, 0F, 0F);
      Shape25 = new ModelRenderer(this, 0, 0);
      Shape25.addBox(0F, 0F, 0F, 12, 2, 2);
      Shape25.setRotationPoint(14F, -42F, 0F);
      Shape25.setTextureSize(64, 32);
      Shape25.mirror = true;
      setRotation(Shape25, 0F, 0F, 0.2617994F);
      Shape26 = new ModelRenderer(this, 0, 0);
      Shape26.addBox(0F, 0F, 0F, 12, 2, 2);
      Shape26.setRotationPoint(-17F, -40F, 0F);
      Shape26.setTextureSize(64, 32);
      Shape26.mirror = true;
      setRotation(Shape26, 0F, 0F, -0.2617994F);
  }
  
  public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, boolean isFirstPirson)
  {
    super.render(entity, f, f1, f2, f3, f4, f5);
    setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    Shape1.render(f5);
    Shape2.render(f5);
    Shape3.render(f5);
    Shape4.render(f5);
    Shape5.render(f5);
    Shape6.render(f5);
    Shape7.render(f5);
    Shape8.render(f5);
    Shape9.render(f5);
    Shape10.render(f5);
    Shape11.render(f5);
    Shape12.render(f5);
    Shape13.render(f5);
    Shape14.render(f5);
    Shape15.render(f5);
    Shape16.render(f5);
    Shape17.render(f5);
    Shape18.render(f5);
    Shape19.render(f5);
    Shape20.render(f5);
    Shape21.render(f5);
    Shape22.render(f5);
    Shape23.render(f5);
    Shape24.render(f5);
    Shape25.render(f5);
    Shape26.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 ent)
  {
    super.setRotationAngles(f, f1, f2, f3, f4, f5, ent);
  }

}
Рендер:
Код:
package su.poligon.main.models.renders;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainerCreative;
import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;

import org.lwjgl.opengl.GL11;

import su.poligon.main.models.ModelWarAxe;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class RenderModelWarAxe implements IItemRenderer
{
    @SideOnly(Side.CLIENT)
    protected ModelWarAxe launcherModel;
    @SideOnly(Side.CLIENT)
    public RenderModelWarAxe()
    {
        launcherModel = new ModelWarAxe();
    }
    @SideOnly(Side.CLIENT)
    @Override
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
        switch(type)
        {
            case EQUIPPED: return true;
            default: return false;
        }
    }
    @SideOnly(Side.CLIENT)
    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) 
    {
        return false;
    }
    @SideOnly(Side.CLIENT)
    @Override
    public void renderItem(ItemRenderType type, ItemStack item, Object... data) 
    {
        switch(type)
        {
        case EQUIPPED:
            {
                GL11.glScalef(0.3F, 0.3F, 0.3F);
                
                GL11.glPushMatrix();
                Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation ("setera", "textures/models/w_warAxe.png"));
                GL11.glRotatef(220F, 1F, -0.0F, 0F);
                GL11.glRotatef(170F, 25F, 0F, 0F);
                GL11.glRotatef(-115F, 0.0F, 0.3F, 1F);
                boolean isFirstPirson = true;
                if(data[1] != null && data[1] instanceof EntityPlayer)
                {
                    if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 180.0F)));
                    {
                        GL11.glTranslatef(-0.F, -0.0F, -0.0F);
                    }
                }
                else
                {
                    isFirstPirson = true;
                }
                
                GL11.glTranslatef(-2F, 0.7F, -0.7F);
                float scale = 1.0F;
                GL11.glScalef(1.0F, 1.0F, 1.0F);
                launcherModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, isFirstPirson);
                GL11.glPopMatrix();
                
            }
            default:
                break;
        }
    }

}
 
905
5
Ну, во-первых, не советую юзать такие предметы. А о-вторых, скинь саму модель, лолка, или переименуй шейпы. Мы тут не маги, деобфусцирующие взглядом(а хотелось бы).
 
176
0
laz2727 написал(а):
Ну, во-первых, не советую юзать такие предметы. А о-вторых, скинь саму модель, лолка, или переименуй шейпы. Мы тут не маги, деобфусцирующие взглядом(а хотелось бы).

1. Лолка тут вы. Ненадо такие фразы кидать. Ок?
2. У модели 26 шейпов с уникальными именами. Криво отображаются конкретно 22 и 17. Саму модель я скинул. А вот то, что вы меня просите нужно уточнить. Очевидно *.tcn файл. Отлично. Вот он.
3. Абсолютно не понял при чем тут "деобфускация". Код перед вами. Нет, нужно "поучить лолку". Ну-ну.
 
1,990
18
105
Это течнепроблемы.
Атвичаю.
Я когда делал костер для мода, там тоже было немало шейпов и некоторые повернуты не так, как в течне.
Разработчик что-то с углами\генерацией кода напутал.
Надо протестировать на какой-нибудь модельке потом.
 
176
0
Oldestkon написал(а):
Это течнепроблемы.
Атвичаю.
Я когда делал костер для мода, там тоже было немало шейпов и некоторые повернуты не так, как в течне.
Разработчик что-то с углами\генерацией кода напутал.
Надо протестировать на какой-нибудь модельке потом.

Это как-то лечится? Или нужно идти курить маны по повороту моделей в? Ибо там какие-то страшные цифры вместо 40 (к примеру) там 0,58654649854.
 
Лол. Интересно, кто-нибудь кроме меня догадался писать вместо вот этого говнеца
Код:
             boolean isFirstPirson = true;
                if(data[1] != null && data[1] instanceof EntityPlayer)
                {
                    if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 180.0F)));
                    {
                        ...
                    }
                }
                else
                {
                    isFirstPirson = true;
                }

Вот это:
Код:
switch (type)
{
case EQUIPPED: 
    // От третьего лица
    break;
case EQUIPPED_FIRST_PERSON:
    // От первого лица
    break;
case INVENTORY:
    // В инвентаре
    break;
case ENTITY:
    // В мире
    break;
default:
    return;
}
 
2,955
12
Не хвастайся. Просто все делают по айчуновскому старому туториалу.
 
176
0
Slyfarmerjon написал(а):
Лол. Интересно, кто-нибудь кроме меня догадался писать вместо вот этого говнеца
Код:
             boolean isFirstPirson = true;
                if(data[1] != null && data[1] instanceof EntityPlayer)
                {
                    if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 180.0F)));
                    {
                        ...
                    }
                }
                else
                {
                    isFirstPirson = true;
                }

Вот это:
Код:
switch (type)
{
case EQUIPPED: 
    // От третьего лица
    break;
case EQUIPPED_FIRST_PERSON:
    // От первого лица
    break;
case INVENTORY:
    // В инвентаре
    break;
case ENTITY:
    // В мире
    break;
default:
    return;
}
Там есть подобный свич выше и ниже.
Код:
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
        switch(type)
        {
            case EQUIPPED: return true;
            default: return false;
        }
    }
 
Volkula написал(а):
Slyfarmerjon написал(а):
Лол. Интересно, кто-нибудь кроме меня догадался писать вместо вот этого говнеца
Код:
             boolean isFirstPirson = true;
                if(data[1] != null && data[1] instanceof EntityPlayer)
                {
                    if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 180.0F)));
                    {
                        ...
                    }
                }
                else
                {
                    isFirstPirson = true;
                }

Вот это:
Код:
switch (type)
{
case EQUIPPED: 
    // От третьего лица
    break;
case EQUIPPED_FIRST_PERSON:
    // От первого лица
    break;
case INVENTORY:
    // В инвентаре
    break;
case ENTITY:
    // В мире
    break;
default:
    return;
}
Там есть подобный свич выше и ниже.
Код:
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
        switch(type)
        {
            case EQUIPPED: return true;
            default: return false;
        }
    }
Да, но самое интересное то, что ты сделал только case EQUIPPED
 
Там есть подобный свич выше и ниже.
Код:
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
        switch(type)
        {
            case EQUIPPED: return true;
            default: return false;
        }
    }
Да, но самое интересное то, что ты сделал только case EQUIPPED

Вообще данный свитч обозначает что можно рендерить, а что нет.
Если поставить вместо свитча
Код:
return true;
то всё будет норм. Только я не советую ставить всё - лучше исключить из инвентаря, и из мира - так больше производительность игры.


Код:
switch(type)
{
     case ENTITY: return false;
     case INVENTORY: return false;
     default: return true;
}
 
Сверху