Tipp 0371 Direct3D - Nebel (Fog)
Autor/Einsender:
Datum:
  Alexander Csadek
15.12.2003
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 7
Nebel (Fog) im Direct3D bietet eine hervorragende Möglichkeit eine bestimmte Atmosphäre im 3D-Raum zu erzeugen. Bei Verwendung entsprechender Farben lassen sich damit auch Dämmerung und Nacht simulieren.
Da der Effekt Nebel die Performance eines Spieles beeinflussen kann, sollte der Anwender die Möglichkeit bekommen, ihn aus- bzw. einschalten zu können.
In Direct3D gibt es zwei verschiedene Arten wie der Nebel in der 3D-Scene berechnet wird. TableFog und VertexFog. TableFog verwendet eine vom Grafikkartentreiber vorberechnete Tabelle für den Nebelfaktor, VertexFog berechnet den Nebelfaktor während des Renderns.
Des weiteren gibt es Unterschiede, wie der Nebel-Faktor berechnet werden soll, proportional oder linear, wobei bei linear darauf geachtet werden sollte, ob dies die Grafikkarte überhaupt unterstützt (range based fog).
Es folgt nun der für diesen Tipp relevante Code...
 
Public Sub SetFog(ByVal lngColor As Long, _
              ByVal sngDensity As Single, _
              ByVal sngStart As Single, ByVal sngEnd As Single, _
              ByVal UseTableFogMode As Boolean, _
              ByRef Mode As CONST_D3DFOGMODE)

  Select Case Mode
    Case D3DFOG_NONE: myFOG.strFMode = "D3DFOG_NONE"
    Case D3DFOG_EXP: myFOG.strFMode = "D3DFOG_EXP"
    Case D3DFOG_EXP2: myFOG.strFMode = "D3DFOG_EXP2"
    Case D3DFOG_LINEAR: myFOG.strFMode = "D3DFOG_LINEAR"
  End Select

  If Mode = D3DFOG_NONE Then
    Call Device.SetRenderState(D3DRENDERSTATE_FOGENABLE, False)
    Exit Sub
  Else
    Call Device.SetRenderState(D3DRENDERSTATE_FOGENABLE, True)
  End If

  Call Device.SetRenderState( _
                    D3DRENDERSTATE_FOGTABLEMODE, D3DFOG_NONE)
  Call Device.SetRenderState( _
                    D3DRENDERSTATE_FOGVERTEXMODE, D3DFOG_NONE)

  Device.SetRenderState D3DRENDERSTATE_FOGCOLOR, lngColor

  If UseTableFogMode Then
    Call Device.SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, Mode)
  Else
    Call Device.SetRenderState(D3DRENDERSTATE_FOGVERTEXMODE, Mode)
  End If

  If Mode = D3DFOG_LINEAR Then
    Call Device.SetRenderStateSingle( _
                    D3DRENDERSTATE_FOGSTART, sngStart)
    Call Device.SetRenderStateSingle( _
                    D3DRENDERSTATE_FOGEND, sngEnd)
  Else
    Call Device.SetRenderStateSingle( _
                    D3DRENDERSTATE_FOGDENSITY, sngDensity)
  End If

End Sub
 
Weitere Links zum Thema
Objekte unabhängig im 3D-Raum 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  (187 kB) Downloads bisher: [ 1620 ]

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