Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Траблы с проекцией NameTags 1.21.1 MCP (решено)

  • Автор темы Автор темы dr3amq
  • Дата начала Дата начала
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
6 Апр 2025
Сообщения
363
Реакции
4
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Последнее редактирование:
самым первым, что увидел - это вронг позиции ентити, используй это
from 1.21.4 (EntityRenderer.java):
Expand Collapse Copy
double posX = Mth.lerp((double)e.getDeltaTracker().getRealtimeDeltaTicks(), player.xOld, player.getX());
double posY = Mth.lerp((double)e.getDeltaTracker().getRealtimeDeltaTicks(), player.yOld, player.getY());
double posZ = Mth.lerp((double)e.getDeltaTracker().getRealtimeDeltaTicks(), player.zOld, player.getZ());
следом, у тебя не задан projectionViewMatrix, может где-то и задана, но знай, что ее каждый тик надо обновлять.
вот пример нормальный ультилиты, взял из метеора
https://github.com/MeteorDevelopment/meteor-client/blob/master/src/main/java/meteordevelopment/meteorclient/utils/render/NametagUtils.java#L37C1-L85C6:
Expand Collapse Copy
    public static void onRender(Matrix4f modelView) {
        model.set(modelView);
        NametagUtils.projection.set(RenderSystem.getProjectionMatrix());

        Utils.set(camera, mc.gameRenderer.getCamera().getPos());
        cameraNegated.set(camera);
        cameraNegated.negate();

        windowScale = mc.getWindow().calculateScaleFactor(1, false);
    }

    public static boolean to2D(Vector3d pos, double scale) {
        return to2D(pos, scale, true);
    }

    public static boolean to2D(Vector3d pos, double scale, boolean distanceScaling) {
        return to2D(pos, scale, distanceScaling, false);
    }

    public static boolean to2D(Vector3d pos, double scale, boolean distanceScaling, boolean allowBehind) {
        Zoom zoom = Modules.get().get(Zoom.class);
        NametagUtils.scale = scale * zoom.getScaling();
        if (distanceScaling) {
            NametagUtils.scale *= getScale(pos);
        }

        vec4.set(cameraNegated.x + pos.x, cameraNegated.y + pos.y, cameraNegated.z + pos.z, 1);

        vec4.mul(model, mmMat4);
        mmMat4.mul(projection, pmMat4);

        boolean behind = pmMat4.w <= 0.f;

        if (behind && !allowBehind) return false;

        toScreen(pmMat4);
        double x = pmMat4.x * mc.getWindow().getFramebufferWidth();
        double y = pmMat4.y * mc.getWindow().getFramebufferHeight();

        if (behind) {
            x = mc.getWindow().getFramebufferWidth() - x;
            y = mc.getWindow().getFramebufferHeight() - y;
        }

        if (Double.isInfinite(x) || Double.isInfinite(y)) return false;

        pos.set(x / windowScale, mc.getWindow().getFramebufferHeight() - y / windowScale, allowBehind ? pmMat4.w : pmMat4.z);
        return true;
    }
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
самым первым, что увидел - это вронг позиции ентити, используй это
from 1.21.4 (EntityRenderer.java):
Expand Collapse Copy
double posX = Mth.lerp((double)e.getDeltaTracker().getRealtimeDeltaTicks(), player.xOld, player.getX());
double posY = Mth.lerp((double)e.getDeltaTracker().getRealtimeDeltaTicks(), player.yOld, player.getY());
double posZ = Mth.lerp((double)e.getDeltaTracker().getRealtimeDeltaTicks(), player.zOld, player.getZ());
следом, у тебя не задан projectionViewMatrix, может где-то и задана, но знай, что ее каждый тик надо обновлять.
вот пример нормальный ультилиты, взял из метеора
https://github.com/MeteorDevelopment/meteor-client/blob/master/src/main/java/meteordevelopment/meteorclient/utils/render/NametagUtils.java#L37C1-L85C6:
Expand Collapse Copy
    public static void onRender(Matrix4f modelView) {
        model.set(modelView);
        NametagUtils.projection.set(RenderSystem.getProjectionMatrix());

        Utils.set(camera, mc.gameRenderer.getCamera().getPos());
        cameraNegated.set(camera);
        cameraNegated.negate();

        windowScale = mc.getWindow().calculateScaleFactor(1, false);
    }

    public static boolean to2D(Vector3d pos, double scale) {
        return to2D(pos, scale, true);
    }

    public static boolean to2D(Vector3d pos, double scale, boolean distanceScaling) {
        return to2D(pos, scale, distanceScaling, false);
    }

    public static boolean to2D(Vector3d pos, double scale, boolean distanceScaling, boolean allowBehind) {
        Zoom zoom = Modules.get().get(Zoom.class);
        NametagUtils.scale = scale * zoom.getScaling();
        if (distanceScaling) {
            NametagUtils.scale *= getScale(pos);
        }

        vec4.set(cameraNegated.x + pos.x, cameraNegated.y + pos.y, cameraNegated.z + pos.z, 1);

        vec4.mul(model, mmMat4);
        mmMat4.mul(projection, pmMat4);

        boolean behind = pmMat4.w <= 0.f;

        if (behind && !allowBehind) return false;

        toScreen(pmMat4);
        double x = pmMat4.x * mc.getWindow().getFramebufferWidth();
        double y = pmMat4.y * mc.getWindow().getFramebufferHeight();

        if (behind) {
            x = mc.getWindow().getFramebufferWidth() - x;
            y = mc.getWindow().getFramebufferHeight() - y;
        }

        if (Double.isInfinite(x) || Double.isInfinite(y)) return false;

        pos.set(x / windowScale, mc.getWindow().getFramebufferHeight() - y / windowScale, allowBehind ? pmMat4.w : pmMat4.z);
        return true;
    }
чет не помогло, утилку с метеора взял, но всё равно чет плывут они, к ентити привязываются только если смотреть на них прямо
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Скрытое содержимое
1748186825117.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
добрый и крутой человек @zero-cocain помог, решено, крч крутой тип спасибо ему
 
Назад
Сверху Снизу