www.jammni.de

Logo - Kleiner Drache

Logo - Drache2. Das erste DirectX-Programm

Home >> Tutorials >> DirectX 9−Tutorial
  Alle Programme die in diesem Tutorial programmiert werden, sind in C# geschrieben!

In diesem Kapitel soll es erst einmal nur um den allgemeinen Aufbau eines DirectX-Programms gehen. Ziel wird es sein, am Ende des Kapitels ein lauffähiges DirectX-Programm zu erstellen, dass die Grafikkarte zum Rendern benutzt und zunächst "nur" einen blauen Hintergrund anzeigt. Der Hintergrund selbst soll Bestandteil eines Fensters sein. Das heißt, das Programm wird nicht im Full-Screen-Modus ausgeführt.

Für alle, die es nicht mehr erwarten können, ist hier bereits das komplette Listing abgedruckt. Das ganze gibts natürlich hübsch verpackt als rar-Datei zum herunterladen am Ende des Listings. Enthalten ist natürlich auch die vorkompilierte exe-Datei.
 
Bild von der Ausgabe des DirectX-Programms
Listing 1 - CreateDevice.cs:
1:    using System;
2:    using System.Drawing;
3:    using System.Windows.Forms;
4:    using Microsoft.DirectX;
5:    using Microsoft.DirectX.Direct3D;
6: 
7:    public class CreateDevice : Form
8:    {
9:      // Globale Variablen
10:     Device device = null; // Das Rendering-Device
11:
12:     public CreateDevice()
13:     {
14:       // Anfangsgröße des Fensters setzen
15:       this.ClientSize = new System.Drawing.Size(400,300);
16:       // Titel des Fensters setzen
17:       this.Text = "DirectX Tutorial - CreateDevice";
18:     }
19:
20:     public bool InitializeGraphics()
21:     {
22:       try
23:       {
24:         // Die Hardware initialisieren und ein paar Parameter setzen
25:         PresentParameters presentParams = new PresentParameters();
26:         presentParams.Windowed=true;
27:         presentParams.SwapEffect = SwapEffect.Discard;
28:         device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
29:         return true;
30:       }
31:       catch (DirectXException)
32:       {
33:         return false;
34:       }
35:     }
36:     private void Render()
37:     {
38:       if (device == null)
39:         return;
40:  
41:       // Backbuffer löschen und gleichzeitig die Zeichenfläche blau einfärben
42:       device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
43:       // Anfang der Szene
44:       device.BeginScene();
45:  
46:       // An dieser Stelle würden Objekte gerendert werden
47:  
48:       // Ende der Szene
49:       device.EndScene();
50:       device.Present();
51:     }
52:     protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
53:     {
54:       this.Render(); // Rendern
55:     }
56:     protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
57:     {
58:       if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
59:         this.Close(); // Esc wurde gedrückt
60:     }
61:     protected void DisposeGraphics()
62:     {
63:     }
64:  
65:     // Einstiegspunkt des Programms
66:     static void Main()
67:     {
68:
69:       using (CreateDevice frm = new CreateDevice())
70:       {
71:         if (!frm.InitializeGraphics()) // Direct3D initialisieren
72:         {
73:           MessageBox.Show("Konnte Hardware nicht initialisieren.");
74:           return;
75:         }
76:         frm.Show();
77:
78:         // Solange das Fenster noch gültig ist, die Szene rendern und Eingaben verarbeiten
79:         while(frm.Created)
80:         {
81:           frm.Render();
82:           Application.DoEvents();
83:         }
84:         frm.DisposeGraphics();
85:       }
86:     }
87:   }

 
Bild vom Kompilieren des DirectX-Programms

Kompilieren des Programms

Wir werden uns in diesem Kapitel aber Schritt für Schritt vorarbeiten und zunächst von noch einfacheren Programmen ausgehen.

Doch zunächst zum Kompilieren des Programms:
Am einfachsten ist es, das Programm in einer Entwicklungsumgebung zu kompilieren. Ansonsten gibt es natürlich noch den harten Weg über die Kommandozeile. Für alle, die darauf stehen, ist hier der Befehl: csc /t:winexe /r:"c:\WINDOWS\Microsoft.NET\Managed DirectX\v9.00.1126\Microsoft.DirectX.dll" /r:"c:\WINDOWS\Microsoft.NET\Managed DirectX\v9.00.1126\Microsoft.DirectX.Direct3D.dll" CreateDevice.cs
Der Parameter /t:winexe deutet an, dass es sich um ein WinForms-Projekt handelt, dass kein Konsolenfenster benötigt.
Die Pfadangaben sind natürlich an das System anzupassen.
 

 
Unter SharpDevelop sind zum Kompilieren noch ein paar mehr Dinge nötig. Zuerst wird ein neues Combine erstellt - irgend eines ohne Codegenerierung. Anschließend wird CreateDevice.cs dem Combine hinzugefügt. Nun müssen noch die Verweise auf die DirectX-Assemblies eingebunden werden. In der Projekt-Ansicht gibt es den Unterpunkt Referenzen. Mit einem Rechtsklick auf diesen Punkt und die Auswahl von Referenz hinzufügen können die beiden benötigten Assemblies Microsoft.DirectX.dll und Microsoft.DirectX.Direct3D.dll dem Projekt hinzugefügt werden. Mit einem Druck auf F5 wird das Programm dann kompiliert und ausgeführt.