Von |
(Nick-)Name |
Datum |
11. Juni 2011 um 22:30:12 |
Antwort |
Hi
Zitat: | hast du das Licht auch eingeschaltet? |
ja (oder meintest du was anderes):D3DDevice.SetLight 0, ll(0) D3DDevice.LightEnable 0, 1 Zitat: | Prüfe darüber hinaus noch, ob deine Vertex-Daten Normalen beinhalten |
Bis zum heutigen Tag wusste ich gar nicht, dass DX8 Normale unterstüzt Hier mal die relevanten Code Teile:Public Vertices() As LITVERTEX Private Vertices_Init As Boolean Public VBuffer_Mesh() As Direct3DVertexBuffer8 Private VBuffer_Mesh_Init As Boolean Public Function Initialise() As Boolean On Error GoTo ErrHandler: VBuffer_Mesh_Init = False Vertices_Init = False 'DirectX Initialisierung... D3DDevice.SetVertexShader Lit_FVF D3DDevice.SetRenderState D3DRS_LIGHTING, 0 D3DDevice.SetRenderState D3DRS_AMBIENT, &H202020 D3DDevice.SetRenderState D3DRS_CULLMODE, 1 D3DDevice.SetRenderState D3DRS_ZENABLE, 1 D3DDevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR D3DDevice.SetRenderState D3DRS_SRCBLEND, 3 '(hell) oder 3 (etwas dunkler) 'D3DDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_ONE D3DDevice.SetRenderState D3DRS_FILLMODE, D3DFILL_SOLID 'Matrix Initialisierung... ReDim VBuffer_Mesh(0) ErrHandler: Debug.Print "Error Number Returned: " & Err.Number Initialise = False End Function Public Sub AddMesh() If VBuffer_Mesh_Init Then ReDim Preserve VBuffer_Mesh(UBound(VBuffer_Mesh) + 1) Else ReDim VBuffer_Mesh(0) VBuffer_Mesh_Init = True Vertices_Init = False End Sub Public Sub AddVertex(X As Single, Y As Single, Z As Single, Diffuse As Long, Specular As Long, tu As Single, tv As Single) If Vertices_Init Then ReDim Preserve Vertices(UBound(Vertices) + 1) Else ReDim Vertices(0) Vertices(UBound(Vertices)) = CreateLitVertex(X, Y, Z, Diffuse, Specular, tu, tv) Vertices_Init = True Set VBuffer_Mesh(UBound(VBuffer_Mesh)) = D3DDevice.CreateVertexBuffer(Len(Vertices(0)) * (UBound(Vertices) + 1), 0, Lit_FVF, D3DPOOL_DEFAULT) D3DVertexBuffer8SetData VBuffer_Mesh(UBound(VBuffer_Mesh)), 0, Len(Vertices(0)) * (UBound(Vertices) + 1), 0, Vertices(0) End Sub Public Sub Render(move As Single) Dim n As Integer On Error GoTo ErrHandle D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, RGB(255, 100, 0), 1#, 0 ll(0).Diffuse.b = 1 ll(0).Diffuse.g = 1 ll(0).Diffuse.r = 1 ll(0).Diffuse.a = 1 ll(0).Specular.b = 1 ll(0).Specular.g = 1 ll(0).Specular.r = 1 ll(0).Specular.a = 0.5 ll(0).Position.X = Sin(RotateX) * Cos(RotateY) * 4 ll(0).Position.Y = Sin(RotateY) * 4 ll(0).Position.Z = Cos(RotateX) * Cos(RotateY) * 4 ll(0).Range = 100 ll(0).Falloff = 0.5 ll(0).Attenuation1 = 0.2 ll(0).Theta = 2 ll(0).Phi = 30 ll(0).Type = D3DLIGHT_POINT D3DDevice.SetLight 0, ll(0) D3DDevice.LightEnable 0, 1 Clear AddMesh AddVertex 1, 1, 1, 256, 256, 0, 0 AddVertex 1, 1, -1, 256, 256, 0, 0 AddVertex -1, 1, 1, 256, 256, 0, 0 AddVertex -1, 1, -1, 256, 256, 0, 0 AddMesh AddVertex 1, -1, 1, 256, 256, 0, 0 AddVertex 1, -1, -1, 256, 256, 0, 0 AddVertex -1, -1, 1, 256, 256, 0, 0 AddVertex -1, -1, -1, 256, 256, 0, 0 D3DXMatrixLookAtLH matView, MakeVector(Sin(RotateX) * Cos(RotateY) * radius, Sin(RotateY) * radius, Cos(RotateX) * Cos(RotateY) * radius), MakeVector(0, 0, 0), MakeVector(0, 3, 0) D3DDevice.SetTransform D3DTS_VIEW, matView '0,80,100 D3DDevice.BeginScene D3DDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 0 Dim testMaterial As D3DMATERIAL8 testMaterial.Diffuse.a = 1 testMaterial.Diffuse.r = 1 D3DDevice.SetMaterial testMaterial D3DDevice.SetTexture 0, Nothing For n = LBound(VBuffer_Mesh()) To UBound(VBuffer_Mesh()) D3DDevice.SetStreamSource 0, VBuffer_Mesh(n), Len(Vertices(0)) D3DDevice.DrawPrimitive D3DPT_TRIANGLESTRIP, 0, 2 Next n D3DDevice.EndScene D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0 Exit Sub ErrHandle: Debug.Print Err.Number & "//" & Err.Description If MsgBox(Err.Number & "//" & Err.Description, vbOKCancel) = vbCancel Then End Resume Next End Sub Eigentlich hab ich noch mehr Code, aber das ist jetz mal das wichtigste LG |
|