- 771
- 5
Вообщем сделал модель для блока, рендерю вроде правильно, но у некоторых шейпов меняется положение и в итоге она рендерится неправильно:
В Techne все нормально(тут все бревна соприкасаются с камнями, в игре - нет):
Рендер:
Модель:
В чем проблема?
В Techne все нормально(тут все бревна соприкасаются с камнями, в игре - нет):
Рендер:
Код:
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5);
mc.renderEngine.bindTexture(new ResourceLocation(Esoteric.MOD_ID.toLowerCase(), "textures/blocks/campfire.png"));
GL11.glPushMatrix();
GL11.glRotated(180, 0.0, 0.0, 1.0);
int angle = campfire.getBlockMetadata() * 90;
GL11.glRotated(angle + 90, 0.0F, 1.0F, 0.0F);
campfireModel.render((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
GL11.glPopMatrix();
GL11.glPopMatrix();
Код:
public class ModelCampfire extends ModelBase{
ModelRenderer rock1;
ModelRenderer rock2;
ModelRenderer rock3;
ModelRenderer rock4;
ModelRenderer rock5;
ModelRenderer rock6;
ModelRenderer rock7;
ModelRenderer rock8;
ModelRenderer log3;
ModelRenderer log1;
ModelRenderer log4;
ModelRenderer log2;
ModelRenderer down;
ModelRenderer wall1;
ModelRenderer wall2;
ModelRenderer wall3;
ModelRenderer wall4;
ModelRenderer arm1;
ModelRenderer arm2;
public ModelCampfire(){
textureWidth = 64;
textureHeight = 32;
rock1 = new ModelRenderer(this, 0, 0);
rock1.addBox(0F, 0F, 0F, 3, 2, 3);
rock1.setRotationPoint(5F, 22F, 3F);
rock1.setTextureSize(64, 32);
rock1.mirror = true;
setRotation(rock1, 0F, -0.7435722F, 0F);
rock2 = new ModelRenderer(this, 0, 0);
rock2.addBox(0F, 0F, 0F, 3, 3, 6);
rock2.setRotationPoint(5F, 21F, -3F);
rock2.setTextureSize(64, 32);
rock2.mirror = true;
setRotation(rock2, 0F, 0F, 0F);
rock3 = new ModelRenderer(this, 0, 0);
rock3.addBox(0F, 0F, 0F, 5, 3, 3);
rock3.setRotationPoint(2.5F, 21F, -8F);
rock3.setTextureSize(64, 32);
rock3.mirror = true;
setRotation(rock3, 0F, -0.5576792F, 0F);
rock4 = new ModelRenderer(this, 0, 0);
rock4.addBox(0F, 0F, 0F, 3, 2, 2);
rock4.setRotationPoint(-2F, 22F, -7.5F);
rock4.setTextureSize(64, 32);
rock4.mirror = true;
setRotation(rock4, 0F, 0F, 0F);
rock5 = new ModelRenderer(this, 0, 0);
rock5.addBox(0F, 0F, -2F, 7, 2, 2);
rock5.setRotationPoint(-3.5F, 22F, 7.8F);
rock5.setTextureSize(64, 32);
rock5.mirror = true;
setRotation(rock5, 0F, 0F, 0F);
rock6 = new ModelRenderer(this, 0, 0);
rock6.addBox(0F, 0F, 0F, 3, 3, 3);
rock6.setRotationPoint(-5F, 21F, 3F);
rock6.setTextureSize(64, 32);
rock6.mirror = true;
setRotation(rock6, 0F, -1.003822F, 0F);
rock7 = new ModelRenderer(this, 0, 0);
rock7.addBox(0F, 0F, 0F, 4, 3, 3);
rock7.setRotationPoint(-7F, 21F, -4.5F);
rock7.setTextureSize(64, 32);
rock7.mirror = true;
setRotation(rock7, 0F, 0.8551081F, 0F);
rock8 = new ModelRenderer(this, 0, 0);
rock8.addBox(0F, 0F, 0F, 3, 2, 6);
rock8.setRotationPoint(-8F, 22F, -3F);
rock8.setTextureSize(64, 32);
rock8.mirror = true;
setRotation(rock8, 0F, 0F, 0F);
log3 = new ModelRenderer(this, 0, 16);
log3.addBox(0F, 0F, 0F, 2, 9, 2);
log3.setRotationPoint(0F, 16F, -1F);
log3.setTextureSize(64, 32);
log3.mirror = true;
setRotation(log3, 0.3717861F, -1.487144F, -0.1487144F);
log1 = new ModelRenderer(this, 8, 20);
log1.addBox(0F, 0F, 0F, 2, 9, 2);
log1.setRotationPoint(0F, 16F, -1F);
log1.setTextureSize(64, 32);
log1.mirror = true;
setRotation(log1, -0.1487144F, 0F, -0.3717861F);
log4 = new ModelRenderer(this, 0, 16);
log4.addBox(0F, 0F, -2F, 2, 9, 2);
log4.setRotationPoint(1F, 16F, 1F);
log4.setTextureSize(64, 32);
log4.mirror = true;
setRotation(log4, -0.3346075F, 3.141593F, 0F);
log2 = new ModelRenderer(this, 0, 20);
log2.addBox(0F, 0F, 0F, 2, 9, 2);
log2.setRotationPoint(1F, 16F, -1F);
log2.setTextureSize(64, 32);
log2.mirror = true;
setRotation(log2, 0.2974289F, 3.141593F, 0F);
down = new ModelRenderer(this, 32, 12);
down.addBox(0F, 0F, 0F, 8, 1, 8);
down.setRotationPoint(-4F, 15F, -4F);
down.setTextureSize(64, 32);
down.mirror = true;
setRotation(down, 0F, 0F, 0F);
wall1 = new ModelRenderer(this, 33, 0);
wall1.addBox(0F, 0F, 0F, 1, 1, 8);
wall1.setRotationPoint(-5F, 14F, -4F);
wall1.setTextureSize(64, 32);
wall1.mirror = true;
setRotation(wall1, 0F, 0F, 0F);
wall2 = new ModelRenderer(this, 33, 0);
wall2.addBox(0F, 0F, 0F, 1, 1, 8);
wall2.setRotationPoint(4F, 14F, -4F);
wall2.setTextureSize(64, 32);
wall2.mirror = true;
setRotation(wall2, 0F, 0F, 0F);
wall3 = new ModelRenderer(this, 33, 0);
wall3.addBox(0F, 0F, 0F, 8, 1, 1);
wall3.setRotationPoint(-4F, 14F, 4F);
wall3.setTextureSize(64, 32);
wall3.mirror = true;
setRotation(wall3, 0F, 0F, 0F);
wall4 = new ModelRenderer(this, 33, 0);
wall4.addBox(0F, 0F, 0F, 8, 1, 1);
wall4.setRotationPoint(-4F, 14F, -5F);
wall4.setTextureSize(64, 32);
wall4.mirror = true;
setRotation(wall4, 0F, 0F, 0F);
arm1 = new ModelRenderer(this, 33, 0);
arm1.addBox(0F, 0F, 0F, 3, 1, 2);
arm1.setRotationPoint(5F, 14F, -1F);
arm1.setTextureSize(64, 32);
arm1.mirror = true;
setRotation(arm1, 0F, 0F, 0F);
arm2 = new ModelRenderer(this, 9, 16);
arm2.addBox(0F, 0F, 0F, 6, 2, 2);
arm2.setRotationPoint(8F, 13.53333F, -1F);
arm2.setTextureSize(64, 32);
arm2.mirror = true;
setRotation(arm2, 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);
rock1.render(f5);
rock2.render(f5);
rock3.render(f5);
rock4.render(f5);
rock5.render(f5);
rock6.render(f5);
rock7.render(f5);
rock8.render(f5);
log3.render(f5);
log1.render(f5);
log4.render(f5);
log2.render(f5);
}
private void setRotation(ModelRenderer model, float x, float y, float z){
model.rotateAngleX = x;
model.rotateAngleY = y;
model.rotateAngleZ = z;
}
}