DirectXにおける2Dと3Dの座標の違い
DirectXを使ったプログラミングの初心者で、Softbank Creativeの「シューティングゲームプログラミング」を使って勉強しています。
ライブラリの内容も関わってくるので少し分かりづらい質問ですが、2Dと3Dとで座標の指定の仕方が違うのがよく分かりません。
3Dでは、
D3DXMATRIX mat_view;
D3DXVECTOR3 vec_from=D3DXVECTOR3(0, 100, 0); D3DXVECTOR3 vec_lookat=D3DXVECTOR3(0, 0, 0); D3DXVECTOR3 vec_up=D3DXVECTOR3(0, 0, 1); D3DXMatrixLookAtLH(&mat_view, &vec_from, &vec_lookat, &vec_up);
device->SetTransform(D3DTS_VIEW, &mat_view);
D3DXMatrixOrthoLH(&mat_proj, 120, 90, 1, 1000);
device->SetTransform(D3DTS_PROJECTION, &mat_proj);
Graphics->SetLight(0, D3DLIGHT_DIRECTIONAL, -1.0f, -1.0f, -1.0f, 1000);
このあたりでカメラを設定し、画面端のx座標が±0.6になる……といったことを決めていましたが、
2Dでは
VERTEX vertex[4]={
{x, y, z, 1, diffuse, u, v},
{x, y+dy, z, 1, diffuse, u, v+dv},
{x+dx, y, z, 1, diffuse, u+du, v},
{x+dx, y+dy, z, 1, diffuse, u+du, v+dv}
};
device->SetFVF(D3DFVF_VERTEX);
device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, vertex, sizeof(VERTEX));
例えば四角形ポリゴンを描くときにこんな風に記述して、
このx,yにはウィンドウの座標が入っています。
SETFVFでD3DFVF_XYZRHWを設定することで直接2Dに持ってこれる、というようなことが調べて分かったのですが、
三角形ポリゴンにテクスチャを貼り付けて2Dのような表現をする場合、必ずこのようにウィンドウに合わせた座標になる(する?)のでしょうか?
つまり、3Dの時のように左端がx=-0.6……というような座標系で表現できないのでしょうか?
書籍には3Dから2Dに変換する式などがありましたが、このような変換をいちいち行わなくても最初から3Dの座標に2Dのものを表示できないのでしょうか?
なにぶん初心者で見当外れのことを言っているかも知れませんが、ご教授をお願いいたします。
お礼
無事、メモリリークが取れました。 ありがとうございます。(^_^)/
補足
なるほど、そうなんですか。 頑張ってRelease漏れを探します。