Проблема с конвертацией 3д координат в 2д

Версия Minecraft
1.19.2
API
Vanilla (без API)
Видео с моей проблемой -

Почему-то когда координата на рядом с краем экрана, что-то происходит, не знаю что. Уже неделю не могу понять в чём проблема. Ниже блоки кода, которые используются для конвертации.

Матрицы:
    private Matrix4f modelViewMatrix = new Matrix4f(new float[]{
            1, 0, 0, 0,
            0, 1, 0, 0,
            0, 0, 1, 1,
            0, 0, 0, 1});

    @Setter
    private Matrix4f projectionMatrix = new Matrix4f(new float[]{
            1, 0, 0, 0,
            0, 1, 0, 0,
            0, 0, 1, 0,
            0, 0, 0, 1});

Методы для конвертации 3д в 2д:
 public Vector3f worldToScreen(Vector3f position, Matrix4f matrix) {
        getRenderPosition(position, matrix);
        worldToScreen(position);
        return position;
    }

    private Vector3f getRenderPosition(Vector3f position, Matrix4f matrix) {
        double x = position.x() - mc.getEntityRenderDispatcher().camera.getPosition().x;
        double y = position.y() - mc.getEntityRenderDispatcher().camera.getPosition().y;
        double z = position.z() - mc.getEntityRenderDispatcher().camera.getPosition().z;
        position.set((float) x, (float) y, (float) z);
        position.transform(matrix);
        return position;
    }

    private void worldToScreen(Vector3f position) {
        int displayHeight = mc.getWindow().getHeight();

        Matrix4f projection = projectionMatrix.copy();
        projection.multiply(modelViewMatrix);
        projection.project(position.x(), position.y(), position.z(),
                GlStateManager.Viewport.x(), GlStateManager.Viewport.y(), GlStateManager.Viewport.width(), GlStateManager.Viewport.height(), position);
        position.set((float) (position.x() / mc.getWindow().getGuiScale()),
                (float) ((displayHeight - position.y()) / mc.getWindow().getGuiScale()), position.z());
    }

место где я сетаю Projection матрицу в методе renderLevel из GameRenderer:
        this.minecraft.getProfiler().popPush("camera");
        Camera camera = this.mainCamera;
        this.renderDistance = (float) (this.minecraft.options.getEffectiveRenderDistance() * 16);
        PoseStack posestack = new PoseStack();
        double d0 = this.getFov(camera, pPartialTicks, true);

        posestack.last().pose().multiply(this.getProjectionMatrix(d0));
        PoseStack posestack1 = posestack;

        DimensionConverter.setProjectionMatrix( posestack.last().pose().copy());

        if (Shaders.isEffectsModelView()) {
            posestack = p_109092_;
        }
 
Последнее редактирование:
Сверху