2008-09-15 4 views

ответ

2

Я не слишком много использовал Java, но, основываясь на white paper from 1984, это должно быть довольно простое отображение режимов смешивания визуализации.

Есть, конечно, больше того, что вы можете сделать, чем просто их, например, нормальное альфа-смешивание (SourceAlpha, InvSourceAlpha) или аддитив (один, один), чтобы назвать несколько. (я предполагаю, что вы спрашиваете о них именно потому, что вы переносите некоторые существующие функциональные возможности? В этой причине вы можете не заботиться о других комбинациях ...)

Во всяком случае, они предполагают BlendOperation С и AlphaBlendEnable является правда.

Ясно

SourceBlend = Zero 
DestinationBlend = Zero 

SourceBlend = One 
DestinationBlend = Zero 

В

SourceBlend = Zero 
DestinationBlend = One 

А над B

SourceBlend = One 
DestinationBlend = InvSourceAlpha 

В над

SourceBlend = InvDestinationAlpha 
DestinationBlend = One 

А в В

SourceBlend = DestinationAlpha 
DestinationBlend = One 

В в

SourceBlend = Zero 
DestinationBlend = SourceAlpha 

из Б

SourceBlend = InvDestinationAlpha 
DestinationBlend = Zero 

B OUT A

SourceBlend = Zero 
DestinationBlend = InvSourceAlpha 

вершине B

SourceBlend = DestinationAlpha 
DestinationBlend = InvSourceAlpha 

В вершине

SourceBlend = InvDestinationAlpha 
DestinationBlend = SourceAlpha 

XOR B

SourceBlend = InvDestinationAlpha 
DestinationBlend = InvSourceAlpha 

Цепной это является немного более сложным и требует либо несколько проходов или нескольких текстур входы в шейдер.

0

Когда я реализую состояния рендеринга для «A» (это краска исходного пиксельного цвета/альфа и игнорирует цвет пикселя назначения/альфа), Direct3D, похоже, не выполняет операцию правильно, если источник имеет альфа значение нуля. Вместо того, чтобы заполнять целевую область прозрачностью, я вижу, что целевая область остается неизменной. Однако, если я изменю значение альфа-источника на 1, целевая область станет «практически» прозрачной. Это происходит даже тогда, когда я отключу состояние отображения alphablending, поэтому я предполагаю, что это попытка оптимизации, которая на самом деле является ошибкой в ​​Direct3D.

За исключением ситуации, казалось бы, состояния рендеринга Кори являются правильными. Спасибо, Кори!

0

Одна вещь, чтобы проверить, чтобы убедиться альфа-тест выключен с

AlphaTestEnable = false 

Если на (вместе с чем-то вроде AlphaFunction = Большой и ReferenceAlpha = 0), четкие пиксели могут быть выброшены независимо от Настройка AlphaBlendEnable.

1

Для случая «A в B», не следует ли DestinationBlend быть нолем?

А в В

SourceBlend = DestinationAlpha 
DestinationBlend = Zero