Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизНелинейная прозрачность. Найти похожие ветки
← →
Карелин Артем (2002-10-23 14:40) [0]Есть картинка: темно-красное пятно на черном фоне. Если засунуть ее в 3D MAX, подстелив ее же в альфа-канал, то пятно будет очень даже выделяться на бэкграунде. У меня не получается добиться такого эффекта. Я делаю альфа-канал по формулам преобразования в оотенки серого, по усреднению цвета, но результатом моих преобразований является едва заметное красноватое пятнышко.
Законы рассчета альфы по цветовым составляющим в Максе явно далеки от линейных.
Вопрос в том, какими формулами следует пользоваться для рассчета альфы в случае не очень ярких рисунков и чтобы они были не слишком "полупрозрачными".
← →
Alx2 (2002-10-23 15:07) [1]Не знаю, поможет ли это:
=================================
Григорьев Антон
10.06.99
Найти меня можно по адресу duker@ipmt-hpm.ac.ru
или grigorievab@mail.ru
.................
.................
.................
.................
SL[X].rgbtRed:=(Transparency*SL[X].rgbtRed+(100-Transparency)*GetRValue(_TranspColor)) div 100;
SL[X].rgbtGreen:=(Transparency*SL[X].rgbtGreen+(100-Transparency)*GetGValue(_TranspColor)) div 100;
SL[X].rgbtBlue:=(Transparency*SL[X].rgbtBlue+(100-Transparency)*GetBValue(_TranspColor)) div 100
{ Предыдущие три строчки - реализация алгоритма смешения цветов
Pr:=(Pa*Wa+Pb*Wb)/(Wa+Wb), где Pr - результирующий цвет,
Pa и Pb - исходные цвета, Wa и Wb - веса этих цветов.
У нас в качестве Pa берётся цвет пикселя скопированной с экрана картинки,
В качестве Pb - заранее заданный цвет TranspColor, Wa=Transparency,
Wb=100-Transparency. Очевидно, что эту операцию необходимо выполнить для
каждого из основных цветов в отдельности.
Здесь открывается широкое поле для деятельности. Можно, например, сделать
Transparency не постоянным, а зависящим от координаты - получится градиентная
прозрачность. Или можно в качестве Pb взять не фиксированный цвет, а цвет
пикселя другой картинки - получится окно, фоном которого служит
полупрозрачная картинка. В конце концов, можно изменить алгоритм смешения
цветов, и тогда откроются новые возможности.
Кстати, вот пример градиентной прозрачности:
SL[X].rgbtRed:=((CH-Y)*SL[X].rgbtRed+Y*GetRValue(TranspColor)) div CH;
SL[X].rgbtGreen:=((CH-Y)*SL[X].rgbtGreen+Y*GetGValue(TranspColor)) div CH;
SL[X].rgbtBlue:=((CH-Y)*SL[X].rgbtBlue+Y*GetBValue(TranspColor)) div CH;
Хочу добавить, что это смотрится нормально только в режимах True Color.
High Color для этого недостаточно. А в режимах, худших, чем High Color,
полупрозрачные окна выглядят страшнее, чем ядерная война.
}
================================
← →
Карелин Артем (2002-10-23 15:07) [2]Формула видимо включает в себя экспоненту. Только трудновато у меня с выводом таких формул :(
← →
Карелин Артем (2002-10-24 09:49) [3]А вот что я придумал:
альфа составляющая пусть будет функцией от насыщенности цвета. Часто берут альфу равную насыщенности. Мне же надо было нечто кривое. Ну и в итоге родилась следующая функция:
|C*(k-1) |
А=255*Ln|-------+1|/Ln(k)
| 255 |
Где С - насыщенность цвета (есть достаточно много методик рассчета)
K - к-т, отвечающий за нелинейность функции.
P.S. Математика делает наш сон спокойным, а кошельки пухлыми.
Страницы: 1 вся ветка
Текущий архив: 2003.02.06;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.056 c