ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4440682
Jetzt (Chat):
15 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

FAQ - Frequently Asked Questions - DirectX


Update von Direct X7 / Direct Draw in 3D emulieren

Allgemeine Empfehlungen:

Mit dem Erscheinen von DirectX8 sind DirectDraw und Direct3d zu DirectGraphics zusammen gewachsen. DirectX9 baut ebenfalls auf dieses Konzept. Wenn ihr jetzt vor der Wahl steht, noch DirectDraw zu benutzen, so sei folgendes gesagt:
Auch für den 2D Bereich bietet DirectGraphics wesentlich mehr Möglichkeiten als DirectDraw. Es ist zudem schneller und fast genauso leicht zu erlernen. Sich in ein veraltetes und eingefrohrenes System einzuarbeiten bringt wenig.

Wenn ihr Stefans Buch habt, könnt ihr euch zwar den DierectX8 Sourcecode saugen (siehe Faq 5 Aber die DDraw beispiele basieren weiter auf DDraw. Seht es daher lieber als Herausforderung an, den Code in 3d zu emulieren.

Wenn ihr DDraw allerdings noch aus alten Zeiten beherrscht, so sind damit immer noch relativ coole Spiele in 2D machbar. Also nichts wie ran!

Mastermind

2d in 3d - Verfahren
Um in Direct3D 2D zu arbeiten, gibt es zwei Möglichkeiten.

  1. Orthogonale Projektion
    Hierbei wird eine Projektionsmatrix gesetzt, die den Z Wert simplerweise löscht.
    http://www.informatik.fh-muenchen.de/~schieder/blockunterricht-ss96/projections.html
  2. RHW Vertices


Mis2Com

2D in 3d mit RHW - Vertices

Als erstes müssen wir die Transformation umgehen!
Dabei gibt es die einfache Möglichkeit, die Primitiven direkt an den Rasterizer zu schicken, deshalb benzeichnet man sie dann als transfomierte Vertizes! Sie unterscheiden sich zu den nicht transfomierten in einigen Punkten:

- Die x- und y Koordinaten sind nun wie bei DDraw echte Bildschrimkoordinaten, dabei liegt 0,0 in der oberen linken Ecke des Bildschirms!Bei einer Auflösung von 800x600, würde der Punkt in der unteren rechten Ecke, die Koordinaten 799,599 besitzen!

- Die z Koordinate muss immer zwischen 0 und 1 liegen, je größer die Zahl, desto weiter entfernt befindet sich das Objekt!

- Die w Koordinate gehöhrt gewöhnlich auf 1 gesetzt, gebraucht wird sie sonst nur für Nebel und sonstige Z-Buffer Techniken!

[anm. von Richard Schubert: rhw muss dass reziproke z sein]

- Die Vertizes besitzen keine Beleuchtung von D3D mehr!


So könnte die neue Struktur für transfomierte Vertizes nun aussehen:

Code:
struct TransfomierteVertex
{
  Vector3D vPosition; // Positionsangabe, wie früher bei DDraw...
  float fRHW; // w-Koordinate
  Vector2D Textur1; // Texturkoordinaten (2D)
  Vector3D Textur2; // Texturkoordinaten (3D)
};


Jetzt muss man noch den FVF-Bezeichner ändern:
Code:
#define TRANSFOMIERTE_VERTEX_FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX2 | D3DFVF_TEXCOORDSIZE3(1))



Sobald man diese Änderungen vorgenommen hat, kann man so wie früher bei DDraw, die Texturen normal rendern! Dank D3D gibt es nun auch die Möglichkeit, Rotation und Color-Keying inherhalb weniger Minuten einbauen zu können, da man einfach die RenderStates verwenden kann!

DJ Stefan