|
Tipp 0376
|
Direct3D - X-File Animation 1 (Single-Mesh)
|
|
|
Autor/Einsender: Datum: |
|
Alexander Csadek 27.12.2003 |
|
Entwicklungsumgebung:
DirectX-Version: |
|
VB 6
DirectX 7 |
|
|
Die beiden Tipps X-Files laden und rendern
und X-Files laden, rendern und bewegen zeigen wie man X-Files in eine
Direct3D-Anwendung im IM-Mode lädt.
|
Damit der Spieler das Gefühl bekommt er wäre wirklich im Spiel, können beispielsweise die Figuren (Character) mit einer Animation
versehen werden.
|
Dabei gibt es zwei verschiedene Wege wie Character in Direct3D animiert werden können,
mit Segmented Characters und Single-Mesh
Characters. Diese beiden Varianten unterscheiden sich dadurch, wie die Informationen der Animation im X-File gespeichert ist.
|
Bei der Variante Segmented Characters werden die Veränderungen der einzelnen Bereiche eines Characters im gleichen X-File beschrieben.
Hierbei ist jedoch ein wenig Können im Umgang mit X-Files und deren
Animation erforderlich.
|
Dieser Tipp beschäftigt sich ausschließlich mit der Single-Mesh
Character-Variante. Der Name enthält schon die Information über die angewendete Technik. Jeder Animations-Schritt wird in einem eigenen X-File gespeichert. Werden alle geladen und in der entsprechenden Reihenfolge
gerendert, so ergibt dies eine 3D-Animation.
Diese Variante ist sehr einfach und daher sehr populär, wobei sich
hierbei der hohe Verbrauch an Speicherplatz und der längere
Ladevorgang nachteilig auswirkt. Je nach Größe der X-Files kann das Laden schon ein paar Sekunden dauern.
|
Im Source-Code ändert sich nicht viel, nur es ist darauf zu achten,
dass die einzelnen X-Files in der richtigen Reihenfolge geladen und danach beim Rendern
abgerufen werden.
|
Es folgt nun der für diesen Tipp relevante Code...
|
|
|
'Die eigentlich Änderung besteht in der Hirachie der Array's
'in der die XFiles (Meshes) gespeichert werden.
'Die Animation besteht aus 8 Schritten.
Public Type XGroup
IndexList() As Integer
VertexList() As D3DVERTEX
RenderVertexList() As D3DVERTEX
mat As D3DMATERIAL7
Texture As DirectDrawSurface7
TextureFileName As String
End Type
Public Type strcCharacter
Groups() As XGroup
End Type
Public GroupCount As Long
Public Character(7) As strcCharacter
'Laden der Single-Mesh Animation
'Es werden alle Schritte der Animation einzeln geladen und
'in den oben angeführten Array's abgelegt.
For ID = 0 To 7
XFileModule.XFile_Load "stickman_" & ID & ".x", ID
Next
'Szene rendern
'Dem Rendervorgang wird der einzelne Animations-Schritt mitgeteilt.
Render3D CInt(AnimationKey)
AnimationKey = AnimationKey + 0.1
If CInt(AnimationKey) > 7 Then AnimationKey = 0
Public Sub Render3D(ByVal ID As Integer)
Dim i As Integer
Device.Clear 1, ClearRec(), _
D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, _
DX7.CreateColorRGBA(0.2, 0.2, 0.4, 0), 1, 0
Device.BeginScene
For i = 0 To GroupCount - 1
Call Device.SetMaterial(Character(ID).Groups(i).mat)
Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_VERTEX, _
Character(ID).Groups(i).RenderVertexList(0), _
UBound(Character(ID).Groups(i).RenderVertexList) + 1, _
D3DDP_WAIT)
Next
Device.EndScene
End Sub
|
|
|
|
|
|
Um dieses Beispiel ausführen zu können, wird die DirectX 7
for Visual Basic Type Library
benötigt (siehe dazu die Erläuterungen in der DirectX-Rubrik).
|
|
Windows-Version |
95 |
|
|
98/SE |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
VB-Version |
VBA 5 |
|
|
VBA 6 |
|
|
VB 4/16 |
|
|
VB 4/32 |
|
|
VB 5 |
|
|
VB 6 |
|
|
|
|
Download (72,5
kB)
|
Downloads bisher: [ 908 ]
|
|
|