Tipp 0384 Texturen mit transparenter Farbe (ColorKey)
Autor/Einsender:
Datum:
  Alexander Csadek
13.02.2004
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 7
Wie bei der Darstellung von Bitmaps mit DirectDraw können auch Texturen mit Direct3D einen transparenten Bereich haben. Der Vorgang ist nicht viel anders. Beim Laden der Textur wird, wie bei DirectDraw üblich, die transparente Farbe mit SetColorKey gesetzt.
Beispiel:
 
Set texWindow = DD7.CreateSurfaceFromFile(App.Path & _
    "\Texture1.bmp", TexDesc)
texWindow.SetColorKey DDCKEY_SRCBLT, ColKey
 
Da bei Direct3D die Textur nicht kopiert (blitten) sondern gerendert wird, muss beim Render-Vorgang mit dem SetRenderState-Befehl und der Konstante D3DRENDERSTATE_COLORKEYENABLE Direct3D mitgeteilt werden, dass die Textur mit einer transparenten Farbe gerendert werden soll.
Es folgt nun der für diesen Tipp relevante Code...
 
Public Sub Render3D()
  Device.Clear 1, ClearRec(), _
        D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, _
        DX7.CreateColorRGBA(0.04, 0.04, 0.07, 1), 1, 0
  Device.BeginScene
  Call Device.SetTexture(0, texSky)
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSky(0), UBound(vxSky()) + 1, D3DDP_WAIT)
  Call Device.SetTexture(0, texHorizont)
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxHorizont(0), UBound(vxHorizont()) + 1, D3DDP_WAIT)
  Call Device.SetTexture(0, texFloor)
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxBoden(0), UBound(vxBoden()) + 1, D3DDP_WAIT)
  Call Device.SetTexture(0, texWindow)

  'ColorKey einschalten
  If bolColorKey Then
    Call Device.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, True)
  End If

  'Textur beidseitig rendern
  Call Device.SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
    vxWand(0), UBound(vxWand()) + 1, D3DDP_WAIT)

  'Textur nur auf einer Seite rendern
  Call Device.SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CCW)

  'ColorKey ausschalten
  If bolColorKey Then
    Call Device.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, False)
  End If

  Device.EndScene
End Sub
 
Weitere Links zum Thema
Textur-Animation
Textur-Blending (einfach)
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  (197 kB) Downloads bisher: [ 1565 ]

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: Dienstag, 30. August 2011