Cone.x を中心に置いてトーラスが回転

Cone.x のメッシュを中心に置いて、トーラスが回転します。

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

プログラムの説明

  1. 複数のモデルを組み合わせて描画する方法です。
    Cone.x の描画は X_FILE Object Class を使います。
    トーラスは D3DXCreateTorus() で生成します。
    X_FILE Object Class を使うので X_FILE.h を取り込んで下さい。
    g_pMesh がトーラスのメッシュです。
    *cone が Cone.x のメッシュです。
        #include    "X_FILE.h"
    
        LPD3DXMESH              g_pMesh = NULL;
        X_FILE                  *cone  = NULL;      // X_file Object Class
        
  2. InitDevices() 関数でトーラスと Cone.x のメッシュを生成します。
    D3DXCreateTorus の 1.0f がリングの太さで、3.0f が外側のサイズで、32 が分割数です。
    マテリアルを設定して、光源を作成して下さい。
        //トーラスメッシュの生成
        D3DXCreateTorus(g_pDEV,1.0f,3.0f,32,32,&g_pMesh,NULL);
        cone= new X_FILE(g_pDEV,"cone.x");      // X_FILE Object Class
            ・・・
        //material にマテリアルを設定して下さい
        //light に光源を作成して下さい
        g_pDEV->SetMaterial(&material);
        g_pDEV->SetLight(0,&light);
        g_pDEV->LightEnable(0,TRUE);
        
  3. Draw() 関数では SetupMatrices() で描画環境を設定して、トーラスを回転しながら描画します。
    次に SetTransform(D3DTS_WORLD,&g_matWorld) で WORD 座標を標準値に戻します。
    g_matWorld は D3DXMatrixIdentity(&g_matWorld) で単位行列でクリアしています。
    これでトーラスだけを回転することが出来ます。
        void Draw(void)
        {
            //黒で塗りつぶして消去
            g_pDEV->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
            if (SUCCEEDED(g_pDEV->BeginScene()))
            {   //描画環境の設定
                SetupMatrices();
                g_pDEV->SetMaterial(&material);
                g_pMesh->DrawSubset(0);
                g_pDEV->SetTransform(D3DTS_WORLD,&g_matWorld);
                cone->Render();
                g_pDEV->EndScene();
            }
            g_pDEV->Present(NULL,NULL,NULL,NULL);
        }
        
  4. 描画環境を設定する SetupMatrices() 関数です。
        void  SetupMatrices(void)
        {   RECT            rect;
            D3DXMATRIX      matWorld;
            D3DXMATRIX      matView;
            D3DXMATRIX      matProj;
    
            GetClientRect(g_hWnd,&rect);
            //World 座標をY軸を中心に自動回転
            D3DXMatrixRotationY(&matWorld,timeGetTime()/1000.0f);
            g_pDEV->SetTransform(D3DTS_WORLD,&matWorld);
            //View 座標の設定
            D3DXMatrixLookAtLH(&matView,&ViewForm,
                           &D3DXVECTOR3(0.0f,0.0f,0.0f),&D3DXVECTOR3(0.0f,1.0f,0.0f));
            g_pDEV->SetTransform(D3DTS_VIEW,&matView);
            //透視変換の設定
            D3DXMatrixPerspectiveFovLH(&matProj,D3DXToRadian(45.0f),(float)rect.right/(float)rect.bottom,1,50);
            g_pDEV->SetTransform(D3DTS_PROJECTION,&matProj);
        }
        

【課題】

  1. 二個のモデルを用意して、地球の周りを月が回るように回転して下さい。
    地球が自転しているように、中央のモデルも自転して下さい。
  2. 三個のモデルを用意して、太陽と地球と月のように回転して下さい。

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

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

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