- 567
- 56
- 165
Доброго времени суток, у меня тут проблема с поворотом (верхняя сторона тестовой модельки ,,уезжает,, в сторону, хотя этого не хотелось бы), подскажите как исправить плиз. (По идее она должна кренится вверх-вниз, если лететь вперед-вверх/вперед-вниз)
Код рендера:
private float scale = 1.85f;
public void render(AbstractClientPlayer player){
GlStateManager.pushMatrix();
GlStateManager.scale(scale, scale, scale);
float yRot = calcYRot(player);
GlStateManager.rotate(90, 0, 1, 0);
GlStateManager.rotate(yRot, 1, 0, 0);
float rotYaw = calcXZrot(player.prevRotationYawHead, player.rotationYawHead, 1 );
//тут должна быть интерполяция, для более плавных анимаций, но и так сойдет ^^^
GlStateManager.rotate(180.0F - rotYaw, 0, 1, 0);
renderer.renderItem(
player.getHeldItemMainhand(),
player, ItemCameraTransforms.TransformType.FIXED, false
);
GlStateManager.popMatrix();
}
private float calcYRot(AbstractClientPlayer player){
//сделал временно так, чтобы легче читать было
//x, y - 1 и 2 переменные соотв.
Vec2d P1 = new Vec2d(player.posX, player.posY );
Vec2d P2 = new Vec2d(player.prevPosX, player.prevPosY);
Vec2d P3 = new Vec2d(player.prevPosX, player.posY );
return (float) -Math.toDegrees(Math.atan2(P3.y - P1.y, P3.x - P1.x) -
atan2(P2.y - P1.y, P2.x - P1.x));
}
//скопировал из кода mojang
//хоть и выглядит подозрительно, но оно работает правильно
private float calcXZrot(float prevYawOffset, float yawOffset, float partialTicks) {
float f;
for (f = yawOffset - prevYawOffset; f < -180.0F; f += 360.0F);
while (f >= 180.0F) {
f -= 360.0F;
}
return prevYawOffset + partialTicks * f;
}