Съезд текста из-за scaled

Версия Minecraft
1.6.4
77
2
2
Здравствуйте, столкнулся с проблемой, при который текст который я пытаюсь увеличить съезжает при разных настройках "Gui scale" в майнкрафте.

Скриншоты:
1615149125326.png1615149108629.png

Метод: "drawScreen"
Java:
double scale = 1.25D;
GL11.glPushMatrix();
GL11.glTranslated(1 / scale, 1 / scale, 1 / scale);
GL11.glScaled(scale, scale, scale);
fontRenderer.drawString(clientQuest.getName(), x - 45, y - 15, Utils.getColorInt(Color.WHITE));
GL11.glPopMatrix();
 
Решение
Шо вы мутите?
Делаем скейл, а в drawString передаём координаты разделенные на скейл, то есть вместо x передаём x / scale. Тоже самое для y.
Так как drawString хавает инт и чтобы не нужно было округлять, можно туда передать нули, а перед этим просто сделать транслейт.
341
14
113
На ум приходит только калибровать положение элементов в зависимости от текущей настройки, если так важно сохранить совместимость со настройками размера GUI(и формата экрана).
 
77
2
2
На ум приходит только калибровать положение элементов в зависимости от текущей настройки, если так важно сохранить совместимость со настройками размера GUI(и формата экрана).

Звучит хайпово, но костылить не хочеца
 
7,099
324
1,510
Предположим, что у нас имеется точка не в начале координат. Что с ней станет, если применить скейл? Она сдвинется от центра в зависимости от значений скейла.
Предположим, что у нас имеется точка в начале координат. Что с ней станет, если применить скейл? Независимо от значений скейла точка останется на месте.
Таким образом, если мы хотим увеличить размер объекта, растянув его вправо и вниз, нужно
  1. сдвинуть этот объект так, чтобы верхняя левую точка оказалась в начало координат(т.е. на вектор, обратной текущим коориданатам этой точки)
  2. примерить скейл(который не повлияет на позицию верхней левой точки)
  3. сдвинуть объект назад
 
77
2
2
Предположим, что у нас имеется точка не в начале координат. Что с ней станет, если применить скейл? Она сдвинется от центра в зависимости от значений скейла.
Предположим, что у нас имеется точка в начале координат. Что с ней станет, если применить скейл? Независимо от значений скейла точка останется на месте.
Таким образом, если мы хотим увеличить размер объекта, растянув его вправо и вниз, нужно
  1. сдвинуть этот объект так, чтобы верхняя левую точка оказалась в начало координат(т.е. на вектор, обратной текущим коориданатам этой точки)
  2. примерить скейл(который не повлияет на позицию верхней левой точки)
  3. сдвинуть объект назад
Сложно бро :(
 
7,099
324
1,510
Крч. Применительно к твоей задаче: тебе нужно сначала скалировать, а потом сдвигать, а не наоборот
~~~
Гуманитариями в моддинге не место?(
Коли графикой занялся - стоит стать более фамильярным с геометрией
 
77
2
2
Крч. Применительно к твоей задаче: тебе нужно сначала скалировать, а потом сдвигать, а не наоборот
Java:
GL11.glPushMatrix();
GL11.glScalef(scale, scale, scale);
GL11.glTranslatef(1 / scale,1 / scale, 1 / scale);
fontRenderer.drawString(clientQuest.getName(), x - 45, y - 19, Utils.getColorInt(Color.WHITE));
GL11.glPopMatrix();

Увы, но не очень :(

1615151927383.png
 
7,099
324
1,510
Ок, убери вообще скейл и транслейт. Покажи скрин, как получится
 
7,099
324
1,510
Сдвинь в начало координат(например, при помощи сброса матрицы в идентичную, loadIdentity) - красная стрелка
Скалируй
Сдвинуть куда надо - зеленая стрелка
1615152211994.png
 
77
2
2
Сдвинь в начало координат(например, при помощи сброса матрицы в идентичную, loadIdentity) - красная стрелка
Скалируй
Сдвинуть куда надо - зеленая стрелка
Ты выбрал текст, но я на примере названия задания сделал.
Java:
GL11.glPushMatrix();
GL11.glLoadIdentity();
GL11.glScalef(scale, scale, scale);
GL11.glTranslatef(1 / scale,1 / scale, 1 / scale);
fontRenderer.drawString(clientQuest.getName(), x - 45, y - 19, Utils.getColorInt(Color.WHITE));
GL11.glPopMatrix();

Прикол в том, что после использования предложенного метода glLoadIdentity(); вообще ничего не рисуется)
 
7,099
324
1,510
Java:
GL11.glPushMatrix();
GL11.glLoadIdentity();
fontRenderer.drawString(clientQuest.getName(), 0,0 , Utils.getColorInt(Color.WHITE));
GL11.glPopMatrix();
Такой код не нарисует текст в верхнем левом углу?
~~~
Обновил код
 
7,099
324
1,510
Ок, а вот так?
Java:
GL11.glPushMatrix();
GL11.glLoadIdentity();
Minecraft.getMinecraft().entityRenderer.setupOverlayRendering()
fontRenderer.drawString(clientQuest.getName(), 0,0 , Utils.getColorInt(Color.WHITE));
GL11.glPopMatrix();
setupOverlayRendering
 
Сверху