Direct 3D

Direct 3D のプロジェクト

自動生成した Windows8 の Direct3D のプロジェクトです。

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

プロジェクトの作成

  1. このページは Windows8 ストアアプリ(Metro Style)の DirectX プロジェクトです。
    Windows8(8.1)でもデスクトップモードで DirectX9 を動かすことが出来ます。
    デスクトップモード(Windows7 以前のプロジェクト)は下記のページを参照して下さい。
    超初心者のプログラム入門(DirectX9 game program)
    超初心者のプログラム入門(C#) から [C# DirectX Program]
  2. Microsoft は 2012/10/末 に新しいOSである Windows8 の発売を開始しました。 \(^o^)/
    ストアアプリ(Metro Style)のプログラムを作成するには、Windows8 に対応した専用の開発ソフトが必要です。
    私は Microsoft Visual Studio Express 2012 for Windows 8 を使っています。
    従来は Visual Studio だけでは動かず、DirectX のインストールも必要だったのですが、その必要は無いようです。
  3. プロジェクトを起動して、自動生成される Direct3D のプロジェクトをコンパイルしてみましょう。
    Windows8 のスタート画面から [Visual Studio for Windows 8] を起動します。
    [FILE] [New Project] から [Visual C++] を選択して、Direct3Dアプリケーションを選びます。

  4. 後は規定値で [OK] をクリックすると、プロジェクト(Direct3DApp1)が構築されます。
    シンプルなプロジェクトでは「ソリューションのディレクトリを作成(D)」のチェックを外す方がわかり易いでしょう。
    そのまま右三角アイコンでコンパイル&実行します。
    頂点に色を設定した立方体が回転しながら描画されます。
  5. 終了する(Windows マークのキーを押す)と Metro Style のスタート画面に戻ります。
    スタート画面に新しいタイル(アイコン画像)が追加されています。
    追加されたタイル(アイコン画像)をクリックすると先ほど実行した画面が表示されます。
  6. 確認が終われば、アンインストールして下さい。
    追加されたタイルを右クリックして、表示されたアンインストールアイコンを選択します。
    従来はアンインストールしても、レジストリなどにゴミが残っていましたが、Windows8 ではその心配は無いようです。
  7. 作成されたプロジェクトのフォルダ(Direct3DApp1)の中を確認して下さい。
    次のファイルは削除することが出来ます。
    削除した状態で Direct3DApp1.sln をダブルクリックで起動して、コンパイル&実行が出来ることを確かめて下さい。

プログラムの説明

  1. 立方体の頂点座標(8頂点)と色は CubeRenderer.cpp で定義されています。
    頂点座標の説明は 頂点座標の Index を使って BOX を描画する参照して下さい。
        auto createCubeTask = (createPSTask && createVSTask).then([this] ()
        {   VertexPositionColor cubeVertices[] = 
            {   {XMFLOAT3(-0.5f, -0.5f, -0.5f), XMFLOAT3(0.0f, 0.0f, 0.0f)},
                {XMFLOAT3(-0.5f, -0.5f,  0.5f), XMFLOAT3(0.0f, 0.0f, 1.0f)},
                {XMFLOAT3(-0.5f,  0.5f, -0.5f), XMFLOAT3(0.0f, 1.0f, 0.0f)},
                {XMFLOAT3(-0.5f,  0.5f,  0.5f), XMFLOAT3(0.0f, 1.0f, 1.0f)},
                {XMFLOAT3( 0.5f, -0.5f, -0.5f), XMFLOAT3(1.0f, 0.0f, 0.0f)},
                {XMFLOAT3( 0.5f, -0.5f,  0.5f), XMFLOAT3(1.0f, 0.0f, 1.0f)},
                {XMFLOAT3( 0.5f,  0.5f, -0.5f), XMFLOAT3(1.0f, 1.0f, 0.0f)},
                {XMFLOAT3( 0.5f,  0.5f,  0.5f), XMFLOAT3(1.0f, 1.0f, 1.0f)},
           };
      
           ・・・
    
  2. 三角形の頂点座標を組み合わせて立方体を定義します。
        unsigned short cubeIndices[] = 
        {   0,2,1, // -x
            1,2,3,
            4,5,6, // +x
            5,7,6,
            0,1,5, // -y
            0,5,4,
            2,6,7, // +y
            2,7,3,
            0,4,6, // -z
            0,6,2,
            1,3,7, // +z
            1,7,5,
        };
    
  3. Update() で回転座標を更新して、Render() メソッドで描画します。
    void CubeRenderer::Update(float timeTotal, float timeDelta)
    {
    	(void) timeDelta; // 未使用のパラメーター。
    
    	XMVECTOR eye = XMVectorSet(0.0f, 0.7f, 1.5f, 0.0f);
    	XMVECTOR at = XMVectorSet(0.0f, -0.1f, 0.0f, 0.0f);
    	XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
    
    	XMStoreFloat4x4(&m_constantBufferData.view, XMMatrixTranspose(XMMatrixLookAtRH(eye, at, up)));
    	XMStoreFloat4x4(&m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationY(timeTotal * XM_PIDIV4)));
    }
    
    void CubeRenderer::Render()
    {
        ・・・
    }
    
  4. main() やメッセージループは Direct3DApp1.cpp で定義されています。
    [Platform::MTAThread]
    int main(Platform::Array^)
    {
    	auto direct3DApplicationSource = ref new Direct3DApplicationSource();
    	CoreApplication::Run(direct3DApplicationSource);
    	return 0;
    }
    
    メッセージループです。
    void Direct3DApp1::Run()
    {
        BasicTimer^ timer = ref new BasicTimer();
        while (!m_windowClosed)
        {   if (m_windowVisible)
            {   timer->Update();
                CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
                m_renderer->Update(timer->Total, timer->Delta);
                m_renderer->Render();
                m_renderer->Present();
            }
            else
            {   CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
            }
        }
    }
    
  5. Microsoft は2013年秋に Windows8.1 へのバージョンアップを予定しています。
    バージョンアップに先だって 2013/07/24 から評価版をダウンロードして使ってみます。
    OSやバージョンの違いにより、多少画像や説明に違いが生じることをご了承下さい。

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