|
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
|
|
|
|
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: [ 428 ]
|
|
|