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

Вопрос WorldToScreen

ППХУДЕР
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Фев 2020
Сообщения
428
Реакции
24
Код:
Expand Collapse Copy
public static double[] worldToScreen(double x, double y, double z) {
        if (Minecraft.getInstance().screen != null) {
            return null;
        } else {
            try {
                Vector3d camera_pos = Minecraft.getInstance().getEntityRenderDispatcher().camera.getPosition();
                Quaternion camera_rotation_conj = Minecraft.getInstance().getEntityRenderDispatcher().camera.rotation().copy();
                camera_rotation_conj.conj();
                Vector3f result3f = new Vector3f((float) (camera_pos.x - x), (float) (camera_pos.y - y), (float) (camera_pos.z - z));
                result3f.transform(camera_rotation_conj);
                GameRenderer gameRenderer = Minecraft.getInstance().gameRenderer;
                Method method = null;
                Method[] var11 = gameRenderer.getClass().getDeclaredMethods();
                int var12 = var11.length;

                for (int var13 = 0; var13 < var12; ++var13) {
                    Method m = var11[var13];
                    if (m.getParameterCount() == 3 && m.getParameterTypes()[2] == Boolean.TYPE && m.getParameterTypes()[1] == Float.TYPE && m.getParameterTypes()[0] == ActiveRenderInfo.class && m.getReturnType() == Double.TYPE) {
                        method = m;
                    }
                }

                method.setAccessible(true);

                float fov = ((Double) method.invoke(gameRenderer, Minecraft.getInstance().getEntityRenderDispatcher().camera, 1, true)).floatValue();
                lfov = fov;
                float half_height = (float) Minecraft.getInstance().getWindow().getGuiScaledHeight() / 2.0F;
                float scale_factor = half_height / (result3f.z() * (float) Math.tan(Math.toRadians((double) (fov / 2.0F))));
                if (result3f.z() < 0.0F) {
                    return new double[]{(double) (-result3f.x() * scale_factor + (float) (Minecraft.getInstance().getWindow().getGuiScaledWidth() / 2)), (double) ((float) (Minecraft.getInstance().getWindow().getGuiScaledHeight() / 2) - result3f.y() * scale_factor)};
                }
            } catch (Exception var15) {
                var15.printStackTrace();
            }

            return null;
        }
    }

Адаптировал ворлд ту скрин под можо мапинги 1.16.5, но работает хуево, именно условие if (result3f.z() < 0.0F)

изза него оч часто возвращается нул и большая часть ников не рендерится

result3f.z() должен выдавать отрицательное число когда энтити в зоне видимости(по крайней мере в обычном 1.16.5) и положительное когда не видно

у меня же часто возвращает положительное число но энтити я всеравно могу увидеьть

что делать

мб я неправильно адаптировал?
 
ты че ебанутый зачем тебе вектор3 блять в 2д залупе в2с = 2д
 

Вложения

  • 1700876920023.png
    1700876920023.png
    1.3 KB · Просмотры: 18
ты че ебанутый зачем тебе вектор3 блять в 2д залупе в2с = 2д
позиция камеры в пространстве если ты про camera_pos, код даже блять не мой я просто адаптировал под другие маппинги
 
Назад
Сверху Снизу