0

Directx 9 を使用して C++ で小さなゲームを作成しています。いくつかのチュートリアルを読んで、スプライト オブジェクトを描画して移動することができます。しかし、回転させたいと思います。

void D3DGraphics::DrawSprite(LPDIRECT3DTEXTURE9 &texture,ID3DXSprite* pSprite, D3DXVECTOR3* pos, D3DXVECTOR3* dim ){

pDevice->Clear( 0,NULL,D3DCLEAR_STENCIL,D3DCOLOR_XRGB(0,0,0),0.0f,0 );

D3DXMATRIX matrix;
D3DXMatrixRotationX(&matrix, 0.05f);

pSprite->Begin(D3DXSPRITE_ALPHABLEND);


    hresult= pSprite->SetTransform(&matrix);

    hresult= pSprite->Draw(texture, NULL, dim, pos, 0xFFFFFFFF);


pSprite->End();

}

settransform の部分を削除すると、完全に機能します。hresult をチェックしたところ、S_OK が返されました。

4

2 に答える 2

0

スプライトは通常2Dテクスチャが付属しており、ビルボーディングに使用されるため、スプライトを回転させるのは意味がないと思います。X軸を中心に回転させると、画像がX軸を中心に反転するようになります。希望する効果が得られません。Z軸を中心に回転させてみました。テクスチャは通常XOY平面上にあるため、これはうまく機能します。

回転するボールを作りたいなら、3Dメッシュを使ってみませんか?スプライトはこのリクエストには適していません。

于 2012-11-29T01:21:48.067 に答える
0

主な問題は、2D ユースケースに 3D 変換を使用しようとすることだと思います。マトリックスのD3DXMatrixTransformation2D( doc ) を操作してみてください。しかし、追加の問題があります。名前 dim は次元を表すと思いますが、Draw()( doc ) のこのパラメーターは、サイズではなくスプライトの中心を設定します。最後に、ステンシルバッファを使用せずにフルスクリーンでクリアすると、不必要にコストがかかりますが、他のコードはわかりません。それが役立つことを願っています:)

于 2012-11-28T10:36:28.380 に答える