Managed Direct3Dの導入

DirectX SDKの入手

ダウンロード

Microsoft DirectX SDK ダウンロード | MSDN
※バージョン2.0は途上で開発が停止しているので、バージョン1.0の最終版を入手します。

基本的な処理手順

Direct3Dで描画を行うには、次の手順を踏みます。

  1. DirectXのライブラリを参照する (DirectXのライブラリを使用できるようにする)
  2. 描画領域を作成する (描画する場所を用意する)
  3. デバイスを作成する (描画を実行するためのクラスを用意する)

サンプルコード

実行イメージ

※Direct3Dを実行できる環境を構築するためのサンプルのため、3Dのオブジェクトは何も描画していません。

ソースコード

using System;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

/// <summary>
/// デバイスの作成
/// </summary>
public class CreateDevice : System.Windows.Forms.Form
{
    Device device = null; // Direct3Dデバイス

    /// <summary>
    /// Direct3Dを初期化する
    /// </summary>
    /// <returns></returns>
    public bool InitializeDirect3D()
    {
        PresentParameters presentParameters = new PresentParameters();

        presentParameters.Windowed = true;
        presentParameters.SwapEffect = SwapEffect.Discard;

        try
        {
            // Direct3Dデバイスを作成する
            this.device = new Device(
                0,
                DeviceType.Hardware,
                this,
                CreateFlags.SoftwareVertexProcessing,
                presentParameters );
        }
        catch( DirectXException )
        {
            // @note
            // 指定の機能をビデオカードがサポートしていない場合などに
            // デバイスの作成に失敗する。

            return false;
        }

        return true;
    }

    /// <summary>
    /// レンダリングする
    /// </summary>
    private void Render()
    {
        if( this.device != null )
        {
            // ビューポートをクリアする
            this.device.Clear(
                ClearFlags.Target,
                System.Drawing.Color.DarkBlue,
                1.0f,
                0 );


            // レンダリングを開始する
            this.device.BeginScene();

            // @note
            // ここで3Dオブジェクトの描画を行う。

            // レンダリングを終了する
            this.device.EndScene();


            // 表示する
            this.device.Present();
        }
    }

    /// <summary>
    /// フォームを再描画する
    /// </summary>
    /// <param name="e"></param>
    protected override void OnPaint( System.Windows.Forms.PaintEventArgs e )
    {
        this.Render();
    }

    /// <summary>
    /// アプリケーションのエントリポイント
    /// </summary>
    static void Main()
    {
        using( CreateDevice form = new CreateDevice() )
        {
            // Direct3Dの初期化を行う
            if( form.InitializeDirect3D() )
            {
                form.Show();

                while( form.Created )
                {
                    System.Windows.Forms.Application.DoEvents();
                }
            }
        }
    }
}

Present()メソッド

public void Present();
public void Present(
    Control overrideWindow  // 描画対象のウィンドウ
);
Device.Present | MSDN