Von |
(Nick-)Name |
Datum |
14. Juni 2011 um 23:50:35 |
Antwort |
Zitat: | Ist ja doch auch logisch wenn deine Normalvektoren irgendwohin zeigen!? Im Sinne der Beleuchtung sind Vertices Punkte der Oberfläche zu der sie gehören und die Normalvektoren geben die Richtung an in die die Oberfläche an der jeweiligen Stelle schaut. Ohne vernünftige Normalvektoren kann auch die Beleuchtung nicht vernünftig funktionieren... |
das habe ich mir schon iwie gedacht (siehe:
Zitat: | müsste man nicht bei den Normalen einen Vektor angeben, der senkrecht auf dem Vertex steht (senkrecht: bezogen auf die umliegenden Flächen)? | ) Nur wie man die berechnet, wusste ich nicht. Aber nach vielem Nachdenken und Rumprobieren, habe ich auch selber einen Algorithmus gefunden. Ich hab nur noch eine Frage:Public Sub AddVertex(X As Single, Y As Single, Z As Single, Diffuse As Long, Specular As Long, tu As Single, tv As Single, Optional nx As Single = 1, Optional ny As Single = 1, Optional nz As Single = 1) On Error GoTo BailOut 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, nx, ny, nz) Vertices_Init = True Set VBuffer_Mesh(UBound(VBuffer_Mesh)) = D3DDevice.CreateVertexBuffer(Len(Vertices(0)) * (UBound(Vertices) + 1), D3DUSAGE_WRITEONLY, Lit_FVF, D3DPOOL_MANAGED) D3DVertexBuffer8SetData VBuffer_Mesh(UBound(VBuffer_Mesh)), 0, Len(Vertices(0)) * (UBound(Vertices) + 1), 0, Vertices(0) BailOut: Resume Next End Sub an dieser Stelle:D3DVertexBuffer8SetData VBuffer_Mesh(UBound(VBuffer_Mesh)), 0, Len(Vertices(0)) * (UBound(Vertices) + 1), 0, Vertices(0) kommt es zu einem Laufzeitfehler (Automatisierungsfehler), kann mir jemand sagen wieso und wie ich ihn verhindern kann? LG |
|