Mesh speichern laden Problem
Übersicht

![]() |
StarGazerBetreff: Mesh speichern laden Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Zum Mesh laden und speichern habe ich den Code von Shadowturtles Homepage verwendet. Speichern http://www.shadowturtle.de/sit...hSpeichern Laden http://www.shadowturtle.de/sit...n&adm= Wenn ich jedoch das gepeicherte Mesh herreinlade, ist es nicht zu sehen, selbst dann nicht, wenn ich es nicht als ÜbergabeFuntkion mache. Weis jemand wieso ? |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics3D 640,480,16
SetBuffer BackBuffer() Global camera=CreateCamera() Global light=CreateLight() Dim Model(10) Model(1) = LoadMesh("MESH.X") PositionEntity Model(1), 100,0,200 ;-------------------------------------------------------- FileOut$ = WriteFile("Test.dat") SaveMeshInFile ( FileOut$, Model(1) ) CloseFile FileOut$ FileIn = ReadFile("Test.dat") Model(2) = ( LoadMeshFromFile( FileIn ) ) ;Model(2) = CopyMesh( LoadMeshFromFile( FileIn ) ) CloseFile(FileIn) ;-------------------------------------------------------- EntityColor Model(2) ,255,0,0 PositionEntity Model(2), -100,0,200 ;************************************************************ Function SaveMeshInFile( Stream , Mesh ) WriteLine Stream,CountSurfaces(Mesh) For S = 1 To CountSurfaces(Mesh) Surface = GetSurface(Mesh,S) WriteFloat Stream,CountVertices(Surface) For V = 0 To CountVertices(Surface) - 1 WriteFloat Stream,VertexX#(Surface,V) WriteFloat Stream,VertexY#(Surface,V) WriteFloat Stream,VertexZ#(Surface,V) WriteFloat Stream,VertexU#(Surface,V, 0) WriteFloat Stream,VertexV#(Surface,V, 0) WriteFloat Stream,VertexW#(Surface,V, 0) WriteFloat Stream,VertexU#(Surface,V, 1) WriteFloat Stream,VertexV#(Surface,V, 1) WriteFloat Stream,VertexW#(Surface,V, 1) WriteFloat Stream,VertexNX#(Surface,V) WriteFloat Stream,VertexNY#(Surface,V) WriteFloat Stream,VertexNZ#(Surface,V) Next WriteLine Stream,CountTriangles(Surface) For T = 0 To CountTriangles(Surface) - 1 WriteFloat Stream,TriangleVertex(Surface,T,0) WriteFloat Stream,TriangleVertex(Surface,T,1) WriteFloat Stream,TriangleVertex(Surface,T,2) Next Next End Function ;************************************************************ Function LoadMeshFromFile( Stream ) Local Mesh,SCount,VCount,TCount,S,VNX#,VNY#,VNZ# Local Surface,V1,T,X#,Y#,Z#,tU1#,tV1#,tW1#,tU2#,tV2#,tW2#,VT0,VT1,VT2 Mesh = CreateMesh() SCount = ReadLine(Stream) For S = 1 To SCount Surface = CreateSurface(Mesh) VCount = ReadFloat(Stream) For V1 = 0 To VCount - 1 X# = ReadFloat(Stream) Y# = ReadFloat(Stream) Z# = ReadFloat(Stream) tU1# = ReadFloat(Stream) tV1# = ReadFloat(Stream) tW1# = ReadFloat(Stream) tU2# = ReadFloat(Stream) tV2# = ReadFloat(Stream) tW2# = ReadFloat(Stream) VNX# = ReadFloat(Stream) VNY# = ReadFloat(Stream) VNZ# = ReadFloat(Stream) AddVertex Surface,X#,Y#,Z#,tU1#,tV1#,tW1# VertexNormal Surface,V1,VNX#,VNY#,VNZ# VertexTexCoords Surface, V1, tU1#, tV1#, tW1#, 0 VertexTexCoords Surface, V1, tU2#, tV2#, tW2#, 1 Next TCount = ReadFloat(Stream) For T = 0 To TCount - 1 VT0 = ReadFloat(Stream) VT1 = ReadFloat(Stream) VT2 = ReadFloat(Stream) AddTriangle Surface,VT0,VT1,VT2 Next Next UpdateNormals Mesh Return Mesh End Function ;************************************************************ While Not KeyDown(1) If KeyDown(203) Then ; LEFT MoveEntity camera,-4,0,0 EndIf If KeyDown(205) Then ;RIGHT MoveEntity camera,4,0,0 EndIf If KeyDown(200) Then ; UP MoveEntity camera,0,0,4 EndIf If KeyDown(208) Then ; DOWN MoveEntity camera,0,0,-4 EndIf UpdateWorld RenderWorld Flip Wend End Ein geladenes Mesh wird zuerst abgespeichert, dann das gespeicherte geladen und ein Mesh daraus kreiert. Aber leider funktioniert es nicht, ich mache wohl etwas falsch. "ZU Erkennung, das kreierte Mesh sollte rot sein" |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Danke erstmal für diese ausführliche Erklärung, werde es noch ihn den Code miteinbinden. Jedoch lieg es leider nicht an den Vertexfarben. Die Entfernung 200 ist auch nicht zu weit, man kann die Meshes noch sehen. Habe natürlich vorher es ausprobiert, ob die Mehes zu sehen sind, sonst würde diese Frage ja sehr peinlich werden ![]() Probiere es einfach mal aus, füge den Code ins BB3D, ersätze nur Model(1) = LoadMesh("MESH.X") den File-Namen. Das geladene kreierte Mesh kann man nicht sehen, aber das Orginal schon "Model(1) = LoadMesh("MESH.X")" Vielleicht rufe ich die Funktion einfach nur falsch auf oder so, ich weis es leider nicht. Hoffe Du kannst mir helfen |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
LOL
so kommen wir nicht zum Ziel ![]() Es liegt wirklich nicht an den Vertexfarben. Ich benötige auch keine Vertexfarben, sie vergrößern nur unötig das File. (Wer weis, in Zuckunft, vielleicht brauche ich sie da schon, jetzt aber noch nicht). Ich habe jetzt sogar einen Backround erstellt, ist hellgrün, und auch sichbar, und durch das "EntityColor Model(2) ,255,0,0" was auch schon im Code vorhanden war, werden doch alle Vertexfarben auf rot gesetzt, und auch wenn es einen schwarzen Hindergrund geben sollte, müßte man das Objekt trotzdem sehen. füge einfach diese Zeilen unter "Global light=CreateLight()" und es gibt einen Hintergrund als Beweis daß das erzeugte Mesh nicht vorhanden ist. Code: [AUSKLAPPEN] Global Backround=CreateCube()
ScaleEntity Backround, 1000,1000,1 EntityColor Backround ,0,128,64 PositionEntity Backround, 0,0,400 Bitte, probiere es aus, ich kenne mich mit Mesh erzeugen nicht so gut aus, wenn da etwas fehlen sollte, oder die Funktion falsch aufgerufen wird, würde es mir nicht auffallen. Füge es einfach kurz ins BB3D ein, und probiere es aus, bitte. |
||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe jetzt mal das mit den Vertexfarben in den Code miteingebaut,
aber leider geht es dennoch nicht. Code: [AUSKLAPPEN] Graphics3D 640,480,16
SetBuffer BackBuffer() Global camera=CreateCamera() Global light=CreateLight() Global Backround=CreateCube() ScaleEntity Backround, 1000,1000,1 EntityColor Backround ,0,128,64 PositionEntity Backround, 0,0,400 Dim Model(10) Model(1) = LoadMesh("MESH.X") PositionEntity Model(1), 100,0,200 ;-------------------------------------------------------- FileOut$ = WriteFile("Test.dat") SaveMeshInFile (FileOut$, Model(1) ) CloseFile FileOut$ FileIn = ReadFile("Test.dat") ;Model(2) = ( LoadMeshFromFile( FileIn ) ) Model(2) = CopyMesh( LoadMeshFromFile( FileIn ) ) CloseFile(FileIn) ;-------------------------------------------------------- EntityColor Model(2) ,255,0,0 PositionEntity Model(2), -100,0,200 ; ************************************************************************************************ Function SaveMeshInFile( Stream , Mesh ) WriteLine Stream,CountSurfaces(Mesh) For S = 1 To CountSurfaces(Mesh) Surface = GetSurface(Mesh,S) WriteFloat Stream,CountVertices(Surface) For V = 0 To CountVertices(Surface) - 1 WriteFloat Stream,VertexX#(Surface,V) WriteFloat Stream,VertexY#(Surface,V) WriteFloat Stream,VertexZ#(Surface,V) WriteFloat Stream,VertexU#(Surface,V, 0) WriteFloat Stream,VertexV#(Surface,V, 0) WriteFloat Stream,VertexW#(Surface,V, 0) WriteFloat Stream,VertexU#(Surface,V, 1) WriteFloat Stream,VertexV#(Surface,V, 1) WriteFloat Stream,VertexW#(Surface,V, 1) WriteFloat Stream,VertexNX#(Surface,V) WriteFloat Stream,VertexNY#(Surface,V) WriteFloat Stream,VertexNZ#(Surface,V) WriteFloat Stream,VertexRed(Surface,V) WriteFloat Stream,VertexGreen(Surface,V) WriteFloat Stream,VertexBlue(Surface,V) Next WriteLine Stream,CountTriangles(Surface) For T = 0 To CountTriangles(Surface) - 1 WriteFloat Stream,TriangleVertex(Surface,T,0) WriteFloat Stream,TriangleVertex(Surface,T,1) WriteFloat Stream,TriangleVertex(Surface,T,2) Next Next End Function ; ************************************************************************************************ Function LoadMeshFromFile( Stream ) Local Mesh,SCount,VCount,TCount,S,VNX#,VNY#,VNZ# Local Surface,V1,T,X#,Y#,Z#,tU1#,tV1#,tW1#,tU2#,tV2#,tW2#,VT0,VT1,VT2 Mesh = CreateMesh() SCount = ReadLine(Stream) For S = 1 To SCount Surface = CreateSurface(Mesh) VCount = ReadFloat(Stream) For V1 = 0 To VCount - 1 X# = ReadFloat(Stream) Y# = ReadFloat(Stream) Z# = ReadFloat(Stream) tU1# = ReadFloat(Stream) tV1# = ReadFloat(Stream) tW1# = ReadFloat(Stream) tU2# = ReadFloat(Stream) tV2# = ReadFloat(Stream) tW2# = ReadFloat(Stream) VNX# = ReadFloat(Stream) VNY# = ReadFloat(Stream) VNZ# = ReadFloat(Stream) VCR# = ReadFloat(Stream) VCG# = ReadFloat(Stream) VCB# = ReadFloat(Stream) AddVertex Surface,X#,Y#,Z#,tU1#,tV1#,tW1# VertexNormal Surface,V1,VNX#,VNY#,VNZ# VertexColor Surface,V1, VCR, VCG, VCB VertexTexCoords Surface, V1, tU1#, tV1#, tW1#, 0 VertexTexCoords Surface, V1, tU2#, tV2#, tW2#, 1 Next TCount = ReadFloat(Stream) For T = 0 To TCount - 1 VT0 = ReadFloat(Stream) VT1 = ReadFloat(Stream) VT2 = ReadFloat(Stream) AddTriangle Surface,VT0,VT1,VT2 Next Next UpdateNormals Mesh Return Mesh End Function ; ************************************************************************************************ While Not KeyDown(1) If KeyDown(203) Then ; LEFT MoveEntity camera,-4,0,0 EndIf If KeyDown(205) Then ;RIGHT MoveEntity camera,4,0,0 EndIf If KeyDown(200) Then ; UP MoveEntity camera,0,0,4 EndIf If KeyDown(208) Then ; DOWN MoveEntity camera,0,0,-4 EndIf UpdateWorld ; wird für Animation und die Kollision gebraucht RenderWorld Flip Wend End |
||
![]() |
Suco-XBetreff: ......... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] FileOut$ = WriteFile("Test.dat") SaveMeshInFile (FileOut$, Model(1) ) Ein stück weiter unten hast du es doch richtig gemacht. Tu das $ weg, datei handles müssen in Integer Variablen gespeichert werden. Vllt lags daran, jedenfalls schwerer Fehler. bye |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Liegt nicht an FileOut mit $, denn ohne gehts auch nicht, ich habe das schon führer ausprobiert, zu sicherheit jetzt nochmal getestet.
-------------------------------------------------------------------------- Das mit PositionEntity 100,0,200 Plötzlich -100 statt 100, ist schon richtig, denn es ist ein anderes Model. PositionEntity Model(1), 100,0,200 -> das Orginalmesh, das gespeichert wird, ist auf der rechten Seite. PositionEntity Model(2), -100,0,200 -> das geladene kreierte Mesh soll auf der linken Seite und zu bessern Erkennung sogar rot gefärbt. -------------------------------------------------------------------------- Model(2) = (LoadMeshFromFile( FileIn )) auch nicht wenn ich die Klammern drumherrum wegnehme oder Model(2) = CopyMesh( LoadMeshFromFile( FileIn ) ) geht auch nicht Code: [AUSKLAPPEN] FileIn = ReadFile("Test.dat")
;Model(2) = ( LoadMeshFromFile( FileIn ) ) Model(2) = CopyMesh( LoadMeshFromFile( FileIn ) ) CloseFile(FileIn) Auch nicht an den Vertexfarben, es gibt einen Hintergrund, und das kreierte Mesh wird rot gefärbt, und der Code speichert und ladet jetzt auch Vertexfarben. Und alle Objekte sind in der Kamerasichtreichweite, und zu not kann man soger mit den Pfeiltasten die Kamera bewegen. |
||
- Zuletzt bearbeitet von StarGazer am Mo, Apr 26, 2004 13:10, insgesamt 2-mal bearbeitet
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe einen Fehler gefunden.
Der Fehler liegt darin das beim herreinladen der Datei, ein Flascher Wert in die " TCount " Varibale geladen wird ( liegt nicht am FileOut mit $, denn ohne ist es auch falsch ), aber selbst wenn man per Hand den richten Wert eingibt wird das Objekt zwar erzeugt, aber mit Fehlern. |
||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe den Fehler gefunden und behoben.
Wie ich es schon vermutet habe, lag es an den Mesh-Speichern und Laden Codes. Den beim speichern wurde WriteLine benutzt Code: [AUSKLAPPEN] WriteLine Stream,CountTriangles(Surface)
und beim laden ReadFloat Code: [AUSKLAPPEN] TCount = ReadFloat(Stream)
wenn man es in Code: [AUSKLAPPEN] TCount = ReadLine(Stream)
umschreibt, funktioniert es wunderbar, und sogar ohne irgendwelche Meshfeher. trotzallem Danke an alle cu |
||
- Zuletzt bearbeitet von StarGazer am Mo, Apr 26, 2004 13:45, insgesamt einmal bearbeitet
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber das ist die einzigste Zeile die geändert habe, und dann lief es.
Der Code sonst ist fabelhaft, und bin Dir echt dankbar daß es ihn gibt. |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group