Исходник mimgui blur | Обновление 1.1!

Привет

эффект размытия, наконец, теперь и в mimgui

GitHub mimgui blur:

Скачать mimgui blur
Установка: переместить папку mimgui_blur из архива в папку «*Корневая папка с игрой*/moonloader/lib»


Список функций:
Lua:
mimgui_blur.apply(draw_list, radius, color, rounding, rounding_corners) -- размывает целиком указанный дравлист. все параметры, кроме draw_list, являются необязательными
mimgui_blur.applyItem(draw_list, radius, color, rounding, rounding_corners) -- размывает предыдущий элемент в дравлисте. все параметры, кроме draw_list, являются необязательными
mimgui_blur.applyRect(draw_list, pos_start, pos_end, radius, color, rounding, rounding_corners) -- размывает указанную область в дравлисте. все параметры, кроме draw_list, pos_start, pos_end являются необязательными
Следует отметить, что все эти функции можете вызывать до/после рендера элементов в окнах, и в зависимости от порядка вызова, соответственно, будут размываться те элементы, которые стояли до вызова apply(Item/Rect)

Пример использования:
Lua:
local imgui = require 'mimgui'
local vkeys = require 'vkeys'
local mimgui_blur = require 'mimgui_blur'
local wm = require 'windows.message'
local new = imgui.new
local renderWindow = new.bool(false)
local sizeX, sizeY = getScreenResolution()
local blurMode = false
local blurRadius = new.float(0.8)
local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(800, 600), imgui.Cond.FirstUseEver)
        -- mimgui_blur.apply(imgui.GetBackgroundDrawList(), blurRadius[0])
        -- imgui.GetBackgroundDrawList():AddLine(imgui.ImVec2(math.huge, math.huge), imgui.ImVec2(math.huge, math.huge), 0xff0000ff)
        if imgui.Begin("Main Window", renderWindow) then
            imgui.Text("Hello")
            imgui.Text(string.format("Current render mode: %s", renderWindow[0]))
            if imgui.Button('Switch mode') then blurMode = not blurMode end
            imgui.SliderFloat("Blur radius", blurRadius, 0.0, 100.0)
            mimgui_blur.apply(not blurMode and imgui.GetWindowDrawList() or imgui.GetBackgroundDrawList(), blurRadius[0])
        end
        imgui.End()
    end
)
function main()
    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == vkeys.VK_X then
                renderWindow[0] = not renderWindow[0]
            end
        end
    end)
    wait(-1)
end
 
Последнее редактирование:

XRLM

Известный
2,539
854
а вот так понятно, спс

Ток не понял, что такое
imgui.ImVec2(90, 680), -- координаты для 1600x900 лень подбирать для формулы под все разрешения экрана
imgui.ImVec2(345, 850)

Не я тип понял, что это координаты где начать размывать, а где нет. Ток откуда ты их взял

+ что такое GetItemRectSize and GetCursorScreenPos()



крч я сделал, как понял. Однако у меня блюр не в там где надо.


афыаыф:
--===== [ Подключаем библиотеки ] =====--
local imgui = require 'mimgui' -- Графический модуль mimgui
local blur = require ('mimgui_blur') -- Это дополнение для графического модуля mimgui, который добавляет блюр.
------------------------------


--===== [ Функции ] =====--
imgui.OnInitialize(function() -- Функция, вызывающаяся один раз за период жизни скрипта. Типа пред загрузка, перед показом в Imgui
    imgui.GetIO().IniFilename = nil --  Выключаем сохранение
end)
------------------------------

--===== [ Работа с мимгуи ] =====--

--Гл.Окно--
imgui.OnFrame(function() return window_main[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2((displayX / 2), displayY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) -- отвечает за положение окна на экране
        imgui.SetNextWindowSize(imgui.ImVec2(1200, 600), imgui.Cond.Always) -- отвечает за размер окна
        imgui.Begin(u8'', window_main, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoScrollbar + imgui.WindowFlags.NoScrollWithMouse) -- отвечает за отображение окна, его заголовок и флаги
       
        imgui.SetCursorPos(imgui.ImVec2(0, 0)) -- Ставим положение для Чилда

        if imgui.BeginChild('SwitchChild', imgui.ImVec2(215, 600), true) then
           
            --===== [ Блюр ] =====--
            blur.applyRect(imgui.GetBackgroundDrawList(), imgui.ImVec2(0, 0), imgui.ImVec2(215, 600))
            ------------------------------
            imgui.EndChild() -- обязательно следите за тем, чтобы каждый чайлд был закрыт

        imgui.End()
    end
)
------------------------------
блюр нужно вызывать до отрисовки элементов, которые не должны быть в блюре

да ты еще и бекграунд неправильно вызываешь
 
  • Клоун
Реакции: Air_Official

Dewize

Известный
432
88
А есть люди которые мне в дс могу объяснить подробно? Я ваще нихуя не вдупляю. Я mimgui начал изучать дней 5 назад. Не шарю за него.
 

Andrinall

Известный
678
531
blur.applyRect(imgui.GetBackgroundDrawList(), imgui.ImVec2(0, 0), imgui.ImVec2(215, 600))
у BeginChild отдельный WindowDrawList от основного окна, если надо заблюрить весь Child лучше юзать blur.apply(imgui.GetWindowDrawList()) после imgui.BeginChild


А есть люди которые мне в дс могу объяснить
Скрытое содержимое для пользователя(ей): Dewize
 

Dewize

Известный
432
88
у BeginChild отдельный WindowDrawList от основного окна, если надо заблюрить весь Child лучше юзать blur.apply(imgui.GetWindowDrawList()) после imgui.BeginChild



*** Скрытый текст не может быть процитирован. ***

Скрытое содержимое для пользователя(ей): Andrinall
 

Andrinall

Известный
678
531
как накинуть на тултип? я не осилил
Тебе именно бэк тултипа надо блюрить? Если да то вот.
изображение_2023-09-04_083252483.png
Lua:
function imgui.TextQuestion(text)
    imgui.SameLine()
    imgui.TextDisabled('(?)')
    if imgui.IsItemHovered() then
    	imgui.PushStyleColor(imgui.Col.PopupBg, ImVec4(0,0,0,0)) -- это чтоб убрать фон у тултипа, в сурсах имгуи там альфа ставится типо SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f);
		imgui.PushStyleVarVec2(imgui.StyleVar.WindowPadding, ImVec2(5, 5))
		imgui.PushStyleVarFloat(imgui.StyleVar.WindowRounding, 9.0)
        imgui.BeginTooltip()
        local pos = imgui.GetWindowPos()
        blur.applyRect( -- тут можно просто apply но тогда не будет rounding'а у углов
        	imgui.GetWindowDrawList(),
        	pos, pos + imgui.GetWindowSize(),
        	1, 0xFF707070,
        	imgui.GetStyle().WindowRounding, 15
        )
        imgui.PushTextWrapPos(450)
        imgui.TextUnformatted(text)
        imgui.PopTextWrapPos()
        imgui.EndTooltip()
		imgui.PopStyleVar(2)
		imgui.PopStyleColor(1)
    end
end
 
Последнее редактирование:
  • Нравится
  • Вау
Реакции: Akionka и #Northn