Loading and Saving my own Meshes

Blitz3D Forums/Blitz3D Beginners Area/Loading and Saving my own Meshes

Stevie G(Posted 2003) [#1]
Can someone please have alook atthis code and tell me what the problem is :-

;load and save meshes
Graphics3D 640,480,16,1
Global car,car2,pos

camera=CreateCamera()
light=CreateLight()

car=CreateCube()
save_mesh(car)
FreeEntity car
newcar=load_mesh()

SetBuffer BackBuffer()
PositionEntity camera,0,10,0:PointEntity camera,newcar

While Not KeyDown(1)

TurnEntity newcar,1,1,1

UpdateWorld()
RenderWorld()

Flip

Wend

End




Function save_mesh(mesh)
file=WriteFile("test.my3d")
WriteInt(file,CountSurfaces(mesh))
For surface_num=1 To CountSurfaces(mesh)
temp_surface=GetSurface(mesh,surface_num)
WriteInt(file,CountVertices(temp_surface))
For vertex_num=0 To CountVertices(temp_surface)-1
WriteFloat(file,VertexX#(temp_surface,vertex_num))
WriteFloat(file,VertexY#(temp_surface,vertex_num))
WriteFloat(file,VertexZ#(temp_surface,vertex_num))
WriteFloat(file,VertexNX#(temp_surface,vertex_num))
WriteFloat(file,VertexNY#(temp_surface,vertex_num))
WriteFloat(file,VertexNZ#(temp_surface,vertex_num))
WriteFloat(file,VertexRed#(temp_surface,vertex_num))
WriteFloat(file,VertexGreen#(temp_surface,vertex_num))
WriteFloat(file,VertexBlue#(temp_surface,vertex_num))
WriteFloat(file,VertexU#(temp_surface,vertex_num))
WriteFloat(file,VertexV#(temp_surface,vertex_num))
WriteFloat(file,VertexW#(temp_surface,vertex_num))
Next
WriteInt(file,CountTriangles(temp_surface))
For triangle_num=0 To CountTriangles(temp_surface)-1
WriteInt(file,TriangleVertex(temp_surface,triangle_num,0))
WriteInt(file,TriangleVertex(temp_surface,triangle_num,1))
WriteInt(file,TriangleVertex(temp_surface,triangle_num,2))
Next
Next
CloseFile file
End Function

;======================================================================================================

Function load_mesh()

file=ReadFile("test.my3d")

mesh=CreateMesh()
For surface_num=1 To ReadInt(file)
temp_surface=CreateSurface(mesh)
For vertex_num=0 To ReadInt(file)-1
temp_vertex=AddVertex(temp_surface,ReadFloat(file),ReadFloat(file),ReadFloat(file))
VertexNormal temp_surface,temp_vertex,ReadFloat(file),ReadFloat(file),ReadFloat(file)
VertexColor temp_surface,temp_vertex,ReadFloat(file),ReadFloat(file),ReadFloat(file)
VertexTexCoords temp_surface,temp_vertex,ReadFloat(file),ReadFloat(file),ReadFloat(file)
Next
For triangle_num=0 To ReadInt(file)-1
AddTriangle(temp_surface,ReadInt(file),ReadInt(file),ReadInt(file))
Next
Next
CloseFile file
Return mesh
End Function


Floyd(Posted 2003) [#2]
You can't depend on function parameters being evaluated in any particular order...

DoSomething f(x), g(x)

might call g before or f. Or maybe not.

This means you need to replace

temp_vertex=AddVertex(temp_surface,ReadFloat(file),ReadFloat(file),ReadFloat(file))

with

x# = ReadFloat(file)
y# = ReadFloat(file)
z# = ReadFloat(file)

temp_vertex = AddVertex temp_surface, x,y,z