- 4
- 0
Хочу чтобы у меня появился квадрат над игроком, для этого мне нужно преобразовать координаты игрока (xyz) в квадратичные координаты (xy).
Есть вот такой метод преобразования:
Основной код:
В итоге красный квадрат появился (тот самый drawRect в начале), а квадрат на игроке "ВЫБОР РЕЖИМА" не появился (также тестировал на игроках, а не npc (ну вдруг есть разница), не помогло (ну это логично))
P.S если что он появляется, но в другом месте:
Если кто-то знает, помогите пожалуйста
P.S. у друга в чите были трейсера, я попросил дать их, и прикол что на фордже они летят в разные стороны:
View bobbing (покачивание экрана) выключено если что
Есть вот такой метод преобразования:
Java:
private Vector2f project(Matrix4f projectionMatrix, Vector3d position) {
Minecraft mc = Minecraft.getInstance();
MainWindow resolution = mc.getWindow();
float width = resolution.getGuiScaledWidth();
float height = resolution.getGuiScaledHeight();
// Представление координат игрока (xyz) в гомогенных координатах (xyzw)
Vector4f position4f = new Vector4f((float) position.x, (float) position.y, (float) position.z, 1.0f);
// Применяем матрицу проекции к position4f, чтобы выполнить проекцию точки на экран
position4f.transform(projectionMatrix);
// Координаты xy после проекции
float xDevice = position4f.x() / position4f.w();
float yDevice = position4f.y() / position4f.w();
// Координаты xy на основе xy устройства и размера окна игры
float screenX = (xDevice + 1.0f) * 0.5f * width;
float screenY = (1.0f - yDevice) * 0.5f * height;
return new Vector2f(screenX, screenY);
}
Основной код:
Java:
@SubscribeEvent
public void onRenderGameOverlay(RenderGameOverlayEvent event) {
drawRect(0, 0);
Minecraft mc = Minecraft.getInstance();
Matrix4f matrix = event.getMatrixStack().last().pose();
if (mc.level == null || mc.player == null)
return;
// Ширина и высота окна
float width = mc.getWindow().getGuiScaledWidth();
float height = mc.getWindow().getGuiScaledHeight();
for (PlayerEntity entity : mc.level.players()) {
// Координаты камеры (позиция камеры относительно игрока)
double cameraX = mc.gameRenderer.getMainCamera().getPosition().x();
double cameraY = mc.gameRenderer.getMainCamera().getPosition().y();
double cameraZ = mc.gameRenderer.getMainCamera().getPosition().z();
// Координаты игрока относительно камеры
double renderX = entity.getX() - cameraX;
double renderY = entity.getY() - cameraY;
double renderZ = entity.getZ() - cameraZ;
// Координаты игрока на экране (xy)
Vector2f projectedPos = project(matrix, new Vector3d(renderX, renderY, renderX));
// Отрисовка прямоугольника
drawRect(projectedPos.x, projectedPos.y);
}
}
drawRect(0, 0)
в начале был вызван для проверки:В итоге красный квадрат появился (тот самый drawRect в начале), а квадрат на игроке "ВЫБОР РЕЖИМА" не появился (также тестировал на игроках, а не npc (ну вдруг есть разница), не помогло (ну это логично))
P.S если что он появляется, но в другом месте:
Если кто-то знает, помогите пожалуйста
P.S. у друга в чите были трейсера, я попросил дать их, и прикол что на фордже они летят в разные стороны:
View bobbing (покачивание экрана) выключено если что
Последнее редактирование: