Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Вниз

Нелинейная прозрачность.   Найти похожие ветки 

 
Карелин Артем   (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 вся ветка

Форум: "Media";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.07 c
1-15608
den_dnepr
2003-01-29 11:09
2003.02.06
фокус


3-15417
kerkonst
2003-01-19 19:46
2003.02.06
DBRadioGroup отказывается работать


14-15930
Шоломицкий
2003-01-21 19:41
2003.02.06
Есть тут программеры из Microsoft?


1-15632
icWasya
2003-01-23 17:59
2003.02.06
{$Link


6-15800
RAA
2002-12-15 12:58
2003.02.06
Как считать файл на другом компе по NetBios?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский