DrawPrimitivesでVertex描画

ここの解説が超わかりやすい。 http://www.atelier-blue.com/program/mdirectx/3d/3d01-08.htm
VisualStudio2008(C#3.0)だと微妙に関数/アクセサ名が違うのがあって、調べながらちょっとずつ変えながらやってる

とりあえず三角形出した
Direct3D study

using System;
using System.Windows.Forms;
using System.Drawing;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
using System.Threading;

namespace D3DTest
{
    public class D3dForm : Form
    {
        private Device device;
        private PresentParameters presentParam;
        private VertexBuffer vertexBuf;

        public D3dForm() : base()
        {

            FormBorderStyle = FormBorderStyle.FixedSingle;
            MaximizeBox = false;
            Text = "D3D Test";
            PresentParameters pp = new PresentParameters();
        }

        public bool dx_init()
        {
            try
            {
                presentParam = new PresentParameters();
                presentParam.Windowed = true;
                presentParam.SwapEffect = SwapEffect.Discard;
                device = new Device(0, DeviceType.Hardware, this.Handle, 
                    CreateFlags.SoftwareVertexProcessing, // softwareで頂点処理
                    presentParam);
                createVertex();
                return true;
            }
            catch(Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
                return false;
            }
        }

        private void resetDevice()
        {
            int device_state;
            if (!device.CheckCooperativeLevel(out device_state))
            {
                switch (device_state)
                {
                    case (int)ResultCode.DeviceLost:
                        Thread.Sleep(10);
                        break;
                    case (int)ResultCode.DeviceNotReset:
                        device.Reset(presentParam);
                        break;
                }
            }
        }

        public void createVertex()
        {
            vertexBuf = new VertexBuffer(typeof(CustomVertex.TransformedColored), // 色つき
                3, device, 0, CustomVertex.TransformedColored.Format, Pool.Managed); // 3点、プール自動管理
            GraphicsStream gs = vertexBuf.Lock(0, 0, 0); // 全体ロック、フラグとりあえず0
            CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[3];

            verts[0].X = 150; verts[0].Y = 50; verts[0].Z = 0.5f; verts[0].Rhw = 1;
            verts[0].Color = System.Drawing.Color.Aqua.ToArgb();
            verts[1].X = 250; verts[1].Y = 250; verts[1].Z = 0.5f; verts[1].Rhw = 1;
            verts[1].Color = System.Drawing.Color.Brown.ToArgb();
            verts[2].X = 50; verts[2].Y = 250; verts[2].Z = 0.5f; verts[2].Rhw = 1;
            verts[2].Color = System.Drawing.Color.LightPink.ToArgb();

            gs.Write(verts);
            vertexBuf.Unlock();
        }

        public void Render()
        {
            if (device == null) return;
            if (WindowState == FormWindowState.Minimized) return;
            device.Clear(ClearFlags.Target, Color.AliceBlue, 1.0f, 0);
            device.BeginScene();
            // 描画処理            
            device.SetStreamSource(0, vertexBuf, 0);
            device.VertexFormat = CustomVertex.TransformedColored.Format;
            device.DrawPrimitives(PrimitiveType.TriangleFan, 0, 1); // 型、vertex開始点、個数

            device.EndScene();
            try
            {
                device.Present(); // 画面更新 (front/back bufferの切り替え)
            }
            catch (DeviceLostException ex)
            {
                Console.Error.WriteLine(ex.Message);
                resetDevice();
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
            }
        }

    }

    class Program
    {
        public static void Main()
        {
            using (D3dForm form = new D3dForm())
            {
                form.MinimumSize = new Size(60, 60);
                form.ClientSize = new Size(800, 600);
                form.Show();
                if (!form.dx_init())
                {
                    MessageBox.Show("Direct3D初期化失敗", "Error");
                    return;
                }
                form.Show();
                while (form.Created)
                {
                    Application.DoEvents();
                    form.Render();
                }
            }
        }

    }
}