Spec-Zone.ru › LÖVE

love.math.gammaToLinear

Доступно начиная с LÖVE 0.9.1
Эта функция не поддерживается в более ранних версиях.

Преобразует цвет из гамма-пространства (sRGB) в линейное пространство (RGB). Это полезно при выполнении рендеринга с учётом гаммы, когда необходимо выполнить математические операции в линейном RGB в тех редких случаях, когда LÖVE не выполняет преобразования автоматически.

Дополнительную информацию о рендеринге с учётом гаммы можно найти здесь, здесь и здесь.

В версиях до 11.0 значения компонентов цвета находились в диапазоне от 0 до 255 вместо 0 до 1.

Рендеринг с учётом гаммы — это сложная тема, и легко запутаться в цветовых пространствах. Если вы не уверены, нужен ли вам этот метод, лучше его избегать.

Функция

Сигнатура

lr, lg, lb = love.math.gammaToLinear( r, g, b )

Аргументы

number r
Красный канал цвета sRGB для преобразования.
number g
Зелёный канал цвета sRGB для преобразования.
number b
Синий канал цвета sRGB для преобразования.

Возвращаемые значения

number lr
Красный канал преобразованного цвета в линейном пространстве RGB.
number lg
Зелёный канал преобразованного цвета в линейном пространстве RGB.
number lb
Синий канал преобразованного цвета в линейном пространстве RGB.

Примечания

Значение альфа-канала может быть передано в функцию в качестве четвёртого аргумента, но оно будет возвращено без изменений, так как альфа всегда линейна.

Функция

Сигнатура

lr, lg, lb = love.math.gammaToLinear( color )

Аргументы

table color
Массив с красным, зелёным и синим каналами цвета sRGB для преобразования.

Возвращаемые значения

number lr
Красный канал преобразованного цвета в линейном пространстве RGB.
number lg
Зелёный канал преобразованного цвета в линейном пространстве RGB.
number lb
Синий канал преобразованного цвета в линейном пространстве RGB.

Функция

Сигнатура

lc = love.math.gammaToLinear( c )

Аргументы

number c
Значение канала цвета в пространстве sRGB для преобразования.

Возвращаемые значения

number lc
Значение канала цвета в линейном пространстве RGB.

Примеры

Умножение альфа-канала изображения на его значения RGB в линейном пространстве RGB

local function PremultiplyLinearPixel(x, y, r, g, b, a)
   r = r * a
   g = g * a
   b = b * a
   return r, g, b, a
end
 
local function PremultiplyGammaPixel(x, y, r, g, b, a)
   r, g, b = love.math.gammaToLinear(r, g, b)
   r = r * a
   g = g * a
   b = b * a
   r, g, b = love.math.linearToGamma(r, g, b)
   return r, g, b, a
end
 
-- Loads an image and pre-multiplies its RGB values with its alpha, for use with the ('alpha', 'premultiplied') blend mode.
-- The multiplication correctly accounts for the color-space of the image.
function NewPremultipliedImage(filepath, flags)
    local imagedata = love.image.newImageData(filepath)
 
    local mapfunction = (flags and flags.linear) and PremultiplyLinearPixel or PremultiplyGammaPixel
    imagedata:mapPixel(mapfunction)
 
    return love.graphics.newImage(imagedata, flags)
end
 
image = NewPremultipliedImage("pig.png")

См. также

  • love.math
  • love.math.linearToGamma

© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.math.gammaToLinear

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API