Color Cone

カラーコーンをプログラムで生成します。

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

プログラムの説明

  1. カラーコーンのメッシュをプログラムで生成して描画します。
    プロジェクトは自動生成した Windows 8.1 3D(XAML 無し)をベースにします。
    Windows 8.1 3D のプロジェクト を参照して構築して下さい。
    プログラムが解りやすいように修正箇所を最小限にとどめ、ファイルの名前や領域の名前(cubeVerticesなど)は、そのまま使います。
    またコーンの色は、プログラムで適当に設定するので、先頭の画像とは異なります。
    プロジェクトに組み込まれている2D描画は必要無いのですが、害にはならないのでそのまま残すことにします。
  2. Content\Sample3DSceneRenderer.cpp のソースコードを修正します。
    KAKU はコーンの角の数で、19 ぐらいに設定すると角がとれてかなり滑らかになります。
    この値を変更して、描画してみて下さい。
    #define  KAKU  19  // (pyramid の角の数+1)
    
  3. 生成したコーンは、最初のモデルに比べて大きいようで画面からはみ出します。
    そこでカメラを引いて大きさを調整します。
        //static const XMVECTORF32 eye = { 0.0f, 0.7f, 1.5f, 0.0f };
        static const XMVECTORF32 eye = { 0.0f, 0.7f, 4.0f, 0.0f };
    
  4. モデルの座標と色の計算です。
    「static const VertexPositionColor cubeVertices[] = { ... }」 を削除して置き換えて下さい。
    .pos がコーンの座標で .color が頂点の色です。
    .color は int slice の値を使って適当に計算しています。
    綺麗な色模様になるように工夫してみて下さい。
        static VertexPositionColor cubeVertices[KAKU*2];
        float fn = KAKU-1;
        for(int slice=0; slice<KAKU; slice++)
        {   float v = (float)slice/(float)(KAKU-1);
            float theta = v * 3.14f * 2;
            cubeVertices[2*slice+0].pos = XMFLOAT3( sinf(theta),-1.0f, cosf(theta) );
            cubeVertices[2 * slice + 0].color = XMFLOAT3(slice/fn, 1.0-slice/fn, 0.6f);
            cubeVertices[2*slice+1].pos = XMFLOAT3( 0.0f, 1.0f, 0.0f );
            cubeVertices[2 * slice + 1].color = XMFLOAT3(slice/fn, 1.0-slice/fn, 0.6f);
        }
    
  5. 頂点 Index の定義です。
    「static const unsigned short cubeIndices [] = { ... }」 を削除して置き換えて下さい。
    三角ポリゴンを組み合わせてコーンを作成します。
        static unsigned short cubeIndices[KAKU*6];
        for(int slice=0; slice<(KAKU-1); slice++)
        {   cubeIndices[3*slice+0] = slice*2+0;
            cubeIndices[3*slice+1] = slice*2+1;
            cubeIndices[3*slice+2] = slice*2+2;
            cubeIndices[3*(KAKU+slice)+0] = slice*2+3;
            cubeIndices[3*(KAKU+slice)+1] = slice*2+2;
            cubeIndices[3*(KAKU+slice)+2] = slice*2+1;
        }
    
  6. コンパイルして実行すると、コーンが回転しながら描画されます。
    コーンの角の数や色を変更して描画してみて下さい。

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