Редактировать: проблема решена! См. Конец сообщения.Режим «Экран» для Photoshop в DirectX
Как реализовать режим смешивания «Screen» из Photoshop в DirectX 8?
информация, я нашел на эту тему (http://www.ziggyware.com/readarticle.php?article_id=228):
Result = 1 – (1 – destination) * (1 – source) Result = 1 – (1 – source – destination + destination * source) Result = 1 – 1 + source + destination – destination * source Result = source + destination – destination * source Result = destination + source – source * destination Result = destination + source * (1 – destination)
Теперь, когда у нас есть математика разработана, мы просто должны установить режимы смешивания:
BlendOperation = Add DestinationBlend = One SourceBlend = InvDestColor
Я предполагаю, что состояния смешивания DirectX должны быть:
pD3DDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR);
Верно ли это? (У меня есть неправильный результат)
Photoshop Результат:
http://img192.imageshack.us/img192/7015/photoshopf.jpg
Мой результат в DirectX:
http://img193.imageshack.us/img193/2969/directx.jpg
Решение проблем: формула не учитывает ima ge alpha, чтобы исправить это, вам нужно сделать изображение фоном сплошным черным со 100% непрозрачностью
Проблема решена. Забыл добавить решение - изображение сверху должно быть без альфы с сплошным черным фоном. – kFk