Tipp 0368 X-Files laden, rendern und bewegen (IM)
Autor/Einsender:
Datum:
  Alexander Csadek
13.11.2003
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 7
Der Tipp zeigt eine Kombination der beiden Tipps X-Files laden und rendern  und Objekte unabhängig im 3D Raum bewegen".
Ziel ist es zu veranschaulichen, dass es egal ist, ob das 3D-Objekt (Mesh) vom Programm erstellt, oder aus einem X-File geladen wird. Bewegen kann man über die World-Matrix alle Meshes.
Wichtig ist nur, dass darauf geachtet wird, welche Meshes bewegt werden sollen und welche nicht. Wenn ihr also einen 3D-Raum erstellt habt, in dem sich Türen befinden, und nur die Türen sollen sich bewegen, dann ist darauf zu achten, dass der restliche 3D-Raum mit einer leeren und indizierten Matrix (IdentityMatrix) gerendert wird.
Es folgt nun der für diesen Tipp relevante Code...
 
Public Sub Render3D()
  Dim helpMatrix(2) As D3DMATRIX
  Dim i As Integer, j As Integer

  'Hilfsmatrix initialisieren
  For i = 0 To 2
    DX7.IdentityMatrix helpMatrix(i)
  Next

  Device.Clear 1, ClearRec(), _
        D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, _
        DX7.CreateColorRGBA(0.04, 0.04, 0.07, 1), 1, 0

  Device.BeginScene
  'Restliche Welt "normal" rendern
  Device.SetTransform D3DTRANSFORMSTATE_WORLD, helpMatrix(0)
  Call Device.SetTexture(0, texTextur)

  'TexturKoordinaten ausserhalb der Textur werden nicht
  ' gespiegelt
  Call Device.SetTextureStageState( _
        0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)

  'Bilinearen Texturfilter verwenden damit die Textur
  ' nicht so grob gerastert wird
  Call Device.SetTextureStageState( _
        0, D3DTSS_MAGFILTER, D3DTFG_LINEAR)
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSkyBox(0), 36, D3DDP_WAIT)

  'XFile entsprechend drehen
  RotateYMatrix helpMatrix(1), RotateY * PI / 180
  RotateXMatrix helpMatrix(2), RotateX * PI / 180

  'Hilfsmatrizen miteinander multiplizieren
  helpMatrix(1) = RetMatrixMult(helpMatrix(1), helpMatrix(0))
  helpMatrix(1) = RetMatrixMult(helpMatrix(2), helpMatrix(1))

  'Änderungen der World-Matrix vom XFile durchführen
  Device.MultiplyTransform D3DTRANSFORMSTATE_WORLD, helpMatrix(1)

  'Alle Meshes vom XFile rendern
  For i = 0 To GroupCount - 1
    Call Device.SetTexture(0, Groups(i).Texture)
    Call Device.SetTextureStageState( _
          0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)
    Call Device.SetTextureStageState( _
          0, D3DTSS_MAGFILTER, D3DTFG_LINEAR)
    Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, _
          D3DFVF_LVERTEX, Groups(i).RenderVertexList(0), _
          UBound(Groups(i).RenderVertexList) + 1, D3DDP_WAIT)
  Next

  Device.EndScene
End Sub
 
Weitere Links zum Thema
X-File Animation 1 (Single-Mesh)
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  (64 kB) Downloads bisher: [ 789 ]

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: Freitag, 26. August 2011