Tipp 0351 Direct3D - Himmel (SkyBox)
Autor/Einsender:
Datum:
  Alexander Csadek
14.08.2003
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 7
Es gibt mehrere Möglichkeiten in einer 3D-Umgebung (Map) einen realistischen Himmel darzustellen. Eine sehr beliebte Variante ist die SkyBox. Dabei werden die Innenseiten eines Würfels mit einer entsprechenden Textur belegt. In diesen Würfel wird dann die Map gesetzt.
Der Vorteil dabei ist, es werden nur wenige Polygone benötigt, wobei der Nachteil darin besteht, dass der Himmel nur schwer animiert werden kann, und den Himmel auf die Innenseite einer Halbkugel zu legen, hat den Nachteil, dass sehr viele Polygone benötigt werden.
Map-Designer verwenden auch gerne einfach nur eine Fläche über dem Spieler, die sie entsprechend groß einstellen, und grenzen die Umgebung mit Mauern, Bergen usw. so ein, dass der Spieler nie den wirklichen Horizont sehen kann.
Etwas muss allerdings bei allen Varianten bedacht werden, die Himmel-Textur muss entsprechend gut sein, damit keine Übergänge zu sehen sind. Programme wie Corel Bryce oder Terragen sind da sehr hilfreich.
Dieser Tipp zeigt, wie eine SkyBox in Direct3D realisiert werden kann. Dabei sollte beachtet werden, dass die Textur-Koordinaten beim Rendern innerhalb der Textur bleiben, da ansonsten unschöne Ränder entstehen können, wenn ein Texel genau den Rand der Textur trifft. Ein linearer Textur-Filter lässt den Himmel dann nicht gar so gerastert erscheinen.
Es folgt der reine Render-Bereich...
 
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, texSkyBox(0))

   'Textur-Koordinaten ausserhalb der Textur werden nicht gespiegelt
  Call Device.SetTextureStageState( _
        0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP)

   'Bilinearen Texturfilter verwenden, damit die Skybox nicht
   'so grob gerastert wird
  Call Device.SetTextureStageState( _
        0, D3DTSS_MAGFILTER, D3DTFG_LINEAR)
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSkyBox(0), 6, D3DDP_WAIT)
  Call Device.SetTexture(0, texSkyBox(1))
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSkyBox(6), 6, D3DDP_WAIT)
  Call Device.SetTexture(0, texSkyBox(2))
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSkyBox(12), 6, D3DDP_WAIT)
  Call Device.SetTexture(0, texSkyBox(3))
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSkyBox(18), 6, D3DDP_WAIT)
  Call Device.SetTexture(0, texSkyBox(5))
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSkyBox(24), 6, D3DDP_WAIT)
  Call Device.SetTexture(0, texSkyBox(4))
  Call Device.DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, _
        vxSkyBox(30), 6, D3DDP_WAIT)

  Device.EndScene
End Sub
 
Weitere Links zum Thema
Billboarding
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  (257 kB) Downloads bisher: [ 1989 ]

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: Samstag, 20. August 2011