Вопрос [NL] Переливающийся Градиент

Privatny p100 DT Airlag Break LC Teleport Exploit
Read Only
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
951
Реакции[?]
150
Поинты[?]
74K
Красивый переливающийся градиент где цвета "перетекают" из одного в другой.
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2021
Сообщения
38
Реакции[?]
3
Поинты[?]
2K
Код:
local gradient = {
  { 255, 0, 0 },   -- Красный
  { 255, 165, 0 }, -- Оранжевый
  { 255, 255, 0 }, -- Желтый
  { 0, 255, 0 },   -- Зеленый
  { 0, 0, 255 },   -- Синий
  { 75, 0, 130 },  -- Индиго
  { 238, 130, 238 } -- Фиолетовый
}

local gradient_width = 200 -- Ширина градиента в пикселях
local gradient_height = 50 -- Высота градиента в пикселях

for i = 1, gradient_width do
  local x = i / gradient_width
  local r, g, b = 0, 0, 0
  for j = 1, #gradient do
    local stop = (j - 1) / (#gradient - 1)
    local distance = math.abs(x - stop)
    local weight = 1 - distance
    weight = weight * weight * weight
    r = r + gradient[j][1] * weight
    g = g + gradient[j][2] * weight
    b = b + gradient[j][3] * weight
  end
  draw.Color(r, g, b, 255)
  draw.FilledRect(i - 1, 0, i, gradient_height)
end
Код использует массив цветов, чтобы определить цветовую схему градиента. Затем он создает градиент, используя эти цвета и мат. формулу для определения, как смешивать цвета. Каждый пиксель градиента вычисляется отдельно, и для каждого пикселя вычисляется новый цвет, который затем используется для заполнения прямоугольника этого пикселя.


p.s чита нема, так что в игре не проверял на работоспособность. (Но по идеи должен работать).
p.s2 не паста, прямо сейчас написал =)
 
Privatny p100 DT Airlag Break LC Teleport Exploit
Read Only
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
951
Реакции[?]
150
Поинты[?]
74K
Код:
local gradient = {
  { 255, 0, 0 },   -- Красный
  { 255, 165, 0 }, -- Оранжевый
  { 255, 255, 0 }, -- Желтый
  { 0, 255, 0 },   -- Зеленый
  { 0, 0, 255 },   -- Синий
  { 75, 0, 130 },  -- Индиго
  { 238, 130, 238 } -- Фиолетовый
}

local gradient_width = 200 -- Ширина градиента в пикселях
local gradient_height = 50 -- Высота градиента в пикселях

for i = 1, gradient_width do
  local x = i / gradient_width
  local r, g, b = 0, 0, 0
  for j = 1, #gradient do
    local stop = (j - 1) / (#gradient - 1)
    local distance = math.abs(x - stop)
    local weight = 1 - distance
    weight = weight * weight * weight
    r = r + gradient[j][1] * weight
    g = g + gradient[j][2] * weight
    b = b + gradient[j][3] * weight
  end
  draw.Color(r, g, b, 255)
  draw.FilledRect(i - 1, 0, i, gradient_height)
end
Код использует массив цветов, чтобы определить цветовую схему градиента. Затем он создает градиент, используя эти цвета и мат. формулу для определения, как смешивать цвета. Каждый пиксель градиента вычисляется отдельно, и для каждого пикселя вычисляется новый цвет, который затем используется для заполнения прямоугольника этого пикселя.


p.s чита нема, так что в игре не проверял на работоспособность. (Но по идеи должен работать).
p.s2 не паста, прямо сейчас написал =)
1678474550661.png
Немного не то
 
Privatny p100 DT Airlag Break LC Teleport Exploit
Read Only
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
951
Реакции[?]
150
Поинты[?]
74K
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2021
Сообщения
38
Реакции[?]
3
Поинты[?]
2K
Может тебе такое надо....
code_language.lua:
local gradient_width = 200 -- Ширина градиента в пикселях
local gradient_height = 50 -- Высота градиента в пикселях
local gradient_duration = 2 -- Длительность переливания в секундах
local gradient_colors = {
  { 255, 0, 0 },   -- Красный
  { 255, 165, 0 }, -- Оранжевый
  { 255, 255, 0 }, -- Желтый
  { 0, 255, 0 },   -- Зеленый
  { 0, 0, 255 },   -- Синий
  { 75, 0, 130 },  -- Индиго
  { 238, 130, 238 } -- Фиолетовый
}
 
local function lerp(a, b, t)
  return a * (1 - t) + b * t
end
 
local function color_lerp(c1, c2, t)
  local r = lerp(c1[1], c2[1], t)
  local g = lerp(c1[2], c2[2], t)
  local b = lerp(c1[3], c2[3], t)
  return { r, g, b }
end
 
local function get_gradient_color(t)
  local num_stops = #gradient_colors
  local stop_size = 1 / (num_stops - 1)
  local stop_index = math.floor(t / stop_size) + 1
  local stop_t = (t - (stop_index - 1) * stop_size) / stop_size
  if stop_index == num_stops then
    return gradient_colors[num_stops]
  end
  return color_lerp(gradient_colors[stop_index], gradient_colors[stop_index + 1], stop_t)
end
 
callbacks.Register("Draw", function()
  local t = globals.RealTime() % gradient_duration / gradient_duration
  for i = 1, gradient_width do
    local x = i / gradient_width
    local color = get_gradient_color(x + t)
    draw.Color(color[1], color[2], color[3], 255)
    draw.FilledRect(i - 1, 0, i, gradient_height)
  end
end)
Код использует массив цветов, чтобы определить цветовую схему градиента, и функцию color_lerp, которая интерполирует между двумя цветами. Затем он использует функцию get_gradient_color, чтобы вычислить цвет для каждого пикселя градиента. Эта функция находит два ближайших цвета из массива цветов и интерполирует между ними, чтобы создать плавный переход. Затем он рисует каждый пиксель градиента с вычисленным цветом, используя функцию draw.FilledRect.
 
Privatny p100 DT Airlag Break LC Teleport Exploit
Read Only
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
951
Реакции[?]
150
Поинты[?]
74K
А где именно хочешь? Что бы что переливалось?
что бы цвет переливался
1.1678475355061.png
2.1678475388412.png
3.1678475477024.png

И потом в правый верхний но не могу > чем 3 файла прикреплять
И это всё анимировано
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2021
Сообщения
38
Реакции[?]
3
Поинты[?]
2K
что бы цвет переливался
1.Посмотреть вложение 241355
2.Посмотреть вложение 241356
3.Посмотреть вложение 241357

И потом в правый верхний но не могу > чем 3 файла прикреплять
И это всё анимировано
В правом верхнем углу, анимированный, переливающийся гардиент? Верно?

Короче.. Вот код. Дальше наверное уже сам. Т.к знаешь что именно тебе нужно, только ты. Если нужно объяснение кода - дам.


Анимированный, переливающийся гардиент в правом углу экрана.:
local gradient_width = 200 -- Ширина градиента в пикселях
local gradient_height = 50 -- Высота градиента в пикселях
local gradient_duration = 2 -- Длительность переливания в секундах
local gradient_colors = {
  { 255, 0, 0 },   -- Красный
  { 255, 165, 0 }, -- Оранжевый
  { 255, 255, 0 }, -- Желтый
  { 0, 255, 0 },   -- Зеленый
  { 0, 0, 255 },   -- Синий
  { 75, 0, 130 },  -- Индиго
  { 238, 130, 238 } -- Фиолетовый
}
 
local function lerp(a, b, t)
  return a * (1 - t) + b * t
end
 
local function color_lerp(c1, c2, t)
  local r = lerp(c1[1], c2[1], t)
  local g = lerp(c1[2], c2[2], t)
  local b = lerp(c1[3], c2[3], t)
  return { r, g, b }
end
 
local function get_gradient_color(t)
  local num_stops = #gradient_colors
  local stop_size = 1 / (num_stops - 1)
  local stop_index = math.floor(t / stop_size) + 1
  local stop_t = (t - (stop_index - 1) * stop_size) / stop_size
  if stop_index == num_stops then
    return gradient_colors[num_stops]
  end
  return color_lerp(gradient_colors[stop_index], gradient_colors[stop_index + 1], stop_t)
end
 
local function draw_gradient()
  local x = draw.GetScreenSize()
  x = x.x - gradient_width - 10 -- 10 пикселей от края экрана
  local y = 10 -- 10 пикселей от края экрана
  local t = globals.RealTime() % gradient_duration / gradient_duration
  for i = 1, gradient_width do
    local x_offset = i / gradient_width
    local color = get_gradient_color(x_offset + t)
    draw.Color(color[1], color[2], color[3], 255)
    draw.FilledRect(x + i - 1, y, x + i, y + gradient_height)
  end
end
 
callbacks.Register("Draw", function()
  draw_gradient()
end)
 
Начинающий
Статус
Оффлайн
Регистрация
30 Апр 2022
Сообщения
194
Реакции[?]
8
Поинты[?]
1K
Privatny p100 DT Airlag Break LC Teleport Exploit
Read Only
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
951
Реакции[?]
150
Поинты[?]
74K
В правом верхнем углу, анимированный, переливающийся гардиент? Верно?

Короче.. Вот код. Дальше наверное уже сам. Т.к знаешь что именно тебе нужно, только ты. Если нужно объяснение кода - дам.


Анимированный, переливающийся гардиент в правом углу экрана.:
local gradient_width = 200 -- Ширина градиента в пикселях
local gradient_height = 50 -- Высота градиента в пикселях
local gradient_duration = 2 -- Длительность переливания в секундах
local gradient_colors = {
  { 255, 0, 0 },   -- Красный
  { 255, 165, 0 }, -- Оранжевый
  { 255, 255, 0 }, -- Желтый
  { 0, 255, 0 },   -- Зеленый
  { 0, 0, 255 },   -- Синий
  { 75, 0, 130 },  -- Индиго
  { 238, 130, 238 } -- Фиолетовый
}

local function lerp(a, b, t)
  return a * (1 - t) + b * t
end

local function color_lerp(c1, c2, t)
  local r = lerp(c1[1], c2[1], t)
  local g = lerp(c1[2], c2[2], t)
  local b = lerp(c1[3], c2[3], t)
  return { r, g, b }
end

local function get_gradient_color(t)
  local num_stops = #gradient_colors
  local stop_size = 1 / (num_stops - 1)
  local stop_index = math.floor(t / stop_size) + 1
  local stop_t = (t - (stop_index - 1) * stop_size) / stop_size
  if stop_index == num_stops then
    return gradient_colors[num_stops]
  end
  return color_lerp(gradient_colors[stop_index], gradient_colors[stop_index + 1], stop_t)
end

local function draw_gradient()
  local x = draw.GetScreenSize()
  x = x.x - gradient_width - 10 -- 10 пикселей от края экрана
  local y = 10 -- 10 пикселей от края экрана
  local t = globals.RealTime() % gradient_duration / gradient_duration
  for i = 1, gradient_width do
    local x_offset = i / gradient_width
    local color = get_gradient_color(x_offset + t)
    draw.Color(color[1], color[2], color[3], 255)
    draw.FilledRect(x + i - 1, y, x + i, y + gradient_height)
  end
end

callbacks.Register("Draw", function()
  draw_gradient()
end)
Скажу попроще. Мне надо что бы один цвет плавно лерпался в другой и обратно.
 
Сверху Снизу