IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - Grundlagen von DirectX



Grundlagen von DirectX

DirectX ist eine low-level API, die es uns erlaubt 2D-Grafik, 3D-Grafik, Audio-, Eingabe- und Netzwerkfähigkeiten in unsere Anwendungen einzubauen. Außerdem werden hier mehrere Schnittstellen kurz vorgestellt.


Autor: Tobias Surmann (incsoft)
Datum: 24-03-2003, 10:21:25
Referenzen: http://www.vbDirectX.de
Schwierigkeit: Anfänger
Ansichten: 13411x
Rating: 5.44 (9x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

DirectX ist eine low-level API, die es uns erlaubt 2D-Grafik, 3D-Grafik, Audio-, Eingabe- und Netzwerkfähigkeiten in unsere Anwendungen einzubauen.

Mit der in Windows integrierten GDI (Windows Graphics Device Interface) konnten wir bisher nur Spiele wie (Text)Adventures und Kartenspiele programmieren. Für andere, anspruchsvollere Aufgaben, wie z.B. Echtzeitstrategie oder Actionspiele, ist sie zu langsam.

Deshalb wurde DirectX, das zunächst nur für C++ verfügbar war, entwickelt. Ab Version 7 gibt es nun endlich auch DirectX zur Verwendung unter Visual Basic.

Obwohl es schnellere Programmiersprachen (z.B. C++/C#) gibt, ist es dennoch zu empfehlen, auch DirectX-Spiele mit Visual Basic zu erstellen. Die Einbindung der DLLs, wie auch die Bearbeitung des Quellcodes und der DirectX-Objekte, ist wesentlich einfacher als mit einer anderen Programmiersprache.

Schnittstellen

DirectX beinhaltet mehrere Schnittstellen, die wir benötigen, um Spiele zu programmieren. Die wohl wichtigste dieser Schnittstellen ist DirectDraw. Sie stellt Grafik, Schrift und Animation auf dem Bildschirm dar. Aber was nützt uns nur die beste Grafik, wenn der Spieler unser Spiel nicht steuern kann? Hier die Schnittstellen:

DirectInput
Für den Bereich der Steuerung ist DirectInput zuständig. Wir können damit den aktuellen Zustand eines oder mehrerer Eingabegeräte abfragen. Eingabegeräte werden nochmals in mehrere Bereiche unterteilt: Tastatur, Maus und Joystick. Darunter sind auch Maus- und Joystick ähnliche Geräte wie Trackball, Touchpad, Gamepad und Lenkrad zusammengefasst. Eingabegeräte, die die Force Feedback Technologie benutzen werden ebenfalls unterstützt. Auch für die Zukunft ist DirectInput bestens gerüstet: Es können sogar Geräte eingesetzt werden, die heute technisch noch gar nicht genau definiert sind!

DirectSound
Jetzt fehlt in unserem Spiel nur noch der richtige Klang. Die DirectX-Schnittstelle, die Musik und Soundeffekte umfasst heißt DirectSound. Mit DirectSound sind wir in der Lage den Speicher der Soundkarte effektiv zu nutzen. Dies wird besonders beim Streaming von langen Sounddateien deutlich. Anstatt die ganze Datei in den Speicher zu laden, wird nur ein kleiner Teil des Soundkartenspeichers reserviert, in den kontinuierlich Quelldaten aus der Sounddatei geschrieben und ausgelesen werden. DirectSound kann auch verschiedene Effekte auf die im Speicher abgelegten Dateien anwenden. So stehen zum Beispiel Klangoptionen wie Balance, Volume und Frequenz zur Verfügung, die wir nach belieben manipulieren können.

DirectPlay
Eine weitere DirectX-Schnittstelle ist DirectPlay. Wir benötigen sie, wenn wir in unserem Spiel eine Multiplayer-Funktion einfügen möchten.

DirectDraw
DirectDraw ist die Komponente zum Zeichnen und deshalb die wohl wichtigste der DirectX-Komponenten. Man kann damit nicht nur 32-bittige und hochauflösende Spiele programmieren, nein, das Beste daran ist, das man die langsame Windows GDI endlich los wird, da DirectDraw direkt auf die Hardware zugreift und keine Umwege über Windows macht. Dies geschieht über den sogenannten HAL (Hardware Abstraction Layer), der auf der niedrigsten Ebene von DirectX arbeitet. Der HAL greift auf die Treiber der Grafikkartenhersteller zu, um direkt mit der Hardware zu kommunizieren. Gerade wegen dieser direkten Kommunikation ist dieser Layer der Schnellste. Natürlich greift man nicht selber auf den HAL zu, das erledigt DirectX für uns.



Der Zugriff über die GDI würde wesentlich länger dauern, da diese noch den Weg über die DDI (Device Display Interface) und den HEL (s.u.) nimmt.

Wie man in der Grafik oben sehen kann, gibt es eine Ebene über dem HAL noch den HEL (Hardware Emulation Layer). Normalerweise ist DirectX so programmiert, dass es die Vorteile der Hardware ausnutzt, wenn diese existiert. Aber DirectX arbeitet auch, wenn keine entsprechende Hardware vorhanden ist. Nehmen wir zum Beispiel an, dass wir auf unserem Computer eine Grafik-Engine geschrieben haben, welcher eine Grafikkarte installiert hat, die das Drehen von Bitmaps unterstützt. Auf einem anderen Computer, dessen Grafikkarte auch das Drehen von Bitmaps unterstützt läuft der Code mit voller Geschwindigkeit. Aber was, wenn dieser das Drehen von Bitmaps nicht unterstützt?
Genau dazu ist der Hardware Emulation Layer da. Der HEL emuliert die Funktionalität des HAL, indem er verschiedene Software-Algorithmen anwendet, sodass man keinen Unterschied erkennen kann. Natürlich läuft der Code emuliert langsamer, aber, und das ist das Wichtigste, er läuft!

DirectSound
DirectSound ist ein Bestandteil des Microsoft DirectX SDK, genauso wie DirectDraw und DirectInput. Mit DirectSound lassen sich mehrere WAVE-Dateien gleichzeitig abspielen, und zwar unendlich viele auf einmal. Visual Basic kann ohne DirectSound noch nicht einmal eine ganz normale WAVE-Datei abspielen. Dazu benötigt man dann schon eine Funktion aus der API, die aber leider auch nur begrenzte Möglichkeiten bietet.

Dies sind nicht alle Technologien und Schnittstellen, die uns das DirectX-Objekt zur Verfügung stellt. Des weiteren gibt es noch Direct3D (3D-Grafik), DirectSound3D (3D-Sound), DirectMusic (Musik) und DirectSetup (Installation).

DirectX in die Entwicklungsumgebung einfügen

Bevor wir die DirectX-Komponenten in unserem Programm benutzen können, müssen wir Visual Basic sagen, wo es die DLL finden kann. Dazu wird ein Verweis auf die Datei dx7vb.dll erstellt.

  1. Starten Sie zunächst Visual Basic und erstellen Sie ein Standard-EXE Projekt.
  2. Klicken Sie nun im Menü auf Projekt:



  3. Nach einem Klick auf den Menüpunkt Verweise erscheint nun ein neues Fenster auf dem Bildschirm. Hier wählen wir den Eintrag DirectX 7 for Visual Basic Type Library aus, indem wir auf das Kästchen davor klicken, so das ein Häkchen erscheint:


  4. Damit Visual Basic den Verweis nun in unser Projekt aufnimmt, klicken wir auf OK.
  5. Falls im Auswahlfenster nicht der Eintrag DirectX 7 for Visual Basic Type Library erscheint, muss sichergestellt werden, dass sich die Datei dx7vb.dll im Windows Systemordner befindet und dass sie korrekt registriert wurde.

    Um die Datei zu registrieren, muss diese einfach nur per Drag & Drop auf die Datei regsvr32.exe (ebenfalls im Systemverzeichnis) geschoben werden.

Das Auswahlfenster verschwindet nun, und wir haben wieder das leere Formular vor uns. Um die korrekte Einbindung nun auszuprobieren, doppelklicken wir auf das Formular und wechseln dann von der Ereignisprozedur Form_Load() in den Deklarationsabschnitt. Dort tippen wir die nachfolgende Zeile ein.

Dim DX7 As New DirectX7 'Neues DirectX7-Objekt erstellen

Wir bemerken nun, dass sich bei der Eingabe ein kleines Fenster unten rechts von der aktuellen Cursorposition öffnet. Dieses hilft uns bei der Auswahl der benötigten DirectX-Objekte, Methoden, Eigenschaften und Konstanten.




dreamer
Expert
Beitrag vom:
15-09-2007, 10:23:01

Da ich mich gerade mit DirectX (und C++) beschäftige, finde ich Artikel zu diesem Thema sehr interessant. Auch solche die sich mehr auf dem Konzept richten. Aber gerne hätte ich auch Programmcode gesehen um irgendetwas testen zu können.

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1150
Comments: 0