時間が止まったようなエフェクト
テレビ番組やアニメ、ゲームで見かける時間が止まったようなエフェクトを、DirectXのアルファブレンドを使って実現する方法を紹介する。
このエフェクトを実現するための、アルファブレンドの計算式は以下のようになる。
aはアルファ値、srcは転送元、dstは転送先である。
結果 = dst * RGBA(a,a,a,a) - src * RGBA(a,a,a,a)
これをDirectXで実現した場合、コードは以下のようになる。
pDevはIDirect3DDevice9のポインタ型である。
pDev->SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_REVSUBTRACT ); // 転送元 - 転送先 pDev->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); // 転送元のα値を考慮 pDev->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_DESTALPHA ); // 転送元のα値を考慮