Tipp 0481 Textur-Blending (einfach)
Autor/Einsender:
Datum:
  Alexander Csadek
26.01.2006
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 8
Transparenzeffekte können in Direct3D mittels Mischen von Texturen erzeugt werden. Dabei wird ein Farbpixel aus der Textur mit einem Farbpixel aus dem Szenen-Hintergrund gemischt.
Transparente Farben in einer Textur basieren auf dem gleichen Prinzip. Hierbei ist es wichtig zu wissen, dass AlphaBlending bzw. jedes Blending von Texturen nur dann funktioniert, wenn die Texturen in der richtigen Reihenfolge gerendert werden. Wird zum Beispiel zuerst das Glas transparent gerendert und danach erst ein Objekt hinter dem Glas, dann funktioniert AlphaBlending nicht. Entscheidend ist dabei der Blend-Faktor mit der die beiden Farben gemischt werden. Beide Faktoren werden dem Direct3D mittels der Funktion SetRenderState() mitgeteilt.
Der Textur-Blend-Faktor wird folgendermassen eingestellt:
 
  Device8.SetRenderState D3DRS_SRCBLEND, D3DBLEND_ONE
 
Und der Hintergrund-Blend-Faktor so:
 
  Device8.SetRenderState D3DRS_DESTBLEND, D3DBLEND_ONE
 
Zu guter letzt müsst ihr dem Direct3D auch mitteilen, dass ihr einen Transparenz-Effekt erzeugen wollt.
 
  Device8.SetRenderState D3DRS_ALPHABLENDENABLE, True
 
Vergesst nicht, das AlphaBlending auch wieder auszuschalten, damit nicht die gesamte 3D-Szene transparent wird.
Es folgt nun der für diesen Tipp relevante Code...
 
Private Sub Render3D()
  On Error GoTo ErrOut
  If gD3DDevice8 Is Nothing Then Exit Sub

  'Bereinigen des BackBuffers und des ZBuffers
  gD3DDevice8.Clear 0, ByVal 0, D3DCLEAR_TARGET Or _
        D3DCLEAR_ZBUFFER, 0#, 1#, 0

  'Szene beginnen
  gD3DDevice8.BeginScene

  'Vertex-Format setzen
  gD3DDevice8.SetVertexShader D3DFVF_LVERTEX

  'Textur setzen
  gD3DDevice8.SetTexture 0, texHimmel

  'Vertexe rendern
  gD3DDevice8.DrawPrimitiveUP D3DPT_TRIANGLELIST, 2, _
        vxHimmel(0), Len(vxHimmel(0))

  'Textur setzen
  gD3DDevice8.SetTexture 0, texHorizont

  'Vertexe rendern
  gD3DDevice8.DrawPrimitiveUP D3DPT_TRIANGLELIST, 8, _
        vxHorizont(0), Len(vxHorizont(0))

  'Textur setzen
  gD3DDevice8.SetTexture 0, texBoden

  'Vertexe rendern
  gD3DDevice8.DrawPrimitiveUP D3DPT_TRIANGLELIST, 2, _
        vxBoden(0), Len(vxBoden(0))

  'Textur setzen
  gD3DDevice8.SetTexture 0, texWand

  'Alphablending einschalten
  gD3DDevice8.SetRenderState D3DRS_ALPHABLENDENABLE, True

  'Blend Faktor setzen
  gD3DDevice8.SetRenderState D3DRS_SRCBLEND, D3DBLEND_ONE
  gD3DDevice8.SetRenderState D3DRS_DESTBLEND, D3DBLEND_ONE

  'Vertexe rendern
  gD3DDevice8.DrawPrimitiveUP D3DPT_TRIANGLELIST, 8, _
        vxWand(0), Len(vxWand(0))

  'AlphaBlending ausschalten
  gD3DDevice8.SetRenderState D3DRS_ALPHABLENDENABLE, False

  'Mit der Draw-Methode des D3DX8Sprite-Objektes das
  'Fadenkreuz zeichnen
  Call gD3DX8Sprite.Draw(texFadenkreuz, recFadenkreuz, _
        vecScalingDummy, vecRotationCenterDummy, 0, _
        vecFadenkreuz, lngColorDummy)

  'Text zeichnen
  myDXFont.DrawTextW strText, Len(strText), recText, _
        DT_WORDBREAK, D3DColorMake(1, 1, 1, 1)

  'Szene beenden
  gD3DDevice8.EndScene

  'Kompletten BackBuffer zum FrontBuffer kopieren
  gD3DDevice8.Present ByVal 0, ByVal 0, 0, ByVal 0

  Exit Sub

ErrOut:
  Debug.Print Err.Number & " - " & Err.Description
End Sub
 
Hinweis
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  (298 kB) Downloads bisher: [ 313 ]

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: Donnerstag, 25. August 2011