開発環境 Microsoft Visual Studio Express 2013 for Windows Desktop
実行環境 Microsoft Windows 8.1 (64bit)
プロジェクトの種類 Visual C#/空のプロジェクト
プロジェクト名 SdxTeapot

SlimDX Developer SDK(January 2012)をインストールする。

参考

以下のファイルをプロジェクトに追加する。
Program.cs クラス

参照設定/参照の追加
アセンブリ/拡張 SlimDX C:\Program Files (x86)\SlimDX SDK (January 2012)\Bin\net40\x64\SlimDX.dll
アセンブリ/フレームワーク System.Drawing
アセンブリ/フレームワーク System.Windows.Forms

プロジェクトのプロパティ
アプリケーション 出力の種類 Windows アプリケーション
ビルド プラットフォーム ターゲット x64

Program.xaml
using SlimDX;
using SlimDX.Direct3D9;
using SlimDX.Windows;
using System;
using System.Drawing;
 
namespace SdxTeapot
{
    class Program
    {
        [STAThread]
        static void Main()
        {
            var form = new RenderForm("SlimDX - Mesh");
 
            var device = new Device(
                new Direct3D(),
                0,
                DeviceType.Hardware,
                form.Handle,
                CreateFlags.HardwareVertexProcessing,
                new PresentParameters
                {
                    BackBufferWidth = form.ClientSize.Width,
                    BackBufferHeight = form.ClientSize.Height,
                });
            device.SetRenderState(RenderState.ZEnable, ZBufferType.UseZBuffer);
            device.SetRenderState(RenderState.CullMode, Cull.None);
 
            device.SetRenderState(RenderState.Lighting, true);
            device.SetLight(0, new Light
            {
                Type = LightType.Directional,
                Direction = new Vector3(1.0f, -1.0f, 1.0f),
                Diffuse = Color.White,
                Ambient = Color.FromArgb(50, 50, 50)
            });
            device.EnableLight(0, true);
 
            device.Material = new Material
            {
                Diffuse = Color.Gold
            };
 
            var mesh = Mesh.CreateTeapot(device);
 
            MessagePump.Run(form, () =>
            {
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.CornflowerBlue, 1.0f, 0);
                device.BeginScene();
 
                device.SetTransform(TransformState.World, Matrix.RotationY(Environment.TickCount / 1000.0f));
                device.SetTransform(TransformState.View, Matrix.LookAtRH(
                    new Vector3(0.0f, 3.0f, 0.0f - 5.0f),
                    new Vector3(0.0f, 0.0f, 0.0f),
                    new Vector3(0.0f, 1.0f, 0.0f)));
                device.SetTransform(TransformState.Projection,
                    Matrix.PerspectiveFovRH(3.0f / 4.0f, 1.0f, 1.0f, 100.0f));
 
                mesh.DrawSubset(0);
 
                device.EndScene();
                device.Present();
            });
 
            foreach (var item in ObjectTable.Objects)
            {
                item.Dispose();
            }
        }
    }
}
 
最終更新:2014年06月02日 18:27