Problem bei md2 loader (Erledigt)
Übersicht

klepto2Betreff: Problem bei md2 loader (Erledigt) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi
ich habe ein kleines problem mit einem md2 loader, den ich im Moment schreibe. ich weiß nicht warum, aber irgendwie scheint er mir falsche Vertices und falsche Triangle daten zu geben. Vielleicht kann ja mal jemand einen Blick auf den Code werfen und mir helfen den Fehler zufinden. Danke Code: [AUSKLAPPEN] Const MAGIC:Int = 0 Const VERSION:Int = 1 Const SKIN_WIDTH:Int = 2 Const SKIN_HEIGHT:Int = 3 Const FRAME_SIZE:Int = 4 Const COUNT_SKIN:Int = 5 Const COUNT_VERTEX:Int = 6 Const COUNT_TEXCOORD:Int = 7 Const COUNT_TRIS:Int = 8 Const COUNT_OGLCOM:Int = 9 Const COUNT_FRAME:Int = 10 Const OFF_SKIN:Int = 11 Const OFF_TEXCOORDS:Int = 12 Const OFF_TRIS:Int = 13 Const OFF_FRAME:Int = 14 Const OFF_OGLCOM:Int = 15 Const OFF_EOF:Int = 16 Type TMD2Loader Field File:TBank Field Header:Int[17] Field Frames:TList = CreateList() Field TrisIndices:TMD2Triangle[] Field TEXCoords:TMD2TExCoords[] Field Mesh:TMesh Function LoadMD2:TMesh(Url:Object) Local MD2:TMD2Loader = New TMD2Loader If FileType(String(url)) <> 0 Then MD2.File = LoadBank(url) Else Throw("File does not exist!") EndIf MD2.GetHeader() MD2.TrisIndices = New TMD2Triangle[MD2.HEADER[COUNT_TRIS]] MD2.TexCoords = New TMD2TexCoords[MD2.HEADER[COUNT_TEXCOORD]] MD2.GetFrames() MD2.GetTriangles() Md2.GetTexCoords() MD2.Mesh = CreateMesh() MD2.BuildMesh() 'MD2.ShowFrameData() Return MD2.Mesh End Function Method GetHeader() For Local I:Int = 0 To 16 Header[I] = PeekInt(File , I*4) Next For Local H:Int = EachIn Header Print H Next Print "Number of Frames : " + Header[COUNT_FRAME] End Method Method GetFrames() Local F:TMD2Frame Local _Step:Int = HEADER[FRAME_SIZE] For Local X:Int = 0 To HEADER[COUNT_FRAME] - 1 f = New TMD2Frame f.Vertices = New TMD2VERTEX[HEADER[COUNT_VERTEX]] ' Print F.Vertices.Length Local OFF:Int = HEADER[OFF_FRAME] + (X * _Step) For Local B:Int = 0 To 2 F.Scale[B] = PeekFloat(File,OFF + (4*B)) Next For Local B:Int = 0 To 2 F.Trans[B] = PeekFloat(File,OFF+12+ 4*B) Next F.Name = PeekString(File , OFF + 4 * 6 , 16) Local Counter:Int = 0 For Local I:Int = 0 To HEADER[COUNT_VERTEX]-1 Local V:TMD2Vertex = New TMD2Vertex V.Vertices[0] = File.PeekByte(40+I*4) * F.Scale[0] + F.Trans[0] V.Vertices[1] = File.PeekByte(40+I*4+1)* F.Scale[1] + F.Trans[1] V.Vertices[2] = File.PeekByte(40+I*4+2)* F.Scale[2] + F.Trans[2] V.NormalIndex = File.PeekByte(40+I*4+3) F.Vertices[I] = V Counter:+1 Next Frames.Addlast(F) Next End Method Method GetTriangles() Local OFF:Int = HEADER[OFF_TRIS] For Local X:Int = 0 To Header[COUNT_TRIS]-1 Local TC:TMD2TRIANGLE = New TMD2Triangle TC.VIndex[0] = File.PeekShort(Off + X * 12) TC.VIndex[1] = File.PeekShort(Off + X * 12+2) TC.VIndex[2] = File.PeekShort(Off + X * 12+4) TC.TIndex[0] = File.PeekShort(Off + X * 12+6) TC.TIndex[1] = File.PeekShort(Off + X * 12+8) TC.TIndex[2] = File.PeekShort(Off + X * 12 + 10) TrisIndices[X] = TC Next End Method Method GetTexCoords() For Local X:Int = 0 To Header[COUNT_TEXCOORD] Step 4 Local T:TMD2TexCoords = New TMd2TexCoords T.U = PeekShort(File , Header[OFF_TEXCOORDS] + X) / HEADER[SKIN_WIDTH] T.V = PeekShort(File , Header[OFF_TEXCOORDS] + X + 2) / HEADER[SKIN_HEIGHT] TexCoords[X / 4] = T Next End Method Method ShowFrameData() For Local F:TMD2Frame = EachIn Frames Print "Name : " + F.NAme Print "Scale : " + F.Scale[0] + "," + F.Scale[1] + "," + F.Scale[2] Print "Trans : " + F.Trans[0] + "," + F.Trans[1] + "," + F.Trans[2] Print "VERTICES : " For Local V:TMD2VERTEX = EachIn F.Vertices Print V.Vertices[0] + "," + V.Vertices[1] + "," + V.Vertices[2] + "->" + V.NormalIndex Next Next End Method Method BuildMesh() Local Surface:TSurface = Createsurface(Mesh) Local Frame:TMD2Frame = TMD2Frame(Frames.First()) Local Counter:Int = 0 For Local V:TMD2Vertex = EachIn Frame.Vertices Surface.AddVertex(V.Vertices[0] , V.Vertices[1] , V.Vertices[2] , TexCoords[Counter].U , TexCoords[Counter].V) Next For Local T:TMD2Triangle = EachIn TrisIndices Surface.AddTriangle(T.Vindex[0] , T.Vindex[1] , T.Vindex[2]) Next Mesh.UpdateNormals() Mesh.UpdateBuffer() End Method End Type Function PeekString:String(Bank:TBank , Offset:Int , Length:Int) Local Back:String = "" For Local X:Int = Offset To Offset + Length - 1 Back:+ Chr(PeekByte(Bank , X) ) Next Return Back End Function Type TMD2Vertex Field Vertices:Float[3] Field NormalIndex:Byte End Type Type TMD2Triangle Field VIndex:Short[3] Field TIndex:Short[3] End Type Type TMD2TexCoords Field U:Float Field V:Float End Type Type TMD2Frame Field Name:String Field Scale:Float[3] Field Trans:Float[3] Field Vertices:TMD2Vertex[] End Type [Edit] Hat sich erledigt, haut jetzt alles soweit hin (sogar texturierung) |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group