problems with x files?

Blitz3D Forums/Blitz3D Programming/problems with x files?

jigga619(Posted 2003) [#1]
I looked in the code archives to try to find a way so that my program will create random meshes and save them together as a single x file. What happens is instead of saving them together, the program resaves the previous mesh as the newer x file, so all I get is one single object in the x file instead of all the meshed created. Here is the code.




Graphics3D 800,600

light=CreateLight()
camera=CreateCamera()
SetBuffer BackBuffer()


t#=1.0




t1=OpenFile(t# + ".txt")

;make a text file called bogus and place it in the directory

t2=OpenFile(t#+ ".txt")

t3=WriteFile("completelevel.x")

;;start off with a random mesh

SeedRnd(MilliSecs())






If Rnd(5)>-1 And Rnd(5)<2 Then mesh=CreateCube()



If Rnd(5)>1 And Rnd(5)<3 Then mesh=CreateSphere()



If Rnd(5)>2 And Rnd(5)<4 Then mesh=CreatePlane()





If Rnd(5)>3 And Rnd(5)<5 Then mesh=CreateCylinder()



If Rnd(5)>4 And Rnd(5)<6 Then mesh=CreateCone()









Function SaveMeshX(mesh,file$)
;single surface at the moment
cnt=CountSurfaces(mesh)

If cnt=0 Then Return

;TODO Multi surface support
surf=GetSurface(mesh,1)

out=WriteFile(file$)
WriteLine out,"xof 0302txt 0064"
WriteLine out,""
WriteLine out,"Header {"
WriteLine out," 1;"
WriteLine out," 0;"
WriteLine out," 1;"
WriteLine out,"}"
WriteLine out,""
WriteLine out,"Frame frm_Scene_Root {"
WriteLine out," FrameTransformMatrix {"
WriteLine out," 1.000000,0.000000,0.000000,0.000000,"
WriteLine out," 0.000000,1.000000,0.000000,0.000000,"
WriteLine out," 0.000000,0.000000,1.000000,0.000000,"
WriteLine out," 0.000000,0.000000,0.000000,1.000000;"
WriteLine out,"}"
WriteLine out,""
name$=EntityName$(mesh)
If name$="" Then name$="Unknown"
WriteLine out,"Frame frm_"+name$+" {"
WriteLine out," FrameTransformMatrix {"
WriteLine out," 1.000000,0.000000,0.000000,0.000000,"
WriteLine out," 0.000000,1.000000,0.000000,0.000000,"
WriteLine out," 0.000000,0.000000,1.000000,0.000000,"
WriteLine out," 0.000000,0.000000,0.000000,1.000000;"
WriteLine out,"}"
WriteLine out,""
WriteLine out," Mesh frm_"+name$+" {"
WriteLine out,CountVertices(surf)+";"
For a=0 To CountVertices(surf)-1
WriteLine out,VertexX(surf,a)+";"+VertexY(surf,a)+";"+VertexZ(surf,a)+";,"
Next
WriteLine out,""
WriteLine out," "+CountTriangles(surf)+";"
For a=0 To CountTriangles(surf)-1
in1=TriangleVertex(surf,a,0)
in2=TriangleVertex(surf,a,1)
in3=TriangleVertex(surf,a,2)
ln$=" 3;"+in1+","+in2+","+in3+";"
If a=CountTriangles(surf)-1 Then ln$=ln$+";" Else ln$=ln$+","
WriteLine out,ln$
Next
WriteLine out,""

WriteLine out,"MeshMaterialList {"
WriteLine out,"1;"
WriteLine out,"1;"
WriteLine out,"0;;"
WriteLine out,""
WriteLine out,"Material {"

WriteLine out," 1.000000,1.000000,1.000000,1.000000;;";rgba
WriteLine out," 1.000000;"
WriteLine out," 0.500000,0.500000,0.500000;;"
WriteLine out," 0.000000,0.000000,0.000000;;"
WriteLine out,"}"
WriteLine out,"}"
WriteLine out,""
WriteLine out,"MeshNormals {"
WriteLine out,CountVertices(surf)+";"
For a=0 To CountVertices(surf)-1
WriteLine out,VertexNX(surf,a)+";"+VertexNY(surf,a)+";"+VertexNZ(surf,a)+";,"
Next
WriteLine out," "+CountTriangles(surf)+";"
For a=0 To CountTriangles(surf)-1
in1=TriangleVertex(surf,a,0)
in2=TriangleVertex(surf,a,1)
in3=TriangleVertex(surf,a,2)
ln$=" 3;"+in1+","+in2+","+in3+";"
If a=CountTriangles(surf)-1 Then ln$=ln$+";" Else ln$=ln$+","
WriteLine out,ln$
Next
WriteLine out,"}"
WriteLine out,""

WriteLine out,"MeshTextureCoords {"
WriteLine out,CountVertices(surf)+";"
For a=0 To CountVertices(surf)-1
ln$=VertexU(surf,a)+";"+VertexV(surf,a)+";"
If a=CountVertices(surf)-1 Then ln$=ln$+";" Else ln$=ln$+","
WriteLine out,ln$
Next
WriteLine out," }"
WriteLine out," }"
WriteLine out," }"
WriteLine out,"}"
CloseFile out
End Function





While Not KeyDown(1)


file$=(t#+".txt")









If KeyDown(57) Then End



If KeyHit(28)

SaveMeshX(mesh,file$)
EndIf





If t1 And t2 And t3 Then
While Not Eof(t1):WriteLine(t3,ReadLine$(t1)):Wend
While Not Eof(t2):WriteLine(t3,ReadLine$(t2)):Wend
EndIf











RenderWorld
UpdateWorld





Text 300,200, "Press Enter to create another model"
Text 300,220, "Press Space to save and exit"

Text 300,240, "T#"
Text 340,240,t#


Flip
Wend
End


Sunteam Software(Posted 2003) [#2]
I don't know if this helps but both t1 and t2 are using the same filename thus both are referencing the same file.