DirectX9で2Dの質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
bitter_orange

DirectX9で2Dの質問です。

#1

投稿記事 by bitter_orange » 16年前

DirecX9.0cとC言語で現在シューティングゲームを制作しているのですが、画像が回転しません。
具体的には当たり判定を回転させたいと思っております。
D3DXMatrixRotationX()関数を使用しているのですが、画像が表示されなくなってしまいます。
D3DXMatrixRotationX()関数の部分をコメント分にすると、回転はしませんが表示されます。
OSは[Windows Vista]で開発環境は[Microsoft Visual C++ 2008 Express Edition]です。
プログラムは該当場所と思われる部分のプログラムのみです。
LPDIRECT3DDEVICE9 D3DDevice;
LPD3DXSPRITE D3DXSprite;
LPDIRECT3DTEXTURE9 tex;
とグローバルで定義してあり初期化等してあります。

VOID Render_T(VOID);

HRESULT Render_O(VOID)
{
// シーンの描画開始
	if(SUCCEEDED(D3DDevice->BeginScene()))
	{[pre]
		// シーンの描画開始(スプライトの描画)
		D3DXSprite->Begin(D3DXSPRITE_ALPHABLEND);
                // 下の関数へ
		Render_T();
	        // シーンの描画終了(スプライトの描画)
	        D3DXSprite->End();
	        // シーンの描画終了
	        D3DDevice->EndScene();
        }
return D3DDevice->Present( NULL, NULL, NULL, NULL);[/pre]
}

VOID Render_T(VOID)
{
D3DXMATRIX mr;
	D3DXVECTOR3 pos(120.0F,410.0F,0.0F);
	static FLOAT counter = 0;
	FLOAT rot = counter * 3.14F / 180.0F;

	counter += 1;
	D3DXMatrixRotationY(&mr, D3DXToRadian(rot));
	D3DXSprite->SetTransform(&mr);
	D3DXSprite->Draw(tex, NULL, NULL, &pos, D3DCOLOR_XRGB(255,255,255));
}

とプログラミングしておりますがD3DXMatrixRotationY関数の使い方が間違っているのでしょうか?
それともこの部分以外が違っているのでしょうか?

何か他にもミスがあったらご指摘お願いします。

よろしくお願いします。

御津凪

Re:DirectX9で2Dの質問です。

#2

投稿記事 by 御津凪 » 16年前

質問の冒頭部分(3DXMatrixRotationX) と文末部分(3DXMatrixRotationY) が矛盾しているようですが…。

D3DXMatrixRotationZ を試してみたでしょうか?

DirectX では常に 3D 座標空間を持つので、(X,Y)の二次元上で回転するにはZ軸で回転する必要があります。

それと、D3DXToRadian には角度を入れるので、
counter * 3.14F / 180.0F では正しい回転にはならないと思います。

それでもまだ色々と問題があるので、一度下記のページを読むと良いでしょう。

http://marupeke296.com/DXG_No41_ID3DXSprite.html

bitter_orange

Re:DirectX9で2Dの質問です。

#3

投稿記事 by bitter_orange » 16年前

ご返信ありがとうございます。

3DXMatrixRotationXと3DXMatrixRotationYはタイプミスです。紛らわしいことをしてすみません。
D3DXToRadianは調べたら[3DXMatrixRotationZ(&... , D3DX_PI * x / 180)]で必要なかったですね。

プログラムですが、D3DXMatrixRotationZと_41及び_42(D3DXMatrixTranslation)を組み合わせることにより、
表示されるようになり回転もするようになりました。ありがとうございます。
しかし、テクスチャーの原点(左上)の座標を軸に回転してしまい、特定の位置で回転し続けるということができませんでした。
教えて頂いたサイトを見てもこれはよくわかりませんでした。

できれば、四聖龍神録Plusのあたり判定のように特定の位置で回転させたいのですがどのようにすればよいのでしょうか?

お願いします。

御津凪

Re:DirectX9で2Dの質問です。

#4

投稿記事 by 御津凪 » 16年前

ID3DXSprite::Draw の引数は確認しましたか?

これの第3引数に中心位置を渡すことで可能です。
ここをスプライトの中心座標にすることで、そこを中心に回転します。
(基点はスプライトの左上です。)

bitter_orange

Re:DirectX9で2Dの質問です。

#5

投稿記事 by bitter_orange » 16年前

再びご返信ありがとうございます。

何度も試してみたら、画像のサイズを勘違いして中心のX,Y座標を違う場所にしているという単純なミスでした。

御津凪さん何度も本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る