Jump to content

DiamondMiner88

Members
  • Posts

    186
  • Joined

  • Last visited

Posts posted by DiamondMiner88

  1.   

    11 hours ago, TheGreyGhost said:

    Howdy

    In 1.15.2 you should use RenderBuffers, not direct GL11 calls, and use the MatrixStack.

    Check out this post

    https://gist.github.com/williewillus/30d7e3f775fe93c503bddf054ef3f93e

     

    And also this working example

    https://github.com/Vazkii/Botania/blob/master/src/main/java/vazkii/botania/client/core/handler/BlockHighlightRenderHandler.java

     

    -TGG

    Thank you very much, that got me off the ground really fast!

     

    The last things I would like to ask is,

    I managed to make an outline that shows though blocks, however the highlighted rectangle does not.

    EDIT: If i disable drawing the highlight aka #drawCube then the outline stops being able to be seen though blocks however is still seen if you have a direct path to it. no idea why this is happening

    2020-06-22_13_54_39.png.328677b7f9af62e7f81efdd73e5597ef.png

    And the drawing is locked to a block, it can't be not centered on a block. Is there a way around this?

    Heres an example:

    spacer.pngspacer.png

    Heres the code:

    @SubscribeEvent
    public static void renderWorldLastEvent(RenderWorldLastEvent event) {
        MatrixStack ms = event.getMatrixStack();
        IRenderTypeBuffer.Impl buffers = IRenderTypeBuffer.getImpl(Tessellator.getInstance().getBuffer());
        RenderSystem.disableCull();
        ms.push();
    
        for (Entity e : Minecraft.getInstance().world.getAllEntities()) {
            if (!Minecraft.getInstance().player.equals(e) && !(e instanceof ItemEntity) && !(e instanceof ExperienceOrbEntity)) {
                drawCube(ms, buffers, new AxisAlignedBB(e.getPosition()).expand(0, 1, 0), new Color(0, 255, 0, 127));
                draw3dOutline(ms, buffers, new AxisAlignedBB(e.getPosition()).expand(0, 1, 0), new Color(255, 255, 255, 255));
            }
        }
        draw3dOutline(ms, buffers, new AxisAlignedBB(new BlockPos(0, 10, 0)), new Color(255, 255, 255, 255));
    
        ms.pop();
        buffers.finish();
    }
    
    public static void drawCube(MatrixStack ms, IRenderTypeBuffer buffers, AxisAlignedBB aabb, Color color) {
        draw3dRectangle(ms, buffers, aabb, color, "TOP");
        draw3dRectangle(ms, buffers, aabb, color, "BOTTOM");
        draw3dRectangle(ms, buffers, aabb, color, "NORTH");
        draw3dRectangle(ms, buffers, aabb, color, "EAST");
        draw3dRectangle(ms, buffers, aabb, color, "SOUTH");
        draw3dRectangle(ms, buffers, aabb, color, "WEST");
    }
    
    public static void draw3dRectangle(MatrixStack ms, IRenderTypeBuffer buffers, AxisAlignedBB aabb, Color color, String side) {
        int r = color.getRed();
        int g = color.getGreen();
        int b = color.getBlue();
        int a = color.getAlpha();
        double renderPosX = Minecraft.getInstance().getRenderManager().info.getProjectedView().getX();
        double renderPosY = Minecraft.getInstance().getRenderManager().info.getProjectedView().getY();
        double renderPosZ = Minecraft.getInstance().getRenderManager().info.getProjectedView().getZ();
    
        ms.push();
        ms.translate(aabb.minX - renderPosX, aabb.minY - renderPosY, aabb.minZ - renderPosZ);
    
        IVertexBuilder buffer = buffers.getBuffer(RenderType.makeType(HypixelClient.MODID + ":rectangle_highlight", DefaultVertexFormats.POSITION_COLOR, GL11.GL_QUADS, 256, false, true, RenderType.State.getBuilder().transparency(ObfuscationReflectionHelper.getPrivateValue(RenderState.class, null, "field_228515_g_")).cull(new RenderState.CullState(false)).build(false)));
        Matrix4f mat = ms.getLast().getMatrix();
    
        float x = (float) (aabb.maxX - aabb.minX);
        float y = (float) (aabb.maxY - aabb.minY);
        float z = (float) (aabb.maxZ - aabb.minZ);
    
        switch (side) {
            case "TOP":
                buffer.pos(mat, x, y, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, y, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, y, z).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, y, z).color(r, g, b, a).endVertex();
                break;
            case "BOTTOM":
                buffer.pos(mat, x, 0, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, 0, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, 0, z).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, 0, z).color(r, g, b, a).endVertex();
                break;
            case "NORTH":
                buffer.pos(mat, 0, y, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, 0, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, 0, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, y, 0).color(r, g, b, a).endVertex();
                break;
            case "EAST":
                buffer.pos(mat, x, y, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, 0, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, 0, z).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, y, z).color(r, g, b, a).endVertex();
                break;
            case "SOUTH":
                buffer.pos(mat, 0, y, z).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, 0, z).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, 0, z).color(r, g, b, a).endVertex();
                buffer.pos(mat, x, y, z).color(r, g, b, a).endVertex();
                break;
            case "WEST":
                buffer.pos(mat, 0, y, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, 0, 0).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, 0, z).color(r, g, b, a).endVertex();
                buffer.pos(mat, 0, y, z).color(r, g, b, a).endVertex();
                break;
        }
        ms.pop();
    }
    
    public static void draw3dOutline(MatrixStack ms, IRenderTypeBuffer buffers, AxisAlignedBB aabb, Color color) {
        int r = color.getRed();
        int g = color.getGreen();
        int b = color.getBlue();
        int a = color.getAlpha();
        double renderPosX = Minecraft.getInstance().getRenderManager().info.getProjectedView().getX();
        double renderPosY = Minecraft.getInstance().getRenderManager().info.getProjectedView().getY();
        double renderPosZ = Minecraft.getInstance().getRenderManager().info.getProjectedView().getZ();
    
        ms.push();
        ms.translate(aabb.minX - renderPosX, aabb.minY - renderPosY, aabb.minZ - renderPosZ);
    
        RenderType.State glState = RenderType.State.getBuilder().line(new RenderState.LineState(OptionalDouble.of(1))).layer(ObfuscationReflectionHelper.getPrivateValue(RenderState.class, null, "field_228500_J_")).transparency(ObfuscationReflectionHelper.getPrivateValue(RenderState.class, null, "field_228515_g_")).writeMask(new RenderState.WriteMaskState(true, false)).depthTest(new RenderState.DepthTestState(GL11.GL_ALWAYS)).build(false);
        IVertexBuilder buffer = buffers.getBuffer(RenderType.makeType(HypixelClient.MODID + ":line_1_no_depth", DefaultVertexFormats.POSITION_COLOR, GL11.GL_LINES, 128, glState));
        Matrix4f mat = ms.getLast().getMatrix();
    
        float x = (float) (aabb.maxX - aabb.minX);
        float y = (float) (aabb.maxY - aabb.minY);
        float z = (float) (aabb.maxZ - aabb.minZ);
    
        // Top edges
        buffer.pos(mat, x, y, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, y, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, y, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, y, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, y, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, y, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, y, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, y, 0).color(r, g, b, a).endVertex();
    
        // Bottom edges
        buffer.pos(mat, x, 0, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, 0, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, 0, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, 0, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, 0, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, 0, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, 0, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, 0, 0).color(r, g, b, a).endVertex();
    
        // Side edges
        buffer.pos(mat, x, 0, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, y, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, y, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, 0, 0).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, y, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, 0, 0, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, 0, z).color(r, g, b, a).endVertex();
        buffer.pos(mat, x, y, z).color(r, g, b, a).endVertex();
    
        ms.pop();
    }
    
  2. 1 hour ago, Draco18s said:

    player.getPosition(event.partialTicks);

    I already tested nearly all of them that returned a Vec3d, and got the same exact results as in the screenshot; just a line that won't stay in one position

    Even with the current calculation i get the exact same thing

    With some of the methods in the screenshot below the hand appears detached

    image.png.c26445abd39ddbdfe968854b1e72fc95.png

  3. I don't know why this doesn't work, it looks like the line is relative to the camera position, but it only shows if you're near 0,0,0 in the world

    @SubscribeEvent
    public static void renderWorldLastEvent(RenderWorldLastEvent event) {
        ClientPlayerEntity player = Minecraft.getInstance().player;
    
        GL11.glPushMatrix();
        GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
    
        double d0 = player.prevPosX + (player.getPosX() - player.prevPosX) * (double)event.getPartialTicks();
        double d1 = player.prevPosY + (player.getPosY() - player.prevPosY) * (double)event.getPartialTicks();
        double d2 = player.prevPosZ + (player.getPosZ() - player.prevPosZ) * (double)event.getPartialTicks();
        Vec3d player_pos = new Vec3d(d0, d1, d2);
    
        GL11.glTranslated(-player_pos.x, -player_pos.y, -player_pos.z);
        GL11.glDisable(GL11.GL_LIGHTING);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_DEPTH_TEST);
    
        Vec3d blockA = new Vec3d (0,0,0);
        Vec3d blockB = new Vec3d (0,10,0);
    
        GL11.glColor4f(1,1,1,1);
        GL11.glBegin(GL11.GL_LINE_STRIP);
        GL11.glVertex3d(blockA.x, blockA.y, blockA.z);
        GL11.glVertex3d(blockB.x, blockB.y, blockB.z);
        GL11.glEnd();
    
        GL11.glPopAttrib();
        GL11.glPopMatrix();
    }

    2020-06-21_07_11_34.png.a9cd83811987175295b71211a9073f11.png

    Its supposed to draw a line from 0,0,0 (that bedrock) to 0,10,0 but i get something like this with the line moving randomly as i move around

  4. I would like to make an block outline that's visible though other blocks, however i could not find a way to do it after searching for over 2 hours

    The closest I've gotten is this thread however that's for 1.11.2 and the renderBox method won't work in 1.15.2

    I'm new to rendering stuff so i have no idea how it works either.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.