タクティクスオウガのようなクォータービューのMAPを描画するために、
DirectX側にて正射影変換を行っています。
DirectX側が透視図法によって描画する場合、
特に問題なくBISHAMONエフェクトとの前後関係をコントロール出来たのですが、
正射影時はBISHAMONエフェクトをモデルの前に描画出来ず、
必ずモデルの後面にて描画されてしまいます。
BISHAMONを使用するにあたり、基本的なところだとは思いますが
試行錯誤してみましたが、解決の糸口が見つかりませんでした。。
どのように設定すればよいのか、何卒ご教示の程、よろしくお願いいたします。
【実現したい内容】
DirectX側が正射影変換でモデルを描画する際、
モデルの前面にBISHAMONエフェクトを描画させたい。
【ソースコード】
■DirectX側:正射影変換
D3DXMatrixPerspectiveFovLH(&m_proj, D3DXToRadian(45.0f), aspect, zn, zf);
上述の透視図法の式を、下記にて正射影に直しています。
そもそも透視図法⇒正射影への書き換え方が間違っていたら申し訳ございません。
(参考にしたブログ:http://d.hatena.ne.jp/erio_nk/20081004/1223055284)
// ビューポートの取得
D3DVIEWPORT9 vp;
aif(FAILED(pD3DDevice->GetViewport(&vp))) {
return;
}
// アスペクト比の計算
float aspect;
aspect = (float)vp.Width / (float)vp.Height;
float zn = 1.0f;
float zf = 1000.0f;
/* 「* 50.0f」をつけないと、画面いっぱいにモデルが表示されてしまうため、
暫定的に設定しています。(怪しい部分です)*/
float near_h = zn * tan(D3DXToRadian(45.0f)*0.5f) * 2.0f * 50.0f;
float near_w = near_h * aspect;
// 射影行列の初期化
D3DXMatrixIdentity(&m_proj);
// 射影行列の設定
D3DXMatrixOrthoLH(&m_proj, near_w, near_h, zn, zf);
// マトリックスをレンダリングパイプラインに設定
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj);
■BISHAMON側
BISHAMON側は以下二つのように、試してみましたが駄目でした。(値の変更も試しました)
(透視図法)
projection.perspectivefov_r(40, 4.f/3.f, 0.1f, 1000);
■BISHAMON側
(正射影)
p.orthographic(0, width, 0, height, -100, 100);
【当環境で試した内容】
下記、BISHAMON側ではadd_translate関数でエフェクトの座標を調整して試した結果です。
?「モデル側(DirectX側):透視図法」+「エフェクト側(BISHAMON側):正射影」では、
エフェクトをモデルの前面に描画可能ですが、モデルをエフェクトの前面には出来ませんでした。
?「モデル側:正射影」+「エフェクト:正射影」では、
エフェクトをモデルの前に描画出来ませんでした。
?「モデル側:透視図法」+「エフェクト:透視図法」では、
モデルおよびエフェクトの前後関係を調整可能です。
?「モデル側:正射影」+「エフェクト:透視図法」では、
エフェクトをモデルの前に描画できませんでした。
上記?〜?より、前面に表示される優先度は、
「正射影(モデル)>正射影(エフェクト)>透視図法(モデル及びエフェクト)」
となっているようでした。
長くなって申し訳ございません。
他に必要な情報があれば随時展開いたしますので言ってください。
以上、よろしくお願いいたします。