Sprite で画像を回転する

DirectX の D3DXMatrixRotationZ で画像を回転しながら描画します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. [ファイル] [新規作成] [プロジェクト]から空のプロジェクト(Rotate)を作成して下さい。
    プロジェクト/既存項目の追加からプログラムファイルとヘッダファイルをプロジェクトに追加して下さい。
    Rotate.cpp は、プログラムの説明を参考にして作成して下さい。
    myd3d.h と myd3d.cpp は Object Class Library から取得して下さい。
    ファイル名 ファイルの説明
    Rotate.cpp 「プログラムの説明」を参考に作成して下さい
    myd3d.h MyD3D Object Class ヘッダファイル
    myd3d.cpp MyD3D Object Class プログラムファイル
  2. #define と #include と Global Area の定義です。
    タイマを使うので mmsystem.h を組み込んで winmm.lib をリンクする必要があるのですが、 これらの処理は MyD3D.h で行っているので、MyD3D.h を include するだけです。
    *myd3d が MyD3D Object Class の定義です。
    g_pSprite が Sprite Object の定義です。
    g_pTexture が Sprite Object で表示するテクスチャです。
    g_bActive はウインドウが Active 状態のフラグです。
    g_D3DPP は Device 設定のパラメータで、Window Size を変更しても Sprite Size が変わらないように設定するときに使用します。
    g_bLost は デバイスが消失したことを記録するフラグです。
    ImgFile が回転する画像で、適当なものを調達して来て下さい。
        #include    "MyD3D.h"
    
        // Global Area
        HINSTANCE               g_hInst     = NULL;
        HWND                    g_hWnd      = NULL;
        LPDIRECT3DDEVICE9       g_pDEV      = NULL;     // Direct3DDevice interface
        MyD3D                   *myd3d      = NULL;     // MyD3D Object Class
        LPD3DXSPRITE            g_pSprite   = NULL;     // Sprite Object 
        LPDIRECT3DTEXTURE9      g_pTexture  = NULL;     // Texture Object
        D3DPRESENT_PARAMETERS   g_D3DPP;                // Device Parameters
        bool                    g_bLost     = false;    // デバイスの消失フラグ
        bool                    g_bActive   = false;    // アクティブ状態
        char                    ImgFile[]   = "c:\\data\\test\\ffx2s.jpg";
        
  3. Sprite の画像を回転しながら描画する関数です。
    D3DXMatrixRotationZ() でZ軸を中心にして画像を回転します。
    D3DXMatrixTranslation() で画像をウインドウの中央に移動します。
    回転情報と移動情報を掛け合わせて Sprite に設定します。
    g_pSprite->Draw() で Sprite を描画します。
    &D3DXVECTOR3(256,128,0) は回転する画像の中心位置です。
    &D3DXVECTOR3(30,20,0) で試してみて下さい。
        HRESULT Draw(void)
        {   D3DXMATRIX      matWorld,matWork;
    
            if (!g_pDEV || !g_bActive)  return false;
            D3DXMatrixRotationZ(&matWorld,timeGetTime()/1000.0f);
            D3DXMatrixTranslation(&matWork,400.0f,300.0f,0.0f);
            matWorld= matWorld*matWork;
            g_pSprite->SetTransform(&matWorld);
            g_pDEV->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(150,150,150),1.0f,0);
            // シーンの描画開始
            if (SUCCEEDED(g_pDEV->BeginScene()))
            {   // シーンの描画(スプライトの描画)
                g_pSprite->Begin(0);
                g_pSprite->Draw(g_pTexture,NULL,&D3DXVECTOR3(256,128,0),NULL,0xffffffff);
                g_pSprite->End();
                // シーンの描画終了
                g_pDEV->EndScene();
            }
            // シーンの表示
            return g_pDEV->Present(NULL, NULL, NULL, NULL);
        }
        
  4. WndProc(), CleanupDXGraphics() はいつもと同じです。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(DirectX9 game program)