Sample Brower で X-FILE を描画

Sample Brower で生成したプロジェクトで X-FILE(cone.x) を描画します。

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

プログラムの説明

  1. DirectX のプロジェクトは Sample Brower を使って生成する方法がお勧めです。
    Sample Brower から提供されるサンプルは、何も手を加えなくてもそのまま実行できます。
    Tiny のアニメーション などはその例です。
    ここでは Sample Brower を使って XFILE(cone.x) を描画する方法を説明します。
  2. [スタート] から [プログラム] [Microsoft DirectX] を選択して [DirectX Sample Browser] を実行して下さい。
    「SimpleSample」の「Install Project」をクリックすると、自動的に空のプロジェクトが構築されます。
    作成されたプロジェクトをそのままコンパイルして、空のウインドウが表示される事を確かめて下さい。
    エラーが発生するときや、正常に実行出来ないときは、残念ながら現在の構成は相性が悪いようです。
    詳細は「Tiny のアニメーション」を参照して下さい。
  3. 生成された SimpleSample から、次のファイルを残して削除して下さい。
    ・DXUT のフォルダー
    ・resource.h 削除可能
    ・SimpleSample.rc 削除可能
    ・SimpleSample_2010.sln
    ・SimpleSample_2010.vcproj
    次に下記のファイルを格納して下さい。
    ファイル名 説明
    SimpleSample.cpp X-FILE を描画
  4. cone.x を "C:\DATA\XFILE\" のフォルダーに格納して下さい。
    cone.x は「初心者のプログラム(DirectX10)/X-FILE(Cone.x) の頂点データを定義する」からダウンロード出来ます。
    cone.x 以外を使うときや別のフォルダーに格納するときは、次の行を修正して下さい。
    V_RETURN( g_Mesh.Create( pd3dDevice, L"C:\\DATA\\Model\\Cone.x" ) );
  5. SimpleSample_2010.vcproj から起動して下さい。
    X-FILE の描画は 虎のモデルを表示 などを参考にして下さい。
    リソースは使っていないので、次のファイルはプロジェクトから削除することが出来ます。
    ・resource.h
    ・SimpleSample.rc
  6. X-FILE の描画には CDXUTXFileMesh Class を使っています。
    このクラスは LPD3DXMESH をラップしたクラスで、X-FILE を簡単に扱うことが出来ます。
    詳細は \DXUT\Optional\SDKmesh.h(.cpp) で定義されているので、これを参照して下さい。
    もちろん従来と同様に、直接 LPD3DXMESH を使うことも出来ます。
    CDXUTXFileMesh              g_Mesh;                  // Mesh object
    
  7. Cone.x を入力するソースコードです。
    CDXUTXFileMesh Class を使うとメッシュのロードは一行だけです。
    tiger.x や Tiny.x も描画できるので、試してみて下さい。
    ただし、tiger.x には法線ベクトルが設定されていないので、真っ黒になります。
    また Tiny.x はモデルのサイズが大きいのでカメラを引いて下さい。
        // Load the mesh
        V_RETURN( g_Mesh.Create( pd3dDevice, L"C:\\DATA\\Model\\Cone.x" ) );
        //V_RETURN( g_Mesh.Create( pd3dDevice, L"C:\\DATA\\Model\\Tiger.x" ) );
        //V_RETURN( g_Mesh.Create( pd3dDevice, L"C:\\DATA\\Model\\Tiny.x" ) );
    
    CDXUTXFileMesh Class を使うと法線ベクトルの設定も簡単で、次の関数が用意されています。
    CDXUTXFileMesh::SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF )
    {    ・・・
    }
    
  8. OnFrameRender() で X-FILE を描画します。
    CDXUTXFileMesh Class を使うとメッシュの描画も簡単で、実質的に g_Mesh.Render() だけです。
    void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
    {
        HRESULT hr;
        pd3dDevice->SetTransform(D3DTS_WORLD, &(*g_Camera.GetWorldMatrix()));
        pd3dDevice->SetTransform(D3DTS_VIEW, &(*g_Camera.GetViewMatrix()));
        pd3dDevice->SetTransform(D3DTS_PROJECTION, &(*g_Camera.GetProjMatrix()));
    
        // Clear the render target and the zbuffer 
        V( pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB( 0, 45, 50, 70 ), 1.0f, 0 ) );
    
        // Render the scene
        if( SUCCEEDED( pd3dDevice->BeginScene() ) )
        {
            V( g_Mesh.Render( pd3dDevice ) );
            pd3dDevice->EndScene();
        }
    }
    
  9. マウスの左ボタンでワールド座標が回転します。
    マウスの右ボタンでカメラの座標が回転します。
    C# でも同様のプログラムを作成しています。
    超初心者のプログラム入門(C#)から Sample Brower で cone.x を描画 を参照して下さい。
    リンクがエラーになるときは「前田稔の超初心者のプログラム入門」から辿って下さい。

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

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