[Bug] Обрезка пикселей при рендере.

Версия Minecraft
1.7.10
608
5
15
Подниму старую тему:
 
608
5
15
608
5
15
Такое проявляется, когда рендеришь маленькие вещи. Такое впечатление, что в движке оно как-то по пикселям режет.
 
608
5
15
608
5
15
1,976
68
220
А ты не мою ли либу для таких передвижений юзаешь
Только прочитав это дошло что в этом видео что-то не то - обычно GUI двигать нельзя XD
По идее, можно ведь рендерить картинку слитно с рамкой? Тогда оно будет вроде как скреплено вместе и проблем не должно возникать...
 
2,505
81
397
Решение: перейти на не дробные числа.
Вообще-то наоборот. У майна есть дефолтный скейл гуи )который в настройках указывается), поэтому использовать целочисленные для позиционирования слишком неудобно и могут возника такие вот неточности..
 
608
5
15
Вообще-то наоборот. У майна есть дефолтный скейл гуи )который в настройках указывается), поэтому использовать целочисленные для позиционирования слишком неудобно и могут возника такие вот неточности..
Оно будет двигаться рывками, некрасиво.
Да и пробовал в ивенте рендера хот-бара рендерить - такая-же фигня. Похоже это баг где-то глубоко, буду надеяться на помощь.

А ты не мою ли либу для таких передвижений юзаешь? Я там прост со scissor балуюсь много.
Нет - свою :D
 
1,990
18
105
Тебе @JustAGod всё правильно написал.
Можешь хранить координаты элементов в вещественных числах, но рисовать надо, конвертируя их в целочисленный тип.
Вот тебе код, который убирает майновский гуискейл (х2) и рисует едущую линию. Каждые N пикселей она исчезает, потом снова появляется.
Java:
GL11.glScaled(0.5, 0.5, 1.0);
double x = 111.6 + (player.ticksExisted % 100 * 4) * 0.3;
Tessellator tessellator = Tessellator.instance;
GLState.disableTexture2D();
GLState.setColor4f(1f, 0f, 0f, 1f);
tessellator.startDrawingQuads();
tessellator.addVertex(x, 20.0, 0.0D);
tessellator.addVertex(x, 220.0, 0.0D);
tessellator.addVertex(x + 0.8, 220.0, 0.0D);
tessellator.addVertex(x + 0.8, 20.0, 0.0D);
tessellator.draw();
GLState.enableTexture2D();
GL11.glScaled(2.0, 2.0, 1.0);

Так происходит, из-за того что при отрисовке полигон находится между центрами двух пикселей, и они оба в него не попадают.
Наглядная пикча, где я указал X координату углов нашей линии, синие точки - точки семпла фрагментов:
945365_kiss_2kb.png


P.S. Майновский гуискейл - говнина.
 
476
9
39
У майна уже есть нечто подобное. Глянь как скрол реализован(гуиха всех элементов в креативе). Т.е движение элементов вниз вверх. Думаю это можно приспособить.
 
2,505
81
397
Не совсем. ЕМНИП, майн вместо честного скролла просто кладет в слоты другие предметы.
Еще есть, например, скролл списка модов.

Т.е движение элементов вниз вверх.
Там позиция и размеры целочисленные, скорее всего.
 
608
5
15
Тебе @JustAGod всё правильно написал.
Можешь хранить координаты элементов в вещественных числах, но рисовать надо, конвертируя их в целочисленный тип.
Вот тебе код, который убирает майновский гуискейл (х2) и рисует едущую линию. Каждые N пикселей она исчезает, потом снова появляется.
Java:
GL11.glScaled(0.5, 0.5, 1.0);
double x = 111.6 + (player.ticksExisted % 100 * 4) * 0.3;
Tessellator tessellator = Tessellator.instance;
GLState.disableTexture2D();
GLState.setColor4f(1f, 0f, 0f, 1f);
tessellator.startDrawingQuads();
tessellator.addVertex(x, 20.0, 0.0D);
tessellator.addVertex(x, 220.0, 0.0D);
tessellator.addVertex(x + 0.8, 220.0, 0.0D);
tessellator.addVertex(x + 0.8, 20.0, 0.0D);
tessellator.draw();
GLState.enableTexture2D();
GL11.glScaled(2.0, 2.0, 1.0);

Так происходит, из-за того что при отрисовке полигон находится между центрами двух пикселей, и они оба в него не попадают.
Наглядная пикча, где я указал X координату углов нашей линии, синие точки - точки семпла фрагментов:
945365_kiss_2kb.png


P.S. Майновский гуискейл - говнина.
А как это пофиксить? Не между пикселей экрана же? :D
И причём тут майновский гуи-скейл? Разве он не просто GL11.glScalef?
 
1,990
18
105
Что не понятно с решением?
Можешь хранить координаты элементов в вещественных числах, но рисовать надо, конвертируя их в целочисленный тип.


Не между пикселей экрана же?
:confused:
И причём тут майновский гуи-скейл? Разве он не просто GL11.glScalef?
Для наглядности примера убрал майновский скейл, чтобы координаты в итоге соответствовали тем, что я написал в коде, а не заскейлились в два раза.
 
Последнее редактирование:
Сверху