チュートリアル 1: デバイスの作成

チュートリアル 1: デバイスの作成

CreateDevice チュートリアル プロジェクトでは、Microsoft® Direct3D® を初期化し、単純な青色の画面をレンダリングして、最後にシャット ダウンを行う。

パス

ソースの場所 : (SDK ルート)\Samples\C#\Direct3D\Tutorials\Tutorial1

手順

アプリケーション ウィンドウの作成

Microsoft® Windows® アプリケーションが実行時に最初に行う必要があるのは、アプリケーション ウィンドウの作成である。そのため、次のサンプル コードの Main() 関数では、アプリケーションで定義した CreateDevice クラスのコンストラクタを最初に呼び出す。このクラスは、ディスプレイ ウィンドウのサイズ、ウィンドウの見出し、ウィンドウのアイコンを設定する。CreateDevice は、Microsoft .NET Framework で使われる System.Windows.Forms.Form クラスから作成され、アプリケーション内のウィンドウを表す。

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

namespace DeviceTutorial
{
    public class CreateDevice : Form
    {   
        // Global variables for this project
        Device device = null; // Rendering device
        
        public CreateDevice()
        {
        // Set the initial size of form
        this.ClientSize = new System.Drawing.Size(400,300);
        // And its caption
        this.Text = "Direct3D Tutorial 01: CreateDevice";
        // Load icon from the resources of the .exe
        this.Icon = new Icon(this.GetType(), "directx.ico");
        }
        .
        .
        .
    }
.
.
.
}

Direct3D オブジェクトの初期化

アプリケーション ウィンドウを作成すれば、シーンのレンダリングに使う Direct3D オブジェクトの初期化を行うことができる。この処理では、オブジェクトを作成し、プレゼンテーション パラメータを設定して、最後に Direct3D デバイスを作成する。

public bool InitializeGraphics()
{
    try
    {
    // Create a PresentParameters object
    PresentParameters presentParams = new PresentParameters();
    
    // Don't run full screen
    presentParams.Windowed = true;
    
    // Discard the frames
    presentParams.SwapEffect = SwapEffect.Discard;
    
    // Instantiate a device
    device = new Device(0,
                        DeviceType.Hardware,
                        this,
                        CreateFlags.SoftwareVertexProcessing,
                        presentParams);
    return true;
    }
    catch { return false; }
}
    

上記のサンプル コードは、ウィンドウ表示特性の設定に使う PresentParameters オブジェクトによって異なる。たとえば、Windowed プロパティを TRUE に設定すると、表示されるウィンドウ サイズはフル画面表示より小さくなる。このデフォルトの小さなウィンドウ フォーマットには、メニューと子ウィンドウは表示されないが、ウィンドウ化したアプリケーションに通常表示される、[最小化]、[最大化]、[閉じる] のボタンは表示される。この場合、バッファ メモリをシステム メモリにすばやく切り替えて元に戻す機能は、SwapEffect.Discard フラグによって無効になる。Windowed プロパティが FALSE の場合には、作成されるウィンドウは、最前面のウィンドウを除くすべてのウィンドウよりも手前に配置され、ウィンドウがアクティブでなくなっても最前面にそのまま表示される。

初期化手順の最後のステップは、Direct3D デバイスの作成である。この例では、Device(Int32,DeviceType,Control,CreateFlags,PresentParameters) への入力フラグで、ハードウェア デバイスを優先し、頂点処理はソフトウェアで実行するように指定する。CreateFlags.HardwareVertexProcessingを指定してハードウェア頂点処理を使うようにシステムに指示すると、ハードウェア頂点処理をサポートするビデオ カードではパフォーマンスが大幅に向上する。

Direct3D オブジェクトのレンダリング

アプリケーションは、Application.DoEvents メソッドを使うループ内で動作し続ける。この場合、このメソッドは frm という名前の CreateDevice オブジェクトを引数にとる。DoEvents は、標準的な Windows アプリケーション メッセージ ループを、現在のスレッド上で実行する。

static void Main()
{
    using (CreateDevice frm = new CreateDevice())
    {
        if (!frm.InitializeGraphics()) // Initialize Direct3D
        {
           MessageBox.Show("Could not initialize Direct3D.  This tutorial will exit.");
           return();
        }
        frm.Show();
        
        // While the form is still valid, render and process messages
        while(frm.Created)
        {
           frm.Render();
           Application.DoEvents();
        }
    }
}
    

作成される CreateDevice Form オブジェクトが有効な間は、アプリケーションで定義した Render メソッドを呼び出して、Direct3D オブジェクトをレンダリングする。まず、Device.Clear メソッドで、ビューポート (開いているウィンドウ) を均一な青色に設定する。Device.BeginScene メソッドを使って、シーンのレンダリングを開始する。レンダリングが完了したら、EndScene メソッドと Present メソッドを続けて呼び出して、シーンを終了する。

private void Render()
{
    if (device == null)
    return;
    
    //Clear the backbuffer to a blue color (ARGB = 000000ff)
    device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
    
    //Begin the scene
    device.BeginScene();
    
    // Rendering of scene objects can happen here
    
    //End the scene
    device.EndScene();
    device.Present();
}

© 2002 Microsoft Corporation. All rights reserved. Terms of use.