PoC Life
-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для 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 отобразить текстуру два раза: первый раз применив шейдер блюра, второй раз без изменений
Чтобы было нагляднее, каждое своё действие я буду показывать в скринами из фотошопа. Поехали
Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
А нам нужен новый. Как это делают многие - предлагаю создать метод createFramebuffer потому, что у него фиксированный размер, а значит его придётся при каждом изменении размера окна пересоздавать:
P.S. На новых версиях есть resize, можно использовать его
Считайте теперь у нас есть новый пустой слой:
Отрисовка игроков
Чтобы наш фреймбуффер заполнить нужно сделать bind, затем отрисовать и сделать unbind. Прям как с шейдером.
Находим отрисовку сущностей:
Перед перечислением добавляем:
После перечисления:
Теперь мы перенесли игроков на новый слой:
Но слой майнкрафта выключился, поэтому биндим его обратно:
Отображаем фреймбуффер на экран
Чтобы не терять времени и не рисовать текстуру фреймбуффера самому мы воспользуемся методом framebufferRenderExtRaw. При отрисовке оверлея (renderIngameGui) рисуем наш фреймбуффер:
Только теперь есть проблема - белого фона по факту быть не должно. Это из-за того, что framebufferRenderExtRaw отключает blend. Врубаем его обратно и получаем:
Вот теперь уже лучше. С ходу мы уже получили эффект просвета, как видите спрут отображается поверх всего
Glow или же Blur эффект
Снова заходим в фотошоп и накидываем на наш слой с сущностями блюр:
Т.к. блюр расширяет границы, то при повторной отрисовке он оставит за собой следы расширения исходя из радиуса:
Тогда перед отрисовкой мы применяем шейдер блюра и получаем такую картину:
Затем рисуем второй раз, но уже без шейдера:
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 отобразить текстуру два раза: первый раз применив шейдер блюра, второй раз без изменений
Чтобы было нагляднее, каждое своё действие я буду показывать в скринами из фотошопа. Поехали
Создание фреймбуффера
Вот у нас основной фреймбуффер майнкрафта:
А нам нужен новый. Как это делают многие - предлагаю создать метод 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;
}
private Framebuffer entitiesFramebuffer;
Считайте теперь у нас есть новый пустой слой:
Отрисовка игроков
Чтобы наш фреймбуффер заполнить нужно сделать bind, затем отрисовать и сделать unbind. Прям как с шейдером.
Находим отрисовку сущностей:
Перед перечислением добавляем:
После перечисления:
Теперь мы перенесли игроков на новый слой:
Но слой майнкрафта выключился, поэтому биндим его обратно:
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 эффект
Снова заходим в фотошоп и накидываем на наш слой с сущностями блюр:
Т.к. блюр расширяет границы, то при повторной отрисовке он оставит за собой следы расширения исходя из радиуса:
Тогда перед отрисовкой мы применяем шейдер блюра и получаем такую картину:
Затем рисуем второй раз, но уже без шейдера:
Последнее редактирование: