2015-07-29 3 views
0

Я искал через google и нашел результаты, которые объясняют, как blending работает в direct3d 11. Поэтому я делаю это сообщение только для проверки того, полностью ли я понимаю эти понятия.Нужно уточнить с помощью «смешивания» в direct3d 11

По большей части я несколько понимаю концепцию смешивания. Мы смешиваем цвета, комбинируя два цвета и создавая окончательный цвет. Это в основном выполняется с двумя уравнениями, которые direct3d имеет на стадии слияния вывода.

FinalColor = (Source Color * Source Blend Factor) + (Destination Color * Destination Blend Factor)

и

FinalAlpha = (Source Alpha * Source Alpha Blend Factor) + (Destination Alpha * Destination Alpha Blend Factor)

цвет источники Source Color и Source Alpha определяются любым пиксельный шейдер выходами. А адреса Destination Color и Destination Alpha определяются любым цветом, указанным в Render Target (backbuffer).

Теперь у меня есть немного трудно понять сочетание факторов Source Blend Factor, Destination Blend Factor, Source Alpha Blend Factor и Destination Alpha Blend factor

Так как я знаю, что эти факторы смесевые определяются D3D11_RENDER_TARGET_BLEND_DESC, я могу использовать элемент SrcBlend и назначить его на флаг D3D11_BLEND_SRC_COLOR ... это будет означать, что коэффициент смешивания Source Blend Factor будет иметь цвет, который выдает пиксельный шейдер.

Как вы думаете, я понимаю концепцию смешивания? или есть что-то, что мне не хватает? (Не стесняйтесь исправить меня)

ответ

0

Уравнения для смешивания являются еще более гибкими, чем те, которые вы написали выше. Общее уравнение смешивания:

DestColor = Color1 <ColorOp> Color2 
DestAlpha = Alpha1 <AlphaOp> Alpha2 

В то время как Color1 часто выводится из пиксельного шейдера, он (наряду с Color2, Alpha1 и Alpha2) может быть любым из значений в BLEND перечисления. Аналогично, в то время как оператором смешивания обычно является +, он может фактически быть любым из значений в перечислении BLEND_OP. Вместе они обеспечивают полный набор всех возможных нормализованных операций линейного смешивания. Пример того, какие значения использовать для «традиционного альфа-смешивания», см. this answer.

+0

Спасибо за ваш ответ и ссылки. Но у меня есть еще один вопрос (и этот вопрос может быть глупым, но я хочу убедиться, что это понимаю), заполнив структуру 'D3D11_RENDER_TARGET_BLEND_DESC' ... Я просто описываю, как уравнение смешивания выглядит правильно? –

+0

@Soon_to_be_code_master Правильно - при заполнении элементов структуры используйте их (в качестве члена 'D3D11_BLEND_DESC') при вызове [' CreateBlendState'] (https://msdn.microsoft.com/en-us/library /windows/desktop/ff476500(v=vs.85).aspx), вы получите объект состояния смешения, который представляет уравнение, которое вы описали на основе структуры. Когда вы применяете это состояние смешивания, используя ['OMSetBlendState'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ff476462 (v = vs.85) .aspx), GPU будет использовать уравнение для смешивания при последующих обратных вызовах. – MooseBoys

Смежные вопросы