Win10 Base

DirectX Windows10 のベースプロジェクトです。

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

Cube を外したプロジェクト

  1. DirectX 11 アプリ(ユニバーサル Windows) からカラーキューブを外したプロジェクトを作成します。
    2015/10/08 以降は Windows10 & Visual Studio Community 2015 の環境で開発します。
    このプロジェクトは、X-FILE や OBJ モデルなどカラーキューブ以外のモデルを描画するときのベースとして使います。
    DirectX 11 アプリ(ユニバーサル Windows) のプロジェクトを構築して下さい。
    構築直後は赤色の下線でエラーが指摘されていますが、ヘッダーファイルの読み込みが完了するとエラーは消えます。
    またはメニューバーの[ビルド]からコンパイルするとエラーは消えます。
    コンパイル&実行してカラーキューブが回転しながら描画されるのを確認して下さい。
  2. カラーキューブは Sample3DSceneRenderer Class で描画されます。
    Sample3DSceneRenderer.cpp の CreateDeviceDependentResources() 関数でカラーキューブが作成されます。
    キューブ以外のモデルを使用するときは「// 両方のシェーダーの読み込みが完了したら、メッシュを作成します。」 以降のソースを削除して下さい。
    関数最後の m_loadingComplete = true; がモデルの準備が完了したフラグです。
        // キューブが読み込まれたら、オブジェクトを描画する準備が完了します。
        createCubeTask.then([this] () {
            m_loadingComplete = true;
        });
    }
    
    このフラグが設定されないと描画関係の処理が実行されません。
    シェーダーの読み込みやモデルの作成はタスクで実行されます。
    関数を実行した(呼び出した)からと言って「処理が終わった」わけではありません。
    この辺がストアアプリのプログラムで苦労するところです。
  3. Sample3DSceneRenderer.h の次の領域がモデルを設定する領域です。
    m_constantBufferData; にはモデルの回転情報などを格納します。
            Microsoft::WRL::ComPtr<ID3D11Buffer>        m_vertexBuffer;
            Microsoft::WRL::ComPtr<ID3D11Buffer>        m_indexBuffer;
            ModelViewProjectionConstantBuffer   m_constantBufferData;
            uint32  m_indexCount;
    
  4. シェーダーはモデルの種類によって入れ替えなければなりません。
    また vertexDesc [] の 定義も修正して下さい。
    例えば「頂点座標+法線」のモデルでは次のように修正します。
            static const D3D11_INPUT_ELEMENT_DESC vertexDesc [] =
            {
                { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
                { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
            };
    
    また「頂点座標+法線+色」のモデルでは次のようになります。
            static const D3D11_INPUT_ELEMENT_DESC vertexDesc [] =
            {
                { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0,  0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
                { "NORMAL",   0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
                { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 }, 
            };
    
  5. この状態でコンパイル&実行すると、水色の画面に FPS だけが描画されます。
    X-FILE や OBJ モデルを描画するときは m_vertexBuffer, m_indexBuffer, m_indexCount にモデルを設定します。

空のベースプロジェクト

  1. Win10 Cube を元に「Windows10(Store App) 空のベースプロジェクト」を作成します。
    空のベースプロジェクトは Windows10 DirectX を開発するとき、Cube を外したプロジェクトや Win10 Template と共にテンプレートとして使います。
    ☆DirectX Windows8.1 で作成したベースプロジェクトは下記のページを参照して下さい。
    Windows8.1 のプロジェクトは Windows10 でもそのまま使うことが出来るようです。
    この後 Windows10 の空のベースプロジェクトを説明しますが Windows8.1 のものを流用していただいても構いません。
  2. それでは Windows10 空のベースプロジェクトの作成に付いて説明します。
    DirectX 11 アプリ(ユニバーサル Windows) のプロジェクトを構築して下さい。
    コンパイル&実行してカラーキューブが回転しながら描画されるのを確認して下さい。
  3. App1Main.h, App1Main.cpp から m_sceneRenderer が使われている行を編集して下さい。
    削除しても良いのですが、モデルの追加に備えてコメントアウトで残しておくのが良いようです。
    カラーキューブが無くなって FPS が表示されるのを確認して下さい。
  4. App1Main.h, App1Main.cpp から m_fpsTextRenderer が使われている行を編集して下さい。
    削除しても良いのですが、モデルの追加に備えてコメントアウトで残しておくのが良いようです。
    m_sceneRenderer と m_fpsTextRenderer をコメントアウトすると空のウインドウが表示されます。
  5. m_sceneRenderer, m_fpsTextRenderer をコメントアウトすると Content\ に格納されているファイルは不要になります。
    ソリューションエクスプローラで Content\ の中のファイルを全て削除して下さい。
    #include で取り込んでいるヘッダーファイルも削除します。
    但し、これらのファイルは残しておいても実行には差し支えありません。
    ☆これで Windows10 DirextX(Store App) のベースプロジェクトが完成です。
    実行すると空のウインドウ(ウインドウの枠だけ)が表示されます。
    App1\Content\Sample3DSceneRenderer.cpp
    App1\Content\Sample3DSceneRenderer.h
    App1\Content\SampleFpsTextRenderer.cpp
    App1\Content\SampleFpsTextRenderer.h
    App1\Content\SamplePixelShader.hlsl
    App1\Content\SampleVertexShader.hlsl
    App1\Content\ShaderStructures.h
  6. 3Dのプロジェクト, 2Dのプロジェクトには、XAML が組み込まれているプロジェクトと組み込まれていないプロジェクトがあります。
    XAML のプロジェクトを使うと C# や C++ と同様にツールを貼り付けることが出来るようです。
  7. XAML のプロジェクトでは Tracking 関係の関数が使われています。
    これらの関数はマウスの左ボタンを押しながら操作したときに呼び出されます。
    Tracking 関数は DirectXPage.xaml.cpp から呼び出されます。
        m_main->StartTracking();
        if (m_main->IsTracking())
        {
            m_main->TrackingUpdate(e->CurrentPoint->Position.X);
        }
        m_main->StopTracking();
    
  8. Sample3DSceneRenderer には XAML に関係なく Tracking 関係の関数が定義されています。
    XAML が使われていないプロジェクトでは、呼び出されることは無いようです。
    void Sample3DSceneRenderer::StartTracking()
    {   m_tracking = true;  }
    
    // 追跡時に、出力画面の幅方向を基準としてポインターの位置を追跡することにより、3D キューブを Y 軸に沿って回転させることができます。
    void Sample3DSceneRenderer::TrackingUpdate(float positionX)
    {   if (m_tracking)
        {   float radians = XM_2PI * 2.0f * positionX / m_deviceResources->GetOutputSize().Width;
            Rotate(radians);
        }
    }
    
    void Sample3DSceneRenderer::StopTracking()
    {   m_tracking = false;  }
    

超初心者のプログラム入門(DirectX Store)