Поворот модельки вместе с головой

Версия Minecraft
1.7.10
API
Forge
29
2
0
Привет, друзья.

В общем вопросик такой. У меня есть модель, энтити и рендерер для всей этой темы. Я смог заставить модельку зарендериться у моего игрока, даже она крутится (кое-как) вместе с головой игрока. Однако проблема в том что я не могу как-то сделать это грамотно. Если у кого то есть инфа о том как можно мне помочь, до буду очень рад увидеть её.

Конкретнее что не так : Моделька моя странно очень крутится. Её оборот вращения происходит не вокруг себя а вокруг игрока я бы сказал. При том что в каком то положении она далеко от игрока, а в каком то совсем близко.


EventHandler:
@SubscribeEvent
    public void onRenderPlayer(RenderPlayerEvent.Pre event) {
       
        ModelBase hat = new ModelHat();
        Entity ehat = new EntityHat(Minecraft.getMinecraft().theWorld);
        RenderHat rhat = new RenderHat();
       
        GL11.glPushMatrix();

        GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
        GL11.glTranslatef((float)0+0.5f, (float)0+0.5f, (float)0+0.5f);
        GL11.glRotated(1,0,1,1);
        GL11.glScalef(0.2f,0.2f,0.2f);
        GL11.glDisable(GL11.GL_LIGHTING);
        GL11.glDisable(GL11.GL_TEXTURE_2D);

        rhat.doRender(ehat, 0F, 0F, 0F, 0F, 0.3F);
       
        GL11.glPopAttrib();
        GL11.glPopMatrix();
    }


Renderer:
public class RenderHat extends Render{

    private final ModelBase hat = new ModelHat();

       
    @Override
    public void doRender(Entity entity, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_,
            float p_76986_9_) {
        ModelBase hat = new ModelHat();
        Entity ehat = new EntityHat(Minecraft.getMinecraft().theWorld);
        float yaw = Minecraft.getMinecraft().thePlayer.prevRotationYaw;
        float pitch = Minecraft.getMinecraft().thePlayer.prevRotationPitch;
        GL11.glPushMatrix();
        GL11.glRotatef(yaw, 0F, -1.0F, 0F);
        GL11.glRotatef(pitch, 1.0F, 0F, 0F);
        GL11.glTranslatef(0F, -10F, 0F);
        GL11.glScalef(-1.0F, -1.0F, 1.0F);
        hat.render(ehat, 0, 0F, 0F, 0F, 0F, 0.3F);
        GL11.glPopMatrix();
    }

    @Override
    protected ResourceLocation getEntityTexture(Entity entity) {
        return texture;
    }

}


Моделька:
public class ModelHat extends ModelBase
{
  //fields
    ModelRenderer Shape1;
    ModelRenderer Shape2;

  public ModelHat()
  {
    textureWidth = 64;
    textureHeight = 32;
   
      Shape1 = new ModelRenderer(this, 0, 0);
      Shape1.addBox(-4F, 0F, -4F, 8, 1, 8);
      Shape1.setRotationPoint(0F, -10F, 0F);
      Shape1.setTextureSize(64, 32);
      Shape1.mirror = true;
      setRotation(Shape1, 0F, 0F, 0F);
      Shape2 = new ModelRenderer(this, 0, 0);
      Shape2.addBox(-3F, -3F, -3F, 6, 6, 6);
      Shape2.setRotationPoint(0F, -13F, 0F);
      Shape2.setTextureSize(64, 32);
      Shape2.mirror = true;
      setRotation(Shape2, 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);
    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);
  }

}
 
Последнее редактирование:
929
30
66
Я сомневаюсь что тебе нужно рисовать на ком-то кроме игрока, тебе не нужно делать свой Render он есть в ивенте, renderer является наследником Render'a, а отрисовку можешь делать сразу в ивенте
Java:
glPushMatrix();
event.renderer.modelBipedMain.bipedHead.postRender(0.0625F);
glBindTexture(GL_TEXTURE_2D, textureId);//тут биндим текстуру, делай по своему
glScalef(0.6F, 0.6F, 0.6F);
glTranslatef(0.0F, 0.0F, 0.0F);
glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
glCallList(ModelsHandler.getModelHashByName("headModel"));//тут обращайся к модельке и вызывай renderAll/renderPart
glPopMatrix();
 
929
30
66
В любом случаи код выше примерный я тебе кинул, а то что ты вверху прикреплял сожги, ты вызываешь массу не нужного кода, тем более функции openGl'a которые тебе не нужны, просто копировать какой-то код и думать что он будет работать не стоит, тут на форуме масса таких тем, ищи внимательней.
 
Сверху