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

PoC Life
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
824
Реакции
87
Список:
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:
Expand Collapse Copy
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

Перед перечислением добавляем:
FoC21Ao.png

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

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

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
Expand Collapse Copy
mc.getFramebuffer().bindFramebuffer(true);

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

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

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


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

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


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

Затем рисуем второй раз, но уже без шейдера:
FB3H8SB.png
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Список:
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:
Expand Collapse Copy
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
Перед перечислением добавляем:
FoC21Ao.png

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

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

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
Expand Collapse Copy
mc.getFramebuffer().bindFramebuffer(true);

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

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

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


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

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


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

Затем рисуем второй раз, но уже без шейдера:
FB3H8SB.png
ебать гений + rep
 
Ну пока что с этим не понятненько, пока не попробую тогда не разберусь, а так все четко ?
 
Framebuffer (RenderTarget в DirectX) - это технология отрисовки объектов в текстуру. То есть если раньше мы рисовали сразу на экран, то теперь мы рисуем в отдельную текстуру.
Ну и что за хуйню ты сморозил? Framebuffer object (FBO) - объект opengl, который позволяет рисовать объекты не напрямую на экран, а внутрь себя.
Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
Блять, ты бы хоть в переводчик засунул это слово прежде чем опубликовывать тему.. Framebuffer - это кадровый буфер. Не буффер блять, а буфер

1721666088377.png

Ладно.

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

В целом пост неплохой, но это блять такие базовые механики, что просто пиздец.
Только iq issue не сможет додуматься до такого
 
знаешь многие и до этого додуматься не могут. а про fbo да, он рисует внутрь себя, но его смысл заключается в рендере в текстуру
 
а еще блять никакого «экрана» нету есть основной нулевой фреймбуффер и у него есть текстурка, точно также как и у меня. грубо говоря рендер идет всегда в текстурку независимо от того какой фреймбуффер выбран, а без биндинга текстуры не получится сделать фбо.
 
Список:
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:
Expand Collapse Copy
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
Перед перечислением добавляем:
FoC21Ao.png

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

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

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
Expand Collapse Copy
mc.getFramebuffer().bindFramebuffer(true);

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

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

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


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

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


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

Затем рисуем второй раз, но уже без шейдера:
FB3H8SB.png
чувак это такая имба сможешь помочь сделать?
 
Список:
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:
Expand Collapse Copy
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
Перед перечислением добавляем:
FoC21Ao.png

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

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

Но слой майнкрафта выключился, поэтому биндим его обратно:
Java:
Expand Collapse Copy
mc.getFramebuffer().bindFramebuffer(true);

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

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

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


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

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


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

Затем рисуем второй раз, но уже без шейдера:
FB3H8SB.png
помоги в дс kypu_unet
 
qq кинь в др в дс если сможешь помочь) ".unkn0wm."
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1724180935962.png
 
слушай, FBO работает также как на 1.21? (renderTarget, MainRenderTarget) и типа когда я бинжу кастомный рендер таргет, то на нем буквально ничего не рендерится, но все рендеры я на mainrendertarget
 
слушай, FBO работает также как на 1.21? (renderTarget, MainRenderTarget) и типа когда я бинжу кастомный рендер таргет, то на нем буквально ничего не рендерится, но все рендеры я на mainrendertarget
да, у меня 1.21.1 там все хорошо

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Назад
Сверху Снизу