六面体を回転しながら描画する

C# DirectX で頂点座標を配列で定義して、六面体を回転しながら描画します。

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

プロジェクトの設定

  1. このプロジェクトは「四面体を回転しながら描画する」に準じます。
    詳細は 四面体を回転しながら描画する を参照して下さい。
  2. 六面体(長方体)の頂点座標を設定すのは結構面倒なので、二次元配列で定義することにします。
        float[,]    vt = new float[14, 3]
        { { -10.0f, 7.0f, 5.0f },  { 10.0f, -7.0f, 5.0f },  { 10.0f, 7.0f, 5.0f},     { 10.0f, 7.0f, -5.0f },
          { -10.0f, 7.0f, 5.0f },  { -10.0f, 7.0f, -5.0f }, { -10.0f, -7.0f, -5.0f }, { 10.0f, 7.0f, -5.0f },
          { 10.0f, -7.0f, -5.0f }, { 10.0f, -7.0f, 5.0f },  { -10.0f, -7.0f, -5.0f }, { -10.0f, -7.0f, 5.0f },
          { -10.0f, 7.0f, 5.0f },  { 10.0f, -7.0f, 5.0f } };
        
  3. 六面体の頂点の色も配列で定義してみましょう。
    色の設定(Color) は int で宣言されています。
    座標と色はページ先頭の画像を参照して下さい。
        int[] cor = new int[14]
        {  (int)0xff8080, (int)0xff8080, (int)0xff8080, (int)0xffff80, (int)0xffff80, (int)0xffff80, (int)0x80ff80, 
           (int)0x80ff80, (int)0x80ff80, (int)0x80ffff, (int)0x80ffff, (int)0x80ffff, (int)0x8080ff, (int)0x8080ff };
        
  4. プログラムは「四面体を回転しながら描画する」に準じます。
    各自で作成して下さい。

各面に色を設定する

  1. 立方体の各面は、三角形を組み合わせた四角形に異なる色を設定して定義します。
    立方体の六個の面を三次元配列で定義しました。
        //前面赤, 右側面青, 裏面黄, 左側面緑, 上面白, 下面紫
        float[, ,] vt = new float[6, 4, 3]
        { { { -10, -10,  10 }, {  10, -10,  10 }, { -10,  10,  10 }, {  10,  10,  10 } },
          { {  10, -10,  10 }, {  10, -10, -10 }, {  10,  10,  10 }, {  10,  10, -10 } },
          { { -10,  10,  10 }, { -10,  10, -10 }, { -10, -10,  10 }, { -10, -10, -10 } },
          { { -10,  10, -10 }, {  10,  10, -10 }, { -10, -10, -10 }, {  10, -10, -10 } },
          { {  10,  10, -10 }, { -10,  10, -10 }, {  10,  10,  10 }, { -10,  10,  10 } },
          { { -10, -10, -10 }, {  10, -10, -10 }, { -10, -10,  10 }, {  10, -10,  10 } },
        };
        
  2. 各面の色も配列(int)で定義します。
        int[] cor = new int[6]
        { (int)0xff0000, (int)0x00ff00, (int)0x0000ff, (int)0xffff00, (int)0xffffff, (int)0xff00ff };
        
  3. VertexBuffer は矩形を描画するのに必要な4頂点で生成します。
        public void OnCreateDevice(object sender, EventArgs e)
        {
            Device dev = (Device)sender;
            // VertexBuffer を生成
            vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 4, dev, 0,
                                            CustomVertex.PositionColored.Format, Pool.Default);
        }
        
  4. 六個の面を描画するソースコードです。
    SetBuffer() で VertexBuffer に矩形を設定して描画します。
    この関数は各自で作成して下さい。
        for (int i = 0; i <6; i++)
        {
            SetBuffer(vertexBuffer, i);
            device.SetStreamSource(0, vertexBuffer, 0);
            device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
        }
        

超初心者のプログラム入門(C# Frame Work)