Текстурка на экране съезжает в зависимости от размера интерфейса

Версия Minecraft
1.12.2
API
Forge
48
1
4
Вопрос есть на форме уже, задан ни один миллион раз, также ни один миллион раз на него ответил tox1cozZ в формате:
координаты нужно просто делить на скейл
Ну раз просто делить на скейл, вроде ничего сложного, поехали, - подумал я и пошёл в код.
И пока я шёл в код, сразу мысли крысиные такие полезли "А чо за вообще скейл? Откуда его брать? Не могу же я статическое значение использовать, которое сам бахну из головы, этот скейл явно где-то валяется в зависимости от размеров интерфейса он, наверно, меняется в этом где-то".
Но эти мысли я отложил на потом и начал переделывать свой код по примерам, в которых всё решено и картинка перестала летать по монитору. Были перепробованы все танцы с бубнами, все возможные джл11, пуши, поп матриксы, скейлы, транслейты, логирование значений в консоль для понимания как меняется длина и ширина в зависимости разрешения, и банальное деление на скейл.
Но ничего не меняет ситуацию... Где-то один разок у меня получилось, текстура не летала по экрану при изменении интерфейса, но когда я заходил в настройки вся панель у меня висела вверх ногами, как и инвентарь и всё это было уменьшено раза в 4.
Некоторые предлагают вообще занимательные решения, по типу width + x * scale / scale - и о, господи, они сообщают что всё равно всё работает)
Я остановился на вот таком коде, это самый простой что я использовал, взял его из темы, где у паренька всё работает, но у меня нихрена)

Вопрос, как чинить?
И что за скейл то всё-таки брать?)

Scale:
    float scale = 0.7f;
        GL11.glPushMatrix();
        minecraft.getTextureManager().bindTexture(hudBar);
        GL11.glScalef(scale, scale, 1F);
        minecraft.ingameGUI.drawTexturedModalRect((int)((width / scale) - x), (int)((height / scale) - y), uPos, vPos, sizeWidth, sizeHeight);
        GL11.glPopMatrix();


Event:
   @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public static void eventRenderOverlay(RenderGameOverlayEvent.Post event) {
        int width = event.getResolution().getScaledWidth();
        int height = event.getResolution().getScaledHeight();
        if (event.getType() == RenderGameOverlayEvent.ElementType.ALL) {
            OverlayHudBarRender.renderHealthBar(width, height);
        }
    }
 
Последнее редактирование:
Решение
Java:
// Координаты
int x = 40;
int y = height - 25;

float scale = 0.75F;

glPushMatrix();
mc.getTextureManager().bindTexture(hud);
glScalef(scale, scale, 1F);
glTranslatef(x / scale, y / scale, 0.0F);
mc.ingameGUI.drawTexturedModalRect(0, 0, uPos, vPos, sizeWidth, sizeHeight);
glPopMatrix();
202
14
36
width - ширина экрана
height - высота экрана

x - координата по горизонтали
y - координата по вертикали

Чтобы не уезжало нужно координаты делить на скейл (как писал tox1cozZ): x / scale и y / scale

Java:
minecraft.ingameGUI.drawTexturedModalRect((int)(x / scale), (int)(y / scale), uPos, vPos, sizeWidth, sizeHeight);

Кидали же ссылку (там всё расписано) https://forum.mcmodding.ru/threads/tutorial-geometrija-v-nalozhenijax-overlays.7509/
 
Последнее редактирование:
202
14
36
@Zloy_GreGan, я так и делаю, я же скинул код, я и говорю, что не работает)
В таком случае нужно обратиться в Mojang (они то уж точно помогут)

В коде который ты кидал ты делишь разрешение экрана на скейл и отнимаешь координату.
Нужно координату делить на скейл, а в самой координате уже указывать положение на экране
 
48
1
4
width - ширина экрана
height - высота экрана

x - координата по горизонтали
y - координата по вертикали

Чтобы не уезжало нужно координаты делить на скейл (как писал tox1cozZ): x / scale и y / scale

Java:
minecraft.ingameGUI.drawTexturedModalRect((int)(x / scale), (int)(y / scale), uPos, vPos, sizeWidth, sizeHeight);

Кидали же ссылку (там всё расписано) https://forum.mcmodding.ru/threads/tutorial-geometrija-v-nalozhenijax-overlays.7509/
Сделал, как ты сказал
minecraft.ingameGUI.drawTexturedModalRect(x / scale, y / scale, uPos, vPos, sizeWidth, sizeHeight);
Ничего не поменялось, к сожалению

На крупном интерфейсе иконка справа в углу, на обычном слева от прицела, почти в середине

Всё также не понимаю, какой нужно брать scale, почему кто-то берёт его 0.1, кто-то 0.7
 

tox1cozZ

aka Agravaine
8,456
598
2,892
Java:
// Координаты
int x = 40;
int y = height - 25;

float scale = 0.75F;

glPushMatrix();
mc.getTextureManager().bindTexture(hud);
glScalef(scale, scale, 1F);
glTranslatef(x / scale, y / scale, 0.0F);
mc.ingameGUI.drawTexturedModalRect(0, 0, uPos, vPos, sizeWidth, sizeHeight);
glPopMatrix();
 
Сверху