|
Public Sub InitDirect3D()
Dim i As Integer
'Zunächst erstellen wir ein D3D-Interface
Set D3D7 = DD7.GetDirect3D
'Erstellt ein 3DDevice vom BackBuffer mittels der GUID
Set Device = D3D7.CreateDevice(DeviceGUID, BackBuffer)
'Z-Buffer erstellen
Set d3dEnumPFS = D3D7.GetEnumZBufferFormats(DeviceGUID)
For i = 1 To d3dEnumPFS.GetCount
Call d3dEnumPFS.GetItem(i, ddpfZBuffer)
If (ddpfZBuffer.lFlags = DDPF_ZBUFFER) And _
ddpfZBuffer.lZBufferBitDepth = 16 Then Exit For
Next i
ZBufferDesc.lFlags = DDSD_CAPS Or DDSD_WIDTH Or _
DDSD_HEIGHT Or DDSD_PIXELFORMAT
ZBufferDesc.ddsCaps.lCaps = DDSCAPS_ZBUFFER Or _
DDSCAPS_VIDEOMEMORY
'Wichtig: Größe des Backbuffers verwenden
ZBufferDesc.lWidth = BBSurfaceDesc.lWidth
ZBufferDesc.lHeight = BBSurfaceDesc.lHeight
ZBufferDesc.ddpfPixelFormat = ddpfZBuffer
Set ZBuffer = DD7.CreateSurface(ZBufferDesc)
BackBuffer.AddAttachedSurface ZBuffer
'Viewport einstellen (Kamera)
'Wichtig: grösse des Backbuffers verwenden
With ViewPort
.lHeight = BBSurfaceDesc.lHeight
.lWidth = BBSurfaceDesc.lWidth
.lX = 0
.lY = 0
.maxz = 1#
.minz = 0#
End With
Device.SetViewport ViewPort
'3DRect für Clear einstellen
ClearRec(0).X1 = ViewPort.lX
ClearRec(0).Y1 = ViewPort.lY
ClearRec(0).X2 = ViewPort.lWidth
ClearRec(0).Y2 = ViewPort.lHeight
'ViewportMatrix einstellen
With DX7
.IdentityMatrix View3DMatrix
.ViewMatrix View3DMatrix, RVector(0, 0, 0), _
RVector(0, 0, 1000), RVector(0, 1, 0), 0
End With
Device.SetTransform D3DTRANSFORMSTATE_VIEW, View3DMatrix
'neuen Ursprung der ViewportMatrix einstellen
Device.GetTransform D3DTRANSFORMSTATE_VIEW, View3DMatrix
TranslateMatrix View3DMatrix, _
RVector(PLAYER.x * -1, PLAYER.y * -1, PLAYER.z * -1)
Device.SetTransform D3DTRANSFORMSTATE_VIEW, View3DMatrix
'RenderPipeline einstellen
Device.SetRenderState D3DRENDERSTATE_LIGHTING, False
Device.SetRenderState D3DRENDERSTATE_SPECULARENABLE, False
Device.SetRenderState D3DRENDERSTATE_ZENABLE, D3DZB_TRUE
Device.SetRenderState D3DRENDERSTATE_CULLMODE, D3DCULL_CCW
'ProjektionsMatrix einstellen
With DX7
.IdentityMatrix Projection3DMatrix
.ProjectionMatrix Projection3DMatrix, 1, 1000, (3.141592 / 4)
End With
Device.SetTransform D3DTRANSFORMSTATE_PROJECTION, _
Projection3DMatrix
'Zielsurface für das Rendern setzen
Device.SetRenderTarget BackBuffer
End Sub
|
|