Как сделать внутри внутреннее свечение/размытие

Marat Krutoi

Участник
Автор темы
56
9
Версия MoonLoader
.026-beta
Ну короче как можно реализовать свечение внутри как у волента
Как видите у него круг и внутри круга есть размытые цвета ну крч как его сделать???
1693220056334.png
 
Решение
можно пожалуйста полный код или можно тему откуда вы это скопировали
и куда этот код девать что подключать
Сделано на коленке, не копировалось откуда-то.
Более оптимизированный способ(всё же переборол свою лень и сделал через изменение цвета вершин)
Дополнил код функции примером использования с mimgui
Lua:
local imgui = require 'mimgui'
local sw, sh = 0, 0

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
    sw, sh = getScreenResolution()
end)

imgui.OnFrame(function() return true end, function()
    local dl = imgui.GetBackgroundDrawList()
    local pos = imgui.ImVec2(sw / 2, sh / 2)
    local radius = sh * 0.25
    local glow_size = sh * 0.04

    local clr = imgui.ImVec4(0x26 / 255, 0xB4 / 255, 0xC4 / 255...

Иглобрюх

Активный
250
73

Andrinall

Известный
679
532
Без пнг это можно как-то вот так провернуть.
Lua:
dl:AddCircle(pos, radius, 0xFFC4B426, 64, 3)
for i = 1, 9 do
    local thickness = 4
    local alpha = 0.3 - i / (thickness * 8)
    dl:AddCircle(
        pos, radius - (i - 1) * thickness,
        imgui.ColorConvertFloat4ToU32(
            ImVec4(0x26 / 255, 0xB4 / 255, 0xC4 / 255, alpha >= 0.0 and alpha or 0.0)
        ), 64, thickness
    )
end
изображение_2023-08-28_142717047.png

Ещё можно поизвращаться и менять цвет вершин в VtxBuffer DrawList'a по окружности и ближе к центру, но это математика которую мне влом проворачивать.
 

Marat Krutoi

Участник
Автор темы
56
9
Без пнг это можно как-то вот так провернуть.
Lua:
dl:AddCircle(pos, radius, 0xFFC4B426, 64, 3)
for i = 1, 9 do
    local thickness = 4
    local alpha = 0.3 - i / (thickness * 8)
    dl:AddCircle(
        pos, radius - (i - 1) * thickness,
        imgui.ColorConvertFloat4ToU32(
            ImVec4(0x26 / 255, 0xB4 / 255, 0xC4 / 255, alpha >= 0.0 and alpha or 0.0)
        ), 64, thickness
    )
end
Посмотреть вложение 213451

Ещё можно поизвращаться и менять цвет вершин в VtxBuffer DrawList'a по окружности и ближе к центру, но это математика которую мне влом проворачивать.
Спасибо но можешь помочь
как можно эту линию которая идет от игрока до моего персонажа сменить чтобы стояло именно по центру экрана ну или вместо точки которая по центру
1693222655234.png
 

Andrinall

Известный
679
532
Спасибо но можешь помочь
как можно эту линию которая идет от игрока до моего персонажа сменить чтобы стояло именно по центру экрана ну или вместо точки которая по центру
Посмотреть вложение 213453
Ответ в твоём вопросе. Изменить позицию, куда приходит линия, с конвертированных координат твоего персонажа на координаты этой точки.
 

Marat Krutoi

Участник
Автор темы
56
9
Без пнг это можно как-то вот так провернуть.
Lua:
dl:AddCircle(pos, radius, 0xFFC4B426, 64, 3)
for i = 1, 9 do
    local thickness = 4
    local alpha = 0.3 - i / (thickness * 8)
    dl:AddCircle(
        pos, radius - (i - 1) * thickness,
        imgui.ColorConvertFloat4ToU32(
            ImVec4(0x26 / 255, 0xB4 / 255, 0xC4 / 255, alpha >= 0.0 and alpha or 0.0)
        ), 64, thickness
    )
end
Посмотреть вложение 213451

Ещё можно поизвращаться и менять цвет вершин в VtxBuffer DrawList'a по окружности и ближе к центру, но это математика которую мне влом проворачивать.
можно пожалуйста полный код или можно тему откуда вы это скопировали
и куда этот код девать что подключать
 

Andrinall

Известный
679
532
можно пожалуйста полный код или можно тему откуда вы это скопировали
и куда этот код девать что подключать
Сделано на коленке, не копировалось откуда-то.
Более оптимизированный способ(всё же переборол свою лень и сделал через изменение цвета вершин)
Дополнил код функции примером использования с mimgui
Lua:
local imgui = require 'mimgui'
local sw, sh = 0, 0

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
    sw, sh = getScreenResolution()
end)

imgui.OnFrame(function() return true end, function()
    local dl = imgui.GetBackgroundDrawList()
    local pos = imgui.ImVec2(sw / 2, sh / 2)
    local radius = sh * 0.25
    local glow_size = sh * 0.04

    local clr = imgui.ImVec4(0x26 / 255, 0xB4 / 255, 0xC4 / 255, 0.5)
    AddCircleWithInnerGlow(dl, pos, radius, glow_size, clr, 64, 3)
end)

function AddCircleWithInnerGlow(draw_list, pos, radius, glow_size, color, num_segments, thickness)
    local function getDistance(p1, p2) return ((p2.x-p1.x)^2+(p2.y-p1.y)^2)^0.5 end

    local glow_size = (glow_size >= radius) and radius - 0.01 or glow_size
    local temp_alpha = color.w
    local start = draw_list.VtxBuffer.Size
    draw_list:AddCircle(pos, radius - glow_size / 2, 0xFFFFFFFF, num_segments, glow_size)
    local _end = draw_list.VtxBuffer.Size

    for idx = start, _end do
        local distance = getDistance(pos, draw_list.VtxBuffer.Data[idx].pos)
        if distance < radius - glow_size / 2 then
            color.w = 0.01
            draw_list.VtxBuffer.Data[idx].col = imgui.ColorConvertFloat4ToU32(color)
        else
            color.w = 0.2
            draw_list.VtxBuffer.Data[idx].col = imgui.ColorConvertFloat4ToU32(color)
        end
    end

    color.w = temp_alpha
    draw_list:AddCircle(pos, radius, imgui.ColorConvertFloat4ToU32(color), num_segments, thickness)
end
изображение_2023-08-28_153121616.png