Рисование

271
2
0
Можете подсказать как рисовать линии в мире как F3 + B
 
1,087
2
Рэндер + определение boundingbox'а у моба + рисование линий от min* до max*. Ты хотел подсказку - вот тебе подсказка.
 
271
2
0
271
2
0
Можете привести пример рисования простого кубика?
 
271
2
0
UP
 
271
2
0
Кто может помочь?
 

timaxa007

Модератор
5,831
409
672
Я могу помочь, но не сейчас. Так как пример кода нужно сделать, где-то к 20:00 по Московскому времени.
 
271
2
0
ОК:lol:
 
271
2
0
А можете сейчас? :angel:
 

timaxa007

Модератор
5,831
409
672
volt, если вопрос относился ко мне, то я отвечал, что нужно сделать пример и я сообщил о примерном времени примерного кода. Пока-что сделал только что-то вроде бокса (хотел сделать линии и бокс).
Код:
public class EventForgeClient {

    Minecraft mc = Minecraft.getMinecraft();

    @SubscribeEvent
    public void renderBoxEntity(RenderWorldLastEvent event) {

        double x_fix = -(mc.thePlayer.lastTickPosX + (mc.thePlayer.posX - mc.thePlayer.lastTickPosX) * event.partialTicks);
        double y_fix = -(mc.thePlayer.lastTickPosY + (mc.thePlayer.posY - mc.thePlayer.lastTickPosY) * event.partialTicks);
        double z_fix = -(mc.thePlayer.lastTickPosZ + (mc.thePlayer.posZ - mc.thePlayer.lastTickPosZ) * event.partialTicks);

        GL11.glPushMatrix();
        GL11.glTranslated(x_fix, y_fix, z_fix);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        
        for (int i = 0; i < mc.theWorld.loadedEntityList.size(); ++i) {
            if (mc.theWorld.loadedEntityList.get(i) instanceof EntityLivingBase) {
                EntityLivingBase entity = (EntityLivingBase)mc.theWorld.loadedEntityList.get(i);
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.25F);
                box(entity.boundingBox);
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F);
                lines(entity.boundingBox);
                GL11.glColor4f(1F, 1F, 1F, 1F);

            }
        }

        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glPopMatrix();
    }

    public static void box(AxisAlignedBB aabb) {
        Tessellator tessellator = Tessellator.instance;

        tessellator.startDrawingQuads();

        //top
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.maxZ);

        //bottom
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.minZ);

        //north
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.minZ);

        //south
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.maxZ);

        //west
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.maxZ);

        //east
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.maxZ);

        tessellator.draw();
    }

    public static void lines(AxisAlignedBB aabb) {
        GL11.glBegin(GL11.GL_LINES);

        /*-top-*/
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.minZ);//a - 1
        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.minZ);//b - 2

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.minZ);//a - 2
        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.maxZ);//b - 3

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.maxZ);//a - 3
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.maxZ);//b - 4

        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.maxZ);//a - 4
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.minZ);//b - 1

        /*-bottom-*/
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.minZ);//a - 1
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.minZ);//b - 2

        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.minZ);//a - 2
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.maxZ);//b - 3

        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.maxZ);//a - 3
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.maxZ);//b - 4

        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.maxZ);//a - 4
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.minZ);//b - 1

        /*-side-/-edge-*/
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.minZ);//a
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.minZ);//b

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.maxZ);//a
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.maxZ);//b

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.minZ);//a
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.minZ);//b

        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.maxZ);//a
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.maxZ);//b

        GL11.glEnd();
    }

}
Пока-что линия куда смотрит моб, пока-что не сделал.
[merge_posts_bbcode]Добавлено: 04.01.2016 20:03:01[/merge_posts_bbcode]

 
271
2
0
[font=Verdana, Helvetica, Arial, sans-serif]Пока-что линия куда смотрит моб, пока-что не сделал.[/font]
Нет, это я сказал для примера. Ведь в майнкрафте это уже есть F3 + B.
[merge_posts_bbcode]Добавлено: 04.01.2016 21:06:42[/merge_posts_bbcode]

Спасибо.

[merge_posts_bbcode]Добавлено: 04.01.2016 21:09:22[/merge_posts_bbcode]

Мне просто показать выделенную область, как в WorldEdit CUI.
 

timaxa007

Модератор
5,831
409
672
Примерно так:
Код:
    @SubscribeEvent
    public void renderBox(RenderWorldLastEvent event) {

        //dot start
        double ax = -1.0D;
        double ay = 63.0D;
        double az = -1.0D;

        //dot end
        double bx = 1.0D;
        double by = 65.0D;
        double bz = 1.0D;

        AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(ax, ay, az, bx, by, bz).expand(0.01D, 0.01D, 0.01D);

        double x_fix = -(mc.thePlayer.lastTickPosX + (mc.thePlayer.posX - mc.thePlayer.lastTickPosX) * event.partialTicks);
        double y_fix = -(mc.thePlayer.lastTickPosY + (mc.thePlayer.posY - mc.thePlayer.lastTickPosY) * event.partialTicks);
        double z_fix = -(mc.thePlayer.lastTickPosZ + (mc.thePlayer.posZ - mc.thePlayer.lastTickPosZ) * event.partialTicks);

        GL11.glPushMatrix();
        GL11.glTranslated(x_fix, y_fix, z_fix);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
//
        GL11.glColor4f(0.75F, 0.25F, 0.25F, 0.25F);
        box(aabb);
        GL11.glColor4f(0.75F, 0.25F, 0.25F, 0.75F);
        lines(aabb);
        GL11.glColor4f(1F, 1F, 1F, 0F);
//
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glPopMatrix();
    }
 
271
2
0
А как выделить?
[merge_posts_bbcode]Добавлено: 04.01.2016 21:29:15[/merge_posts_bbcode]

Код:
 //dot start
        double ax = -1.0D;
        double ay = 63.0D;
        double az = -1.0D;

        //dot end
        double bx = 1.0D;
        double by = 65.0D;
        double bz = 1.0D;
Это координаты?
 

timaxa007

Модератор
5,831
409
672
Да, это координаты.
---
ax = начальная точка по оси X выделения, координату блока привести к double значению.
ay = начальная точка по оси Y выделения, координату блока привести к double значению.
az = начальная точка по оси Z выделения, координату блока привести к double значению.
---
bx = конечная точка по оси X выделения, координату блока привести к double значению и прибавить + 1.0D, так как выделиться не весь блок.
by = конечная точка по оси Y выделения, координату блока привести к double значению и прибавить + 1.0D, так как выделиться не весь блок.
bz = конечная точка по оси Z выделения, координату блока привести к double значению и прибавить + 1.0D, так как выделиться не весь блок.
 
271
2
0
Спасибо!:) У меня появилась идейка для мода.:D
 

timaxa007

Модератор
5,831
409
672
Пожалуйста. У меня тоже есть планы на этот код.
 
271
2
0
timaxa007 в где вы этому научились. Есть ли туториалы на эту тему?
 
Сверху