- 1,526
- 138
- 281
Здравствуйте дорогие форумчане!
Недавно начал разбираться в рендере кастомных моделей в игре, однако повороты мне не особо даются. Подозреваю, что где-то ошибаюсь в кватернионе, однако не совсем понимаю где.
Код должен вращать мою модельку по направлению к игроку, как можно догадаться. Заранее большое спасибо!
Недавно начал разбираться в рендере кастомных моделей в игре, однако повороты мне не особо даются. Подозреваю, что где-то ошибаюсь в кватернионе, однако не совсем понимаю где.
В BlockEntitytRenderer:
stack.pushPose();
stack.translate(0.5f, 1.25f, 0.5f);
//Вектор к игроку
Vector3f vec = new Vector3f();
vec.x = (float) Minecraft.getInstance().player.position().x - blockEntity.getBlockPos().getX() + 0.5f;
vec.y = (float) Minecraft.getInstance().player.position().y - blockEntity.getBlockPos().getY() + 1.25f;
vec.z = (float) Minecraft.getInstance().player.position().z - blockEntity.getBlockPos().getZ() + 0.5f;
vec = vec.normalize();
//Вычисление углов в радианах, поворот на соотв. углы
float xAngle = (float) Math.acos(vec.x) ;
float yAngle = (float) Math.acos(vec.y);
float zAngle = (float) Math.acos(vec.z);
stack.mulPose(Axis.XP.rotation(xAngle)); // Axis.XP.rotation возвращает (new Quaternionf()).rotationX(xAngle).
stack.mulPose(Axis.YP.rotation(yAngle)); // Также, но по Y
stack.mulPose(Axis.ZP.rotation(zAngle)); // Также, но по Z
//Рендер
renderEye(stack, buffer, 15728880, packedOverlay);
stack.popPose();
Код должен вращать мою модельку по направлению к игроку, как можно догадаться. Заранее большое спасибо!