どうでもいい修正
前
dev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
後
dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
※前後でもとの設定に戻す処理あり。
まず、非想天則じゃ明らかにずっとアルファブレンドはONになってるので省略。で、SrcBlendに設定されているD3DBLEND_SRCALPHAですが、死兆星画像
これ、なんかいろいろ探ってみてもアルファ情報らしきものは見つかりません。ということですべてのピクセルでα=1となり、DestBlendがD3DBLEND_ONEになっていることより
dest <= src * 1.0 + dest + 1.0
加算合成ですね。ということで全く意味が無いのでD3DRS_SRCBLENDをD3DBLEND_ONEにしました。ほんとどうでもいいですね。加算合成については絵師の人はよく知ってそうだし面倒なので説明しません。
まあ普通はこうですね。
dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
ブレンディング係数はこれから描く画像のアルファ値と(1-それ)です。アルファが30%なら
dest <= src * 30% + dest * (100% - 70%)
srcとdestは筆と画用紙です。これをRGBそれぞれに行います。まあこういう空欄に演算子や変数や定数を入れていく形式の固定機能パイプラインもおしまいなのだろうか…。