Direct3D 11にしたことで出てきた問題1
Direct3D 9と11で同じマップでスクリーンショットを撮ったところ
下図のように結果が異なった。
下記の記事によると、
この違いはDirect3D 11を使った場合に発生する問題のようだ。
SaveDrawScreenToPNG関数について
https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4079
下図は、Direct3D 11の画像をPhotoshopで拡大したもの。
背景の白くなっているところを見ると、透過していることが分かる。
DXライブラリでは
DirectX11 を使用する環境では裏画面はアルファチャンネル付きの画像となっている。
アルファチャンネル付きの画像に対して
半透明のものを通常のアルファブレンドで描画すると計算上意図した結果が得られない。
試練の洞窟の画像は、png形式でアルファチャンネル付きの画像である。
マップ背景のレイヤー1の最初(最奥)に描画する画像で
今回のように「透過色として指定した色が使われている」画像を
DrawGraph系の関数の引数:transFlag = TRUEで透過すると
裏画面自体がアルファチャンネル付きの画像となっているため
そのまま透過してしまう。
このため、
「マップ背景のレイヤー1の最初(最奥)に描画する画像は透過しない」
ようにする。
なお、上図のミクのステータス部分のアルファブレンドの結果が異なるのは、
「通常のアルファブレンドで描画すると計算上意図した結果が得られない」
という方で
そっちは乗算済みアルファを使うことで解決するらしい。
<乗算済みアルファのすすめ>
https://dxlib.xsrv.jp/lecture/PremulAlpha/PremulAlpha.html
乗算済みアルファについての記事は、また後日
コメント
このブログの新着コメントをRSSリーダに登録する為のxml