Alpha blending - простая математическая задачка :)

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Leo
Частый Гость
Сообщения: 31
Зарегистрирован: 17 фев 2003, 22:22

Alpha blending - простая математическая задачка :)

Сообщение Leo »

Есть такая вот задачка:
Имеется три картинки (если быть проще, три пиксела), размещённые один над другим. P1 над P2 над P3.
Каждый пиксел представлен в виде ARGB.
Где A - alpha (уровень не прозрачности пиксела - на сколько пиксел не прозрачен). То-есть 0 - полностью прозрачен, 1 - полностью не прозрачен.
Чтобы упростить будем использовать только одну составляющую цвета и назовём её C (Color).

Соответственно мы имеем:
A1C1 над A2C2 над A3C3

Чтобы получить конечный пиксел нужно наложить пикселы в одной из нижеследующих последовательностей:
1. A1C1 на A2C2 и затем результат на A3C3;
2. A2C2 на A3C3 и затем A1C1 на результат.
И в том и в другом случае результат один и тот же.

Давайте назовём промежуточный результат T ( temporary).
А результат будет R.

тогда для первого случая:
TC = C1*A1 + C2*(1-A1);
RC = TC*TA + C3*(1-TA);
к сожалению нам не извесна в этом случае TA.

для второго случая:
TC = C2*A2 + C3*(1-A2);
RC = C1*A1 + TC*(1-A1);
здесь мы можем найти результирующий цвет.

Так вот задача в том чтобы расчитать TA для первого случая.
Сразу хочу сэкономить ваше время ибо приравнивание результатов первого и второго случая приводят к зависимости TA от C3 что ни есть верно. TA должен состоять из A1 и A2. Вопрос как :)

И ещё. Я задачку пока не решил, поэтому приведённые выше выкладки могут быть взяты под сомнение. Хотя в формуле
RC = C1*A1 + C2*(1-A1) надеюсь никто сомневаться не будет - она широкоизвестна.

Ну чтож, удачи :lol:
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Re: Alpha blending - простая математическая задачка :)

Сообщение ajkj3em »

Leo писал(а):Хотя в формуле
RC = C1*A1 + C2*(1-A1) надеюсь никто сомневаться не будет - она широкоизвестна.
я бы не стал такие заявления делать в категоричной форме. комбинирование двух rgba цветов дает не только rgb, но и модифицированный a. метод подсчета a зависит от blending mode, которых в первом приближении как минимум 6 разных. почитать можно например здесь , страница 5-25
Leo
Частый Гость
Сообщения: 31
Зарегистрирован: 17 фев 2003, 22:22

Re: Alpha blending - простая математическая задачка :)

Сообщение Leo »

huh писал(а):
Leo писал(а):Хотя в формуле
RC = C1*A1 + C2*(1-A1) надеюсь никто сомневаться не будет - она широкоизвестна.
я бы не стал такие заявления делать в категоричной форме. комбинирование двух rgba цветов дает не только rgb, но и модифицированный a. метод подсчета a зависит от blending mode, которых в первом приближении как минимум 6 разных. почитать можно например здесь , страница 5-25
Форма не категорична :) Но так или иначе спасибо за ссылку. Хотя формулы приведённые там приведут к подобному результату или точнее проблеме. Формула приведённая выше это смешивание пикселов при наложении одно на другого (общепринятая для данной операции. Используется в DirectX, OpenGL и т.д. в большенстве случаев реализована в hardware). Как указано в вышеупомянутом документе это операция OVER. Хотя почемуто в этом документе C2 уменьшается на A2 хотя в случае с только двумя слоями альфа второго слоя не играет роли. Ну да ладно.
Я опустил тот факт что alpha смешивается по этой же формуле чтобы не запутать людей. Потому что это смешивание приводит к не верному результату.
А точнее:
Если накладывать P1 на P2, где P1 полупрозрачен и P2 не прозрачен, то результат становится полупрозрачным если его накладывать куда-нибудь ещё и использовать смешанную альфу. Хотя он должен быть не прозрачным как at least as P2
Ответить