eigenes Format für 3d-Modelle

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Lapiz

Betreff: eigenes Format für 3d-Modelle

BeitragSo, Nov 14, 2010 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich hätte da mal ne Frage.
Ich versuche gerade, für ein Projekt ein eigenes Format für selbst erstellte Modelle zu entwerfen.

Hier der Code zum Abspeichern:
Code: [AUSKLAPPEN]
Function saveMeshLm3D(filename$,surf)
speichern=WriteFile(filename)
WriteInt speichern,CountVertices(surf)
WriteInt speichern,CountTriangles(surf)
For v.vertex=Each vertex
   WriteFloat speichern,v\x
   WriteFloat speichern,v\y
   WriteFloat speichern,v\z
Next
For t.tri=Each tri
   WriteFloat speichern,t\vx1
   WriteFloat speichern,t\vy1
   WriteFloat speichern,t\vz1
   WriteFloat speichern,t\vx2
   WriteFloat speichern,t\vy2
   WriteFloat speichern,t\vz2
   WriteFloat speichern,t\vx3
   WriteFloat speichern,t\vy3
   WriteFloat speichern,t\vz3
Next
CloseFile speichern
End Function


Hier der zum Laden:
Code: [AUSKLAPPEN]
Function LoadMeshLm3d(filename$,surf)
laden=ReadFile(filename$)
numver=ReadInt(laden)
numtri=ReadInt(laden)
For i=1 To numver
   x#=ReadFloat(laden)
   y#=ReadFloat(laden)
   z#=ReadFloat(laden)
   createVertex(surf,x,y,z)
Next
For i=1 To numtri/2
   For v.vertex=Each vertex
      x#=ReadFloat(laden)
      y#=ReadFloat(laden)
      z#=ReadFloat(laden)
      If VertexX(surf,v\ver)=x
         If VertexY(surf,v\ver)=y
            If VertexZ(surf,v\ver)=z
               v1=v\ver
            EndIf
         EndIf
      EndIf
      x#=ReadFloat(laden)
      y#=ReadFloat(laden)
      z#=ReadFloat(laden)
      If VertexX(surf,v\ver)=x
         If VertexY(surf,v\ver)=y
            If VertexZ(surf,v\ver)=z
               v2=v\ver
            EndIf
         EndIf
      EndIf
      x#=ReadFloat(laden)
      y#=ReadFloat(laden)
      z#=ReadFloat(laden)
      If VertexX(surf,v\ver)=x
         If VertexY(surf,v\ver)=y
            If VertexZ(surf,v\ver)=z
               v3=v\ver
            EndIf
         EndIf
      EndIf
   Next
      createTriangle(surf,v1,v2,v3)
Next

CloseFile laden
End Function


und zum Schluss die CreateTriangle-Funktion:
Code: [AUSKLAPPEN]
Function createTriangle(surf,v1,v2,v3)
t.tri=New tri
t\vx1=VertexX(surf,v1)
t\vy1=VertexY(surf,v1)
t\vz1=VertexZ(surf,v1)
t\vx2=VertexX(surf,v2)
t\vy2=VertexY(surf,v2)
t\vz2=VertexZ(surf,v2)
t\vx3=VertexX(surf,v3)
t\vy3=VertexY(surf,v3)
t\vz3=VertexZ(surf,v3)
t\tria=AddTriangle(surf,v1,v2,v3)
t\tria2=AddTriangle(surf,v3,v2,v1)
End Function


So jetzt die Frage:
Die Vertices zu speichern und zu laden funktioniert einwandfrei.
Bei den Triangles ist es allerdings so, dass nach dem Laden nur noch komisches Gewurschtel
herauskommt.
Warum ist das so? Kann ich das irgendwie ändern?

Wäre wirklich nett wenn ihr mir helfen könntet!

Silver_Knee

BeitragSo, Nov 14, 2010 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
du solltest nicht die Vertexcoords sondern die Vertex id abspeichern. Wenn du die Vertexcoords abspeicherst könnte es durchaus zu Verwechslungen kommen. Die könnten dein Modell auch evtl sehr komisch aussehen lassen. Außerdem willst du sicherlich noch U und V koordinaten irgendwann in dein Formt aufnehmen und dann kann es ja durchaus sein dass an einer stelle 2 Vertexe sind die verschiedene Texturkoordinaten(u,v) haben.
 

Lapiz

BeitragSo, Nov 14, 2010 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Antwort Smile
Werde ich gleich ausprobieren!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group