三角形回った

http://www.atelier-blue.com/program/mdirectx/3d/3d01-10.htm

くるくる
Direct3DDirect3DDirect3D

Macbookではハードウェアで頂点処理できないっぽい

                device = new Device(0, DeviceType.Hardware, this, 
                    CreateFlags.SoftwareVertexProcessing, // softwareで頂点処理
                    presentParam);


あと頂点形式をCustomVertex.PositionColoredじゃなくてCustomVertex.TransformedColordにしててMatrix変換が適応できなくて間違ってた。

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;
            MinimumSize = new Size(60, 60);
            MaximizeBox = false;
            Text = "D3D Test";
        }

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

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

        public void createVertex()
        {
            vertexBuf = new VertexBuffer(typeof(CustomVertex.PositionColored),
                3, device, 0, CustomVertex.PositionColored.Format, Pool.Managed); // 3点、プール自動管理
            CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[3];

            verts[0].Position = new Vector3(0, 2.0f, 0);
            verts[0].Color = System.Drawing.Color.LightPink.ToArgb();
            verts[1].Position = new Vector3(1.0f, 0, 0);
            verts[1].Color = System.Drawing.Color.Aqua.ToArgb();
            verts[2].Position = new Vector3(-1.0f, 0, 0);
            verts[2].Color = System.Drawing.Color.Brown.ToArgb();

            GraphicsStream gs = vertexBuf.Lock(0, 0, 0); // 全体ロック、フラグとりあえず0
            gs.Write(verts);
            vertexBuf.Unlock();
        }
        
        public void Render()
        {
            if (device == null) return;
            if (WindowState == FormWindowState.Minimized) return;
            //device.Transform.World = Matrix.Translation(2, 2, 2); // 移動
            device.Transform.World = Matrix.RotationZ(Environment.TickCount / 300f)
                 * Matrix.RotationY(Environment.TickCount / 1000f); // 回転

            device.Transform.View = Matrix.LookAtLH( // カメラ視点
                new Vector3(0.0f, 0.0f, -5.0f), // position
                new Vector3(0.0f, 0.0f, 0.0f), // target
                new Vector3(0.0f, 1.0f, 0.0f)); // 上方向
            device.Transform.Projection = Matrix.PerspectiveFovLH( // 投影
                (float)Math.PI / 4, // 横の視野をラジアンで
                (float)ClientSize.Width / (float)ClientSize.Height, // アスペクト比
                3.0f, 15.0f); // 前-後方投影面までの距離

            device.RenderState.Lighting = false; // 色を付ける

            device.Clear(ClearFlags.Target, Color.Blue, 1.0f, 0);

            device.BeginScene(); // 描画処理            
            device.SetStreamSource(0, vertexBuf, 0);
            device.VertexFormat = CustomVertex.PositionColored.Format;
            device.DrawPrimitives(PrimitiveType.TriangleList, 0, 3); // 型、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);
            }
            Console.WriteLine("Renderd");
        }

    }

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

    }
}