Hi
Ich habe ein Problem, das sich einfach nicht lösen lassen will:
Ich will ein Spiel mit DX8 unter VB6 programmieren. Da das ganze in 2D sein soll verwende ich dazu Fonts für Schriften und Sprites für die Graphiken.
Ich will nun Linien zeichnen und habe im Internet dazu die Linestrip-Methode gefunden. Aber wenn ich wie im Beispiel von http://www.activevb.de/tutorials/directx/d3d_2dg1/d3d2dg1.html zum Beispiel ein Rechteck zeichnen will, funktioniert das zwar beim gedownloadeten Projekt, aber bei mir funktioniert weder das Zeichnen eines Rechteck noch eines einfachen Linestrips. Es wird einfach alles außer dem Rechteck/Linestrip dargestellt.
Zur Initialisierung habe ich folgenden Code:
On Error GoTo ErrorHandler
Dim DispMode As D3DDISPLAYMODE
Dim D3DWindow As D3DPRESENT_PARAMETERS
Set DX = New DirectX8
Set D3D = DX.Direct3DCreate()
If D3D Is Nothing Then Exit Sub
DispMode.Format = D3DFMT_R5G6B5
DispMode.Width = ResolutionX 'Variable für meine Auflösung
DispMode.Height = ResolutionY 'Variable für meine Auflösung
With D3DWindow
.SwapEffect = D3DSWAPEFFECT_FLIP
.BackBufferCount = 1
.BackBufferWidth = ResolutionX
.BackBufferHeight = ResolutionY
.BackBufferFormat = DispMode.Format
.hDeviceWindow = Haupt.hWnd 'Haupt ist mein Formular
End With
Set D3DDevice8 = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, _
Haupt.hWnd, _
D3DCREATE_SOFTWARE_VERTEXPROCESSING, _
D3DWindow)
If D3DDevice8 Is Nothing Then Exit Sub
D3DDevice8.SetVertexShader FVF
D3DDevice8.SetRenderState D3DRS_LIGHTING, False
Set gD3DX8 = New D3DX8
Set DX8Sprite = gD3DX8.CreateSprite(D3DDevice8)
Set DX8Font1 = CreateFont(Haupt.lbl_Font1.Font) 'Label das die richtige
' Schriftart und
Set DX8Font2 = CreateFont(Haupt.lbl_Font2.Font) 'Größe hat
With rectFont 'Rectangle für meine Fonts
.Left = 1: .Top = 1: .Right = 4000: .bottom = 4000
End With
Exit Sub
ErrorHandler:
MsgBox "Fehler beim Initialisieren von DirectX 8!"
End Das Rechteck erstelle ich so:
TriStrip(0) = CreateTLVertex(10, 10, 0, 1, RGB(255, 255, 255), 0, 0, 0) _
'Funktion aus dem
TriStrip(1) = CreateTLVertex(210, 10, 0, 1, RGB(255, 0, 0), 0, 0, 0) _
'Beispielprojekt bei
TriStrip(2) = CreateTLVertex(10, 210, 0, 1, RGB(0, 255, 0), 0, 0, 0) 'dem
' alles funktioniert
TriStrip(3) = CreateTLVertex(210, 210, 0, 1, RGB(0, 0, 255), 0, 0, 0) Und der Renderer sieht so aus:
D3DDevice8.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
D3DDevice8.BeginScene
D3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TriStrip(0), Len(TriStrip(0))
D3DDevice8.EndScene
D3DDevice8.Present ByVal 0, ByVal 0, 0, ByVal 0 Die Sprite- und Fontaufrufe im Renderer habe ich nicht dazugeschrieben, aber ich habe es schon ohne probiert und es funktioniert trotzdem nicht.
Weiß vielleicht jemand ob ich irgendwo eine Einstellung in VB6 selbst änder muss oder ob ich trotz stundenlanger Suche einen Fehler im Code habe?
Danke schon im Vorraus! |