![]() |
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
|
|
|
|
|
|
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: [ 1893
]
|
|
|