Как бы я создать функцию, чтобы сделать гридент между любыми цветами - PullRequest
0 голосов
/ 06 апреля 2020

Это был довольно запутанный вопрос

Я хотел создать функцию, которая могла бы создавать градиент между любым количеством цветов, в lua на основе определенного процента шага между цветами.

Это работает для двух цветов,

graident.between_two = function(percent,colorA,colorB)
  local r, g, b ,alpha = colorA.r-(colorA.r-colorB.r)*percent,
                  colorA.g-(colorA.g-colorB.g)*percent,
                  colorA.b-(colorA.b-colorB.b)*percent,
                  colorA.alpha-(colorA.alpha-colorB.alpha)*percent
return {r=r,g=g,b=b,alpha=1}
end

Но когда я попытался сделать то же самое с несколькими цветами, я не мог понять, как я могу получить это из работы

local graident = {}

graident.between_two = function(percent,colorA,colorB)
  local r, g, b ,alpha = colorA.r-(colorA.r-colorB.r)*percent,
                  colorA.g-(colorA.g-colorB.g)*percent,
                  colorA.b-(colorA.b-colorB.b)*percent,
                  colorA.alpha-(colorA.alpha-colorB.alpha)*percent
return {r=r,g=g,b=b,alpha=1}
end

graident.inf = function(value,colors)
  -- the total amount of colors
  local totalcolors = #colors-1
  local tc = #colors
  -- int per graident
  local gam = 1/(totalcolors+1)
  --print(cir)
  -- local color
  local color = {}
  for i=1,totalcolors do
    local min , max = (i-1)/totalcolors , (i)/totalcolors
    local imin , imax = i , i+1
    if imin == 0 then imin = 1 end
    --print("===========")
    --print(imin .. " min : " .. min .. " \n" .. imax .. " max : " .. max)

    -- if within value
    if value >= min and value <= max then
      -- get value between this section
      local value2 = (value/gam)/tc
     --print("color-> : " .. value2)

      color = graident.between_two(value2,colors[imin],colors[imax])


    end
  end
  --print("===========")
  --print(" r " .. color.r .. " g" .. color.g .. " b " .. color.b )
  return color
end

graident.newColor = function(r,g,b,alpha)
  return {
    r=r,
    g=g,
    b=b,
    alpha=alpha,
  }
end

вышеупомянутая функция не работает для получения значений между предоставленными цветами.

желаемая функция сможет получить значения между X количеством цветов

1 Ответ

0 голосов
/ 06 апреля 2020

Я понял, что случилось с моим кодом

Все, что мне нужно было сделать, это заменить

local value2 = (value/gam)/tc

на

local value2 = (value / gam) % 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...