Tipp 0467 Flexibles Vertex-Format (FVF)
Autor/Einsender:
Datum:
  Alexander Csadek
1.11.2005
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 8
Wozu braucht man ein flexibles Vertex-Format (FVF)?
DirectX bietet ein paar fertige Formate an, zum Beispiel D3DVERTEX. Schauen wir uns mal die Definition des D3DVERTEX-Types genauer an.
 
Type D3DVERTEX
  nx As Single
  ny As Single
  nz As Single
  tu As Single
  tv As Single
  x  As Single
  y  As Single
  z  As Single
End Type
 
Die Type-Anweisung beinhaltet die Koordinaten der Normalen, des Vertex und die Texturkoordinaten. Werden in einem Spiel oder 3D-Programm alle Eigenschaften des D3DVERTEX-Types benötigt, dann sollten diese auch verwendet werden.
Werden beispielsweise die Koordinaten der Normalen nicht benötigt, übergibt man normalerweise DirectX bei jedem Render-Vorgang drei Variablen vom Typ Single, die durch den Vertex-Prozessor berechnet werden. Bei dieser Vorgehensweise geht jedoch leider auch ein wenig an Performance verloren, was in diesem Tipp kaum merkbar ist, aber in einem Spiel sehr wohl von Relevanz ist. Um diesen Performance-Verlust zu umgehen, wird einfach ein eigenes Vertex-Format definiert. In unserem Fall würde das dann so aussehen.
 
Type CUSTOMVERTEX
  tu As Single
  tv As Single
  x  As Single
  y  As Single
  z  As Single
End Type
 
Jetzt werden die Vertexe ganz normal erstellet bzw. befüllt und natürlich auch noch das eigene Vertex-Format beschrieben, damit DirectX auch weis, wie es aussieht. In unserem Beispiel würde das Format wie folgt beschrieben werden.
 
Const D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZ Or D3DFVF_TEX1)
 
Jetzt weis DirectX, dass das Vertex-Format aus Positions-Koordinaten und Texturkoordinaten besteht, und beim Rendern muss nur noch das Vertex-Format angegeben werden.
 
gD3DDevice8.SetVertexShader D3DFVF_CUSTOMVERTEX
 
Beispiel für ein eigenes flexibles Vertex-Format
 
'Unsere eigene Vertex-Struktur (custom vertex format)
'wird auch als Flexibles Vertex Format (FVF) bezeichnet
Public Type CUSTOMVERTEX
  postion As D3DVECTOR    '3D Position vom Vertex
  color   As Long         'Farbe des Vertex
  tu      As Single       'Textur Koordinate
  tv      As Single       'Textur Koordinate
End Type

'Die Vertex-Struktur muss beschrieben werden, damit der Vertex-
'Prozessor weiß, wie wir unsere Vertexe definieren. Ein LVertex
'besteht aus der Position (Vektor), der Farbe (diffus) und der
'Texturkoordinaten.
Public Const D3DFVF_CUSTOMVERTEX = _
      (D3DFVF_XYZ Or D3DFVF_DIFFUSE Or D3DFVF_TEX1)

'Vertex-Arrays
Public vxWand()     As CUSTOMVERTEX
Public vxBoden()    As CUSTOMVERTEX
Public vxHimmel()   As CUSTOMVERTEX
Public vxHorizont() As CUSTOMVERTEX
 
Hinweis
Um dieses Beispiel ausführen zu können, wird die DirectX 8 for Visual Basic Type Library benötigt (siehe dazu die Erläuterungen in der DirectX-Rubrik).

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (190 kB) Downloads bisher: [ 422 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Dienstag, 30. August 2011