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
 
Weitere Links zum Thema
X-Files laden und rendern
X-Files laden, rendern und bewegen
Hinweis
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 ]

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: Montag, 29. August 2011