Basic Shapes

Win10 BasicShapes

球のモデルにテクスチャを張り付けて地球儀のように回転します。

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

プロジェクトの作成

  1. DirectX9 では自動的にモデルを生成する関数が備わっていました。
    所が DirectX Store Program ではこれが無くなりました。
    非常に残念に思っていたのですが、これに変わる Basic Shapes Class を見つけました。
    DirectX9 のモデルは「頂点+法線」で構成されていたのですが、Basic Shapes Class ではテクスチャ座標が追加されています。
    これを使えばテクスチャを張り付けたモデルを描画するのは簡単です。
  2. プログラムの作成は簡単なのですが Basic Shapes Class を始め、プロジェクトに組み込むファイルがかなり増えます。
    ファイル 説明
    Sample3DSceneRenderer.h Sample3DSceneRenderer のヘッダーファイル
    Sample3DSceneRenderer.cppモデル描画のプログラムファイル
    SampleFpsTextRenderer.h SampleFpsTextRenderer のヘッダーファイル
    SampleFpsTextRenderer.cppFPS 表示のプログラムファイル
    ShaderStructures.h シェーダのヘッダーファイル
    SamplePixelShader.hlsl ピクセルシェーダ
    SampleVertexShader.hlsl 頂点シェーダ
    BasicReaderWriter.h BasicReaderWriter のヘッダーファイル
    BasicReaderWriter.cpp DirectX 基本入出力のプログラムファイル
    TextureLoader.h TextureLoader のヘッダーファイル
    TextureLoader.cpp テクスチャ入力のプログラムファイル
    BasicShapes.h BasicShapes のヘッダーファイル
    BasicShapes.cpp 3Dモデルを作成するプログラムファイル
    BasicMath.h 三次元座標計算のヘッダーファイル
  3. Basic Shapes で生成されるモデルの頂点データの形式です。
        struct VertexPosition
        {
            DirectX::XMFLOAT3 pos;  // position
            DirectX::XMFLOAT3 norm; // surface normal vector
            DirectX::XMFLOAT2 tex;  // texture coordinate
        };
    

プログラムの説明

  1. DirectX 3Dのプログラムではモデルの作成(X-FILE の解析)が面倒なのですが、Basic Shapes Class を使うと非常に簡単です。
    ヘッダーファイルを取り込んで下さい。
    #include "TextureLoader.h"
    #include "BasicReaderWriter.h"
    #include "BasicShapes.h"
    
    立方体モデルを生成します。
            // CreateCube() でモデルを生成
            BasicShapes^ shapes = ref new BasicShapes(m_deviceResources->GetD3DDevice());
            shapes->CreateCube(
                &m_vertexBuffer, &m_indexBuffer, nullptr, &m_indexCount);
    
    球のモデルは次のようになります。
            // CreateSphere でモデルを生成
            BasicShapes^ shapes = ref new BasicShapes(m_deviceResources->GetD3DDevice());
            shapes->CreateSphere(
                &m_vertexBuffer, &m_indexBuffer, nullptr, &m_indexCount);
    
  2. これ以外にも幾つかのモデルが用意されています。
    BasicShapes.h を参照して下さい。
  3. モデルが生成出来たら、オブジェクトを描画する準備が完了します。
    後はテクスチャをロードするだけです。
    詳細はテクスチャモデルの描画を参照して下さい。
    	// モデルが生成出来たら、オブジェクトを描画する準備が完了します。
    	createCubeTask.then([this] () {
    		m_loadingComplete = true;
    	});
    
    	TextureLoader^ loader = ref new TextureLoader(m_deviceResources->GetD3DDevice());
    	loader->LoadTexture(L"earth.jpg", nullptr, &m_textureSRV);
    
  4. Basic Shapes Class で作成したモデルの描画はテクスチャの貼り付けなど面倒な処理が必要です。
    テクスチャが必要なければ Win10 Create Model を使うとプログラムは簡単です。
    DirectX Windows10 では Simple is Best の方針に従いテクスチャが不要のときは、こちらを使うようにしています。

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