アプリ版:「スタンプのみでお礼する」機能のリリースについて

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のものを表示できないのでしょうか?

なにぶん初心者で見当外れのことを言っているかも知れませんが、ご教授をお願いいたします。

A 回答 (1件)

質問文を全て読んだわけではないので、そこの所ご了承下さい。



>三角形ポリゴンにテクスチャを貼り付けて2Dのような表現をする場合、必ずこのようにウィンドウに合わせた座標になる(する?)のでしょうか?
はい、その通りです。
D3DFVF_XYZRHWを指定するとそうなります。

>書籍には3Dから2Dに変換する式などがありましたが
ワールド→ビュー→射影変換の三工程を指してるのでしたら、例え3Dゲームでも必要な変換工程です。
なので、通常ここを避ける事は出来ません。
避ける手段としてD3DFVF_XYZRHWがあります。


D3DFVF_XYZRHWを指定したまま、座標を-1.0~1.0fで扱いたい場合は
まずウィンドウ作成時のクライアント座標を取得して下さい。
そして、例えばクライアント座標が640*480とした時
x=-0.6fと同等の座標を「0.4*320」で求める事ができます。
(0.4=-0.6+1)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!