Как визуализировать ограничивающий прямоугольник?

Сообщения
19
Лучшие ответы
0
Реакции
0
Версия Minecraft
1.12.2
Я хочу визуализировать ограничивающую рамку. (Ограничительная рамка "сущности", на которую смотрит игрок)
Но есть проблема. Ограничительная рамка отображается игроку, как показано на рисунке ниже.
Как отобразить ограничивающую рамку сущности , на которую смотрит игрок?


2019-02-11_16.30.34.png

Или как вы визуализируете эффект свечения, а не ограничивающий прямоугольник?

Java:
@SubscribeEvent
    public void renderWorldLastEvent(RenderWorldLastEvent event) {
        if (Minecraft.getMinecraft().objectMouseOver.entityHit != null) {
            Entity entity = Minecraft.getMinecraft().objectMouseOver.entityHit;
            renderEntityBox(entity, event.getPartialTicks());
        }
    }

    void renderEntityBox(Entity entity, float partialTicks) {
        AxisAlignedBB boundingBox = entity.getEntityBoundingBox();
        double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double) partialTicks;
        double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double) partialTicks;
        double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double) partialTicks;
        GL11.glPushMatrix(); {
            GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
            GL11.glDepthMask(false);
            GL11.glDisable(GL11.GL_CULL_FACE);
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glDisable(GL11.GL_TEXTURE_2D);

            Tessellator tessellator = Tessellator.getInstance();
            BufferBuilder buffer = tessellator.getBuffer();
            GL11.glColor4f(1.0F,0.0F,0.0F,1.0F);
            GL11.glLineWidth(5.0F);
            buffer.setTranslation(-d0, -d1, -d2);
            RenderGlobal.drawSelectionBoundingBox(boundingBox, 1.0F,0.0F,0.0F, 1.0F);
            buffer.setTranslation(0,0,0);
            GL11.glDepthMask(true);
            GL11.glEnable(GL11.GL_CULL_FACE);
            GL11.glEnable(GL11.GL_LIGHTING);
            GL11.glDisable(GL11.GL_BLEND);
            GL11.glPopAttrib();
        }
        GL11.glPopMatrix();
    }
 

Agravaine

Модератор
Сообщения
4,988
Лучшие ответы
226
Реакции
821
Нужно еще перед рендером сделать glTranslatef(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ), ну а после вернуть на место glTranslatef(RenderManager.renderPosX, RenderManager.renderPosY, RenderManager.renderPosZ). Это из-за того, что у майна центр координат не в 0; 0; 0, а в позиции игрока.
 
Сообщения
19
Лучшие ответы
0
Реакции
0
Нужно еще перед рендером сделать glTranslatef(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ), ну а после вернуть на место glTranslatef(RenderManager.renderPosX, RenderManager.renderPosY, RenderManager.renderPosZ). Это из-за того, что у майна центр координат не в 0; 0; 0, а в позиции игрока.
Похоже, что renderPosX недоступен.
 

Agravaine

Модератор
Сообщения
4,988
Лучшие ответы
226
Реакции
821
Ой, у тебя 1.12.2, не заметил.
Они там приватные, юзай AT или рефлексию.
Объект RenderManager можно получить так: Minecraft.getMinecraft().getRenderManager().
P.S Знатоки в 1.12.2, поправьте меня если можно откуда-то достать эти переменные.
 
Сообщения
19
Лучшие ответы
0
Реакции
0
Нужно еще перед рендером сделать glTranslatef(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ), ну а после вернуть на место glTranslatef(RenderManager.renderPosX, RenderManager.renderPosY, RenderManager.renderPosZ). Это из-за того, что у майна центр координат не в 0; 0; 0, а в позиции игрока.
О, "viewerPosX" был решен с помощью. Спасибо. Можно ли отобразить контур точно такого же размера, как эффект свечения, без использования ограничительной рамки?



2019-02-11_17.40.32.png
 

Agravaine

Модератор
Сообщения
4,988
Лучшие ответы
226
Реакции
821
Поищи в исходниках как рендерится этот контур, я в новых версиях не ориентируюсь...
 
Сверху