Обводка блока

jopi

Каменная лига
Сообщения
505
Лучшие ответы
7
Симпатии
24
#1
Версия Minecraft
1.7.10
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Нужна помощь, как обводить блок как-то так?
(нужно для проверки)
 

Вложения

jopi

Каменная лига
Сообщения
505
Лучшие ответы
7
Симпатии
24
#3
@timaxa007 Вопрос x2 :DDD
Как выделять автоматом блок с определенным ID в поле видимости допустим 10 блоков
 

timaxa007

Команда форума
Сообщения
5,154
Лучшие ответы
307
Симпатии
409
#4
Типа циклами, типа каждый тик игрока проверять область радиус 10 блоков. Искать нужный блок и запичывать в лист этот блок с его координатам. А в рендере рендерить этот блок из листа.
 

jopi

Каменная лига
Сообщения
505
Лучшие ответы
7
Симпатии
24
#5
@timaxa007 есть какие-нибудь примеры? пожалуйста >:^)
 

Merisen

Каменная лига
Сообщения
96
Лучшие ответы
3
Симпатии
16
#7
Я такое сделал в свое время когда нужен была обводка блоков в креате:
Java:
private void drawOres(float px, float py, float pz) {
        int bx, by, bz;

        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDisable(GL11.GL_CULL_FACE);
        GL11.glDepthMask(false);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GL11.glLineWidth(1f);
        Tessellator tes = Tessellator.instance;

        List<BlockInfo> temp = new ArrayList();
        temp.addAll(this.ores);

        for (BlockInfo b : temp) {
            bx = b.x;
            by = b.y;
            bz = b.z;
            float f = 0.0f;
            float f1 = 1.0f;

            tes.startDrawing(GL11.GL_LINES);
            tes.setColorRGBA_I(b.color, 255);
            tes.setBrightness(200);

            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f);

            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f);

            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f);
            tes.draw();
        }

        GL11.glDepthMask(true);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glEnable(GL11.GL_CULL_FACE);
    }
Это все в регистре эвентов, потом просто вызывал отрисовку на определенный блок.
 

fane4qa

Каменная лига
Сообщения
510
Лучшие ответы
5
Симпатии
19
#8
Пиксель, какой такой регистр эвентов?

Java:
 bx = b.x;
 by = b.y;
 bz = b.z;
це шо?
BlockInfo я как понял это блок?
 

Merisen

Каменная лига
Сообщения
96
Лучшие ответы
3
Симпатии
16
#9
Пиксель?
Сделал класс в котором регаю все ивенты и потом их по очереди загружаю. А блок инфо – просто информация о блоке:
Java:
public class BlockInfo {
    public int x, y, z;
    public int color;

    public BlockInfo(int bx, int by, int bz, int c) {
        this.x = bx;
        this.y = by;
        this.z = bz;
        this.color = c;
    }
}
 

MJaroslav

Каменная лига
Сообщения
657
Лучшие ответы
16
Симпатии
79
#10
А можно обойтись без них? Я бы даже перелопатил blockrender только ради того, чтобы не использовать три цикла.

Кстати о нем, если же блок собственный, то ему в render можно поставить обводку без теста глубины, правда, тогда будут подсвечиваться все блоки. Хм.. еще не знаю, обрезается ли отрисовка полностью скрытых другими блоков.
 

timaxa007

Команда форума
Сообщения
5,154
Лучшие ответы
307
Симпатии
409
#11
А можно обойтись без них?
Не думаю. В любом случаи придётся использовать циклы. Но какие будут циклы зависят от реализации. Можно просто при загрузке чанка проверять весь чанк, если будут нужные блоки то добавлять в лист и в рендере проверишь расстояние от блока до игрока, если нужное расстояние, то рендерить. Но всё зависит от реализации.
 
Сверху