Spec-Zone.ru › LÖVE

love.math.linearToGamma

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

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

В целом, цвета, выбранные на основе их отображения на экране, уже находятся в гамма-пространстве и не должны быть повторно преобразованы. Цвета, вычисленные с помощью математических формул, часто находятся в линейном RGB-пространстве.

Подробнее о гамма-корректной отрисовке здесь, здесь и здесь.

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

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

Функция

Синтаксис

cr, cg, cb = love.math.linearToGamma( lr, lg, lb )

Аргументы

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

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

number cr
Красный канал преобразованного цвета в гамма sRGB-пространстве.
number cg
Зелёный канал преобразованного цвета в гамма sRGB-пространстве.
number cb
Синий канал преобразованного цвета в гамма sRGB-пространстве.

Примечания

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

Функция

Синтаксис

cr, cg, cb = love.math.linearToGamma( color )

Аргументы

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

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

number cr
Красный канал преобразованного цвета в гамма sRGB-пространстве.
number cg
Зелёный канал преобразованного цвета в гамма sRGB-пространстве.
number cb
Синий канал преобразованного цвета в гамма sRGB-пространстве.

Функция

Синтаксис

c = love.math.linearToGamma( lc )

Аргументы

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

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

number c
Значение канала цвета в гамма sRGB-пространстве.

Примеры

Умножение альфа-канала изображения на его 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.gammaToLinear

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

Spec-Zone.ru

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