Гайд Клиент с нуля | GlowESP aka OpenGL Framebuffer

PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
331
Реакции[?]
47
Поинты[?]
37K

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Список:
1. Создаём главный класс + снимаем ограничения - https://yougame.biz/threads/325113
2. Автобус евентов - https://yougame.biz/threads/325114
3. OpenGL + Шейдеры + Рендер - https://yougame.biz/threads/325115
4. Аим - https://yougame.biz/threads/325188
5. GlowESP aka OpenGL Framebuffer - https://yougame.biz/threads/325211/
6. Текст, шрифты, атлас - https://yougame.biz/threads/325292

Framebuffer (RenderTarget в DirectX) - это технология отрисовки объектов в текстуру. То есть если раньше мы рисовали сразу на экран, то теперь мы рисуем в отдельную текстуру.

Я предлагаю реализовать сразу что-нибудь сложное, например GlowESP. Принцип работы у него такой:
1. Создать фреймбуффер сущностей
1. Перед отрисовкой забиндить наш фреймбуффер, чтобы отрисовка шла в него
2. В renderIngameGui отобразить текстуру два раза: первый раз применив шейдер блюра, второй раз без изменений

Чтобы было нагляднее, каждое своё действие я буду показывать в скринами из фотошопа. Поехали

Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
Pasted image 20240712023527.png
А нам нужен новый. Как это делают многие - предлагаю создать метод createFramebuffer потому, что у него фиксированный размер, а значит его придётся при каждом изменении размера окна пересоздавать:
Java:
private Framebuffer createFramebuffer(Framebuffer framebuffer) {
    MainWindow mainWindow = mc.getMainWindow(); // Получаем окно
    int width = mainWindow.getFramebufferWidth();
    int height = mainWindow.getFramebufferHeight();
    if (framebuffer == null || framebuffer.framebufferWidth != width || framebuffer.framebufferHeight != height) { // Если framebuffer ещё не создан или размер не совпадает
        if (framebuffer != null) // Если framebuffer уже был создан
            framebuffer.deleteFramebuffer(); // Удаляем (ведь потеря ресурсов это плохо)
        
        framebuffer = new Framebuffer(width, height, true, Minecraft.IS_RUNNING_ON_MAC); // Создаём новый framebuffer
    }
    
    return framebuffer;
}
P.S. На новых версиях есть resize, можно использовать его

private Framebuffer entitiesFramebuffer;
Считайте теперь у нас есть новый пустой слой:
Pasted image 20240712023911.png

Отрисовка игроков
Чтобы наш фреймбуффер заполнить нужно сделать bind, затем отрисовать и сделать unbind. Прям как с шейдером.
Находим отрисовку сущностей:
Pasted image 20240712024048.png
Перед перечислением добавляем:

После перечисления:

Теперь мы перенесли игроков на новый слой:

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
mc.getFramebuffer().bindFramebuffer(true);
Отображаем фреймбуффер на экран
Чтобы не терять времени и не рисовать текстуру фреймбуффера самому мы воспользуемся методом framebufferRenderExtRaw. При отрисовке оверлея (renderIngameGui) рисуем наш фреймбуффер:
Java:
Framebuffer entitiesFramebuffer = mc.worldRenderer.getEntitiesFramebuffer();
entitiesFramebuffer.framebufferRenderExtRaw(mc.getMainWindow().getWidth(), mc.getMainWindow().getHeight(), true);

Только теперь есть проблема - белого фона по факту быть не должно. Это из-за того, что framebufferRenderExtRaw отключает blend. Врубаем его обратно и получаем:

Вот теперь уже лучше. С ходу мы уже получили эффект просвета, как видите спрут отображается поверх всего


Glow или же Blur эффект
Снова заходим в фотошоп и накидываем на наш слой с сущностями блюр:

Т.к. блюр расширяет границы, то при повторной отрисовке он оставит за собой следы расширения исходя из радиуса:


Тогда перед отрисовкой мы применяем шейдер блюра и получаем такую картину:

Затем рисуем второй раз, но уже без шейдера:
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2024
Сообщения
852
Реакции[?]
7
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Список:
1. Создаём главный класс + снимаем ограничения - https://yougame.biz/threads/325113
2. Автобус евентов - https://yougame.biz/threads/325114
3. OpenGL + Шейдеры + Рендер - https://yougame.biz/threads/325115
4. Аим - https://yougame.biz/threads/325188
5. GlowESP aka OpenGL Framebuffer - https://yougame.biz/threads/325211/

Framebuffer (RenderTarget в DirectX) - это технология отрисовки объектов в текстуру. То есть если раньше мы рисовали сразу на экран, то теперь мы рисуем в отдельную текстуру.

Я предлагаю реализовать сразу что-нибудь сложное, например GlowESP. Принцип работы у него такой:
1. Создать фреймбуффер сущностей
1. Перед отрисовкой забиндить наш фреймбуффер, чтобы отрисовка шла в него
2. В renderIngameGui отобразить текстуру два раза: первый раз применив шейдер блюра, второй раз без изменений

Чтобы было нагляднее, каждое своё действие я буду показывать в скринами из фотошопа. Поехали

Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
Посмотреть вложение 281740
А нам нужен новый. Как это делают многие - предлагаю создать метод createFramebuffer потому, что у него фиксированный размер, а значит его придётся при каждом изменении размера окна пересоздавать:
Java:
private Framebuffer createFramebuffer(Framebuffer framebuffer) {
    MainWindow mainWindow = mc.getMainWindow(); // Получаем окно
    int width = mainWindow.getFramebufferWidth();
    int height = mainWindow.getFramebufferHeight();
    if (framebuffer == null || framebuffer.framebufferWidth != width || framebuffer.framebufferHeight != height) { // Если framebuffer ещё не создан или размер не совпадает
        if (framebuffer != null) // Если framebuffer уже был создан
            framebuffer.deleteFramebuffer(); // Удаляем (ведь потеря ресурсов это плохо)
        
        framebuffer = new Framebuffer(width, height, true, Minecraft.IS_RUNNING_ON_MAC); // Создаём новый framebuffer
    }
    
    return framebuffer;
}
P.S. На новых версиях есть resize, можно использовать его

private Framebuffer entitiesFramebuffer;
Считайте теперь у нас есть новый пустой слой:
Посмотреть вложение 281741

Отрисовка игроков
Чтобы наш фреймбуффер заполнить нужно сделать bind, затем отрисовать и сделать unbind. Прям как с шейдером.
Находим отрисовку сущностей:
Посмотреть вложение 281742
Перед перечислением добавляем:

После перечисления:

Теперь мы перенесли игроков на новый слой:

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
mc.getFramebuffer().bindFramebuffer(true);
Отображаем фреймбуффер на экран
Чтобы не терять времени и не рисовать текстуру фреймбуффера самому мы воспользуемся методом framebufferRenderExtRaw. При отрисовке оверлея (renderIngameGui) рисуем наш фреймбуффер:
Java:
Framebuffer entitiesFramebuffer = mc.worldRenderer.getEntitiesFramebuffer();
entitiesFramebuffer.framebufferRenderExtRaw(mc.getMainWindow().getWidth(), mc.getMainWindow().getHeight(), true);

Только теперь есть проблема - белого фона по факту быть не должно. Это из-за того, что framebufferRenderExtRaw отключает blend. Врубаем его обратно и получаем:

Вот теперь уже лучше. С ходу мы уже получили эффект просвета, как видите спрут отображается поверх всего


Glow или же Blur эффект
Снова заходим в фотошоп и накидываем на наш слой с сущностями блюр:

Т.к. блюр расширяет границы, то при повторной отрисовке он оставит за собой следы расширения исходя из радиуса:


Тогда перед отрисовкой мы применяем шейдер блюра и получаем такую картину:

Затем рисуем второй раз, но уже без шейдера:
ебать гений + rep
 
Начинающий
Статус
Оффлайн
Регистрация
17 Май 2023
Сообщения
227
Реакции[?]
2
Поинты[?]
1K
Ну пока что с этим не понятненько, пока не попробую тогда не разберусь, а так все четко 🫰
 
Пользователь
Статус
Оффлайн
Регистрация
23 Авг 2021
Сообщения
521
Реакции[?]
53
Поинты[?]
20K
Framebuffer (RenderTarget в DirectX) - это технология отрисовки объектов в текстуру. То есть если раньше мы рисовали сразу на экран, то теперь мы рисуем в отдельную текстуру.
Ну и что за хуйню ты сморозил? Framebuffer object (FBO) - объект opengl, который позволяет рисовать объекты не напрямую на экран, а внутрь себя.
Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
Блять, ты бы хоть в переводчик засунул это слово прежде чем опубликовывать тему.. Framebuffer - это кадровый буфер. Не буффер блять, а буфер

1721666088377.png
Ладно.

Затем рисуем второй раз, но уже без шейдера:
А нахуя блять, если можно просто поставить хук перед рендером сущностей в методе, где рендерятся модельки и всё это провернуть, не вызывая лишний раз снова рендер сущностей?

В целом пост неплохой, но это блять такие базовые механики, что просто пиздец.
Только iq issue не сможет додуматься до такого
 
PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
331
Реакции[?]
47
Поинты[?]
37K
знаешь многие и до этого додуматься не могут. а про fbo да, он рисует внутрь себя, но его смысл заключается в рендере в текстуру
 
PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
331
Реакции[?]
47
Поинты[?]
37K
а еще блять никакого «экрана» нету есть основной нулевой фреймбуффер и у него есть текстурка, точно также как и у меня. грубо говоря рендер идет всегда в текстурку независимо от того какой фреймбуффер выбран, а без биндинга текстуры не получится сделать фбо.
 
Новичок
Статус
Оффлайн
Регистрация
8 Авг 2024
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Список:
1. Создаём главный класс + снимаем ограничения - https://yougame.biz/threads/325113
2. Автобус евентов - https://yougame.biz/threads/325114
3. OpenGL + Шейдеры + Рендер - https://yougame.biz/threads/325115
4. Аим - https://yougame.biz/threads/325188
5. GlowESP aka OpenGL Framebuffer - https://yougame.biz/threads/325211/
6. Текст, шрифты, атлас - https://yougame.biz/threads/325292

Framebuffer (RenderTarget в DirectX) - это технология отрисовки объектов в текстуру. То есть если раньше мы рисовали сразу на экран, то теперь мы рисуем в отдельную текстуру.

Я предлагаю реализовать сразу что-нибудь сложное, например GlowESP. Принцип работы у него такой:
1. Создать фреймбуффер сущностей
1. Перед отрисовкой забиндить наш фреймбуффер, чтобы отрисовка шла в него
2. В renderIngameGui отобразить текстуру два раза: первый раз применив шейдер блюра, второй раз без изменений

Чтобы было нагляднее, каждое своё действие я буду показывать в скринами из фотошопа. Поехали

Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
Посмотреть вложение 281740
А нам нужен новый. Как это делают многие - предлагаю создать метод createFramebuffer потому, что у него фиксированный размер, а значит его придётся при каждом изменении размера окна пересоздавать:
Java:
private Framebuffer createFramebuffer(Framebuffer framebuffer) {
    MainWindow mainWindow = mc.getMainWindow(); // Получаем окно
    int width = mainWindow.getFramebufferWidth();
    int height = mainWindow.getFramebufferHeight();
    if (framebuffer == null || framebuffer.framebufferWidth != width || framebuffer.framebufferHeight != height) { // Если framebuffer ещё не создан или размер не совпадает
        if (framebuffer != null) // Если framebuffer уже был создан
            framebuffer.deleteFramebuffer(); // Удаляем (ведь потеря ресурсов это плохо)
      
        framebuffer = new Framebuffer(width, height, true, Minecraft.IS_RUNNING_ON_MAC); // Создаём новый framebuffer
    }
  
    return framebuffer;
}
P.S. На новых версиях есть resize, можно использовать его

private Framebuffer entitiesFramebuffer;
Считайте теперь у нас есть новый пустой слой:
Посмотреть вложение 281741

Отрисовка игроков
Чтобы наш фреймбуффер заполнить нужно сделать bind, затем отрисовать и сделать unbind. Прям как с шейдером.
Находим отрисовку сущностей:
Посмотреть вложение 281742
Перед перечислением добавляем:

После перечисления:

Теперь мы перенесли игроков на новый слой:

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
mc.getFramebuffer().bindFramebuffer(true);
Отображаем фреймбуффер на экран
Чтобы не терять времени и не рисовать текстуру фреймбуффера самому мы воспользуемся методом framebufferRenderExtRaw. При отрисовке оверлея (renderIngameGui) рисуем наш фреймбуффер:
Java:
Framebuffer entitiesFramebuffer = mc.worldRenderer.getEntitiesFramebuffer();
entitiesFramebuffer.framebufferRenderExtRaw(mc.getMainWindow().getWidth(), mc.getMainWindow().getHeight(), true);

Только теперь есть проблема - белого фона по факту быть не должно. Это из-за того, что framebufferRenderExtRaw отключает blend. Врубаем его обратно и получаем:

Вот теперь уже лучше. С ходу мы уже получили эффект просвета, как видите спрут отображается поверх всего


Glow или же Blur эффект
Снова заходим в фотошоп и накидываем на наш слой с сущностями блюр:

Т.к. блюр расширяет границы, то при повторной отрисовке он оставит за собой следы расширения исходя из радиуса:


Тогда перед отрисовкой мы применяем шейдер блюра и получаем такую картину:

Затем рисуем второй раз, но уже без шейдера:
чувак это такая имба сможешь помочь сделать?
 
Начинающий
Статус
Оффлайн
Регистрация
12 Мар 2024
Сообщения
5
Реакции[?]
0
Поинты[?]
0
Список:
1. Создаём главный класс + снимаем ограничения - https://yougame.biz/threads/325113
2. Автобус евентов - https://yougame.biz/threads/325114
3. OpenGL + Шейдеры + Рендер - https://yougame.biz/threads/325115
4. Аим - https://yougame.biz/threads/325188
5. GlowESP aka OpenGL Framebuffer - https://yougame.biz/threads/325211/
6. Текст, шрифты, атлас - https://yougame.biz/threads/325292

Framebuffer (RenderTarget в DirectX) - это технология отрисовки объектов в текстуру. То есть если раньше мы рисовали сразу на экран, то теперь мы рисуем в отдельную текстуру.

Я предлагаю реализовать сразу что-нибудь сложное, например GlowESP. Принцип работы у него такой:
1. Создать фреймбуффер сущностей
1. Перед отрисовкой забиндить наш фреймбуффер, чтобы отрисовка шла в него
2. В renderIngameGui отобразить текстуру два раза: первый раз применив шейдер блюра, второй раз без изменений

Чтобы было нагляднее, каждое своё действие я буду показывать в скринами из фотошопа. Поехали

Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
Посмотреть вложение 281740
А нам нужен новый. Как это делают многие - предлагаю создать метод createFramebuffer потому, что у него фиксированный размер, а значит его придётся при каждом изменении размера окна пересоздавать:
Java:
private Framebuffer createFramebuffer(Framebuffer framebuffer) {
    MainWindow mainWindow = mc.getMainWindow(); // Получаем окно
    int width = mainWindow.getFramebufferWidth();
    int height = mainWindow.getFramebufferHeight();
    if (framebuffer == null || framebuffer.framebufferWidth != width || framebuffer.framebufferHeight != height) { // Если framebuffer ещё не создан или размер не совпадает
        if (framebuffer != null) // Если framebuffer уже был создан
            framebuffer.deleteFramebuffer(); // Удаляем (ведь потеря ресурсов это плохо)
       
        framebuffer = new Framebuffer(width, height, true, Minecraft.IS_RUNNING_ON_MAC); // Создаём новый framebuffer
    }
   
    return framebuffer;
}
P.S. На новых версиях есть resize, можно использовать его

private Framebuffer entitiesFramebuffer;
Считайте теперь у нас есть новый пустой слой:
Посмотреть вложение 281741

Отрисовка игроков
Чтобы наш фреймбуффер заполнить нужно сделать bind, затем отрисовать и сделать unbind. Прям как с шейдером.
Находим отрисовку сущностей:
Посмотреть вложение 281742
Перед перечислением добавляем:

После перечисления:

Теперь мы перенесли игроков на новый слой:

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
mc.getFramebuffer().bindFramebuffer(true);
Отображаем фреймбуффер на экран
Чтобы не терять времени и не рисовать текстуру фреймбуффера самому мы воспользуемся методом framebufferRenderExtRaw. При отрисовке оверлея (renderIngameGui) рисуем наш фреймбуффер:
Java:
Framebuffer entitiesFramebuffer = mc.worldRenderer.getEntitiesFramebuffer();
entitiesFramebuffer.framebufferRenderExtRaw(mc.getMainWindow().getWidth(), mc.getMainWindow().getHeight(), true);

Только теперь есть проблема - белого фона по факту быть не должно. Это из-за того, что framebufferRenderExtRaw отключает blend. Врубаем его обратно и получаем:

Вот теперь уже лучше. С ходу мы уже получили эффект просвета, как видите спрут отображается поверх всего


Glow или же Blur эффект
Снова заходим в фотошоп и накидываем на наш слой с сущностями блюр:

Т.к. блюр расширяет границы, то при повторной отрисовке он оставит за собой следы расширения исходя из радиуса:


Тогда перед отрисовкой мы применяем шейдер блюра и получаем такую картину:

Затем рисуем второй раз, но уже без шейдера:
помоги в дс kypu_unet
 
Начинающий
Статус
Оффлайн
Регистрация
20 Июн 2024
Сообщения
36
Реакции[?]
0
Поинты[?]
0
Сверху Снизу