Tipp 0372 Vertexe individuell rendern (D3DTLVERTEX)
Autor/Einsender:
Datum:
  Dinko Hasanbasic
15.12.2003
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 7
Dieser Tipp zeigt, wie man ohne viel Mühe ein mathematisches Trapez via "Tranformed and Lit"-Vertexe rendern kann.
Bei einem TL-Vertex werden die X-, Y- und Z-Koordinaten als Bildschirmposition an Direct3D übergeben. Das System erwartet vom Programm vortransformierte Vertexe und führt keine Berechnung für die Beleuchtung des Vertexes durch. Daher gibt es im D3DTLVERTEX-Datentyp keine Eigenschaft für die Normalen. Es kann eine Farbe für "diffuse" und "specular" bestimmt werden, wenn nicht, dann verwendet das System die Farbe weiß.
Die TL-Vertexe eignen sich gut für Menüs in 3D-Spielen.
Es folgt nun der für diesen Tipp relevante Code...
 
Sub MainLoop()
  bnRunning = True

  Do While bnRunning
    ' Die Größe wird verändert
    If Hoehe >= 200 Then SizeChange = -1 * SizeChange
    If Oben <= 10 Then SizeChange = -1 * SizeChange
    Oben = Oben + SizeChange
    Unten = Unten + 2 * SizeChange
    Hoehe = Hoehe + SizeChange

    ' Die Vertexe werden der neuen Größe angepasst
    Trapez
    ' Die Szene wird gerendert
    Clear_Device
    Device.BeginScene
    Device.DrawPrimitive D3DPT_TRIANGLESTRIP, _
        D3DFVF_TLVERTEX, vtx_Trapez(0), 4, D3DDP_WAIT
    Device.EndScene

    ' Die Trapezeigenschaften werden gezeichnet und die
    ' Font-Eigenschaften geändert.
    Dim fnt As IFont

    Set fnt = frmMain.Font
    fnt.Name = "Tahoma"
    fnt.Bold = True
    fnt.Size = 10
    Backbuffer.SetFont fnt
    Set fnt = Nothing

    Backbuffer.SetForeColor vbGreen
    Backbuffer.DrawText 20, 10, _
          "Breite-Oben = " & CStr(2 * Oben), False
    Backbuffer.DrawText 20, 25, _
          "Breite-Unten = " & CStr(2 * Unten), False
    Backbuffer.DrawText 20, 40, _
          "Höhe = " & CStr(2 * Hoehe), False
    Backbuffer.DrawText 20, 55, _
          "Esc-Taste drücken, um abzubrechen", False
    ' Nun wird alles in die Primary-Surface gezeichnet
    Primary.Flip Nothing, DDFLIP_WAIT
    DoEvents
  Loop
End Sub

Sub Trapez()
  ' Die Punkte werden individuell gerendert
  P_X(1) = 400 - Oben: P_Y(1) = 300 - Hoehe
  P_X(2) = 400 + Oben: P_Y(2) = 300 - Hoehe
  P_X(3) = 400 - Unten: P_Y(3) = 300 + Hoehe
  P_X(4) = 400 + Unten: P_Y(4) = 300 + Hoehe
  ' Punkt 1 - Rot
  DX.CreateD3DTLVertex P_X(1), P_Y(1), 0, 1, _
     DX.CreateColorRGB(1, 0, 0), 1, 0, 0, vtx_Trapez(0)
  ' Punkt 2 - Blau
  DX.CreateD3DTLVertex P_X(2), P_Y(2), 0, 1, _
     DX.CreateColorRGB(0, 0, 1), 1, 0, 0, vtx_Trapez(1)
  ' Punkt 3 - Gelb
  DX.CreateD3DTLVertex P_X(3), P_Y(3), 0, 1, _
     DX.CreateColorRGB(1, 1, 0), 1, 0, 0, vtx_Trapez(2)
  ' Punkt 4 - Grün
  DX.CreateD3DTLVertex P_X(4), P_Y(4), 0, 1, _
     DX.CreateColorRGB(0, 1, 0), 1, 0, 0, vtx_Trapez(3)
End Sub
 
Weitere Links zum Thema
2D mit Direct3D darstellen (rendern)
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  (3,8 kB) Downloads bisher: [ 401 ]

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, 15. August 2011