i dont know how to create one using a memblock, but this is a function from my editor used to convert a darkbasic object to .x format, shows how to read vertex data, if you change Get to Set then you can manipulate the object, it also shows you the format used to create .x format objects, usually if i want to create an object, then is how i would do it, but i do believe memblocks would be faster.
Function SaveX(filename$,id)
color as dword
limbs = 0
Repeat : Inc limbs,1 : Until Limb Exist(id,limbs) = 0
If File Exist(filename$) : Delete File filename$ : Open To Write 1,filename$
Else : Open To Write 1,filename$ : EndIf
Write String 1,"xof 0303txt 0032"
Write String 1,"// xfile exported by DarkBasic World Creator"
Write String 1,"// DarkBasic World Creator, By Michael Mihalyfi aka MSon - [email protected]"
Write String 1,"// xFile Export Code, By Mike Shihrer, aka Visigoth"
Write String 1,""
Write String 1,""
cl = (limbs - 1)
For i = 0 To (limbs - 1)
write string 1," Frame Limb_"+Str$(cl)+" {"
write string 1," FrameTransformMatrix {"
write string 1," 1.000000, 0.000000, 0.000000, 0.000000,"
write string 1," 0.000000, 1.000000, 0.000000, 0.000000,"
write string 1," 0.000000, 0.000000, 1.000000, 0.000000,"
write string 1," "+Str$(Limb Position X(id,cl),6)+", "+ Str$(Limb Position Y(id,cl),6)+", "+Str$(Limb Position Z(id,cl),6)+", 1.000000;;"
write string 1," }"
write string 1," "
write string 1," Mesh Limb_"+Str$(cl)+" {"
Lock VertexData For Limb id,cl
verts = Get VertexData Vertex Count()
indexes = Get VertexData Index Count()
faces = indexes/3
write string 1," "+Str$(verts)+";"
For i = 0 To (verts-2)
write string 1," "+Str$(Get VertexData Position X(i),6)+","+Str$(Get VertexData Position Y(i),6)+","+Str$(Get VertexData Position Z(i),6)+";," : Next i
write string 1," "+Str$(Get VertexData Position X(i),6)+","+Str$(Get VertexData Position Y(i),6)+","+Str$(Get VertexData Position Z(i),6)+";;"
write string 1," "+Str$(faces)+";"
for i = 0 To (indexes-6) Step 3
write string 1," 3;"+Str$(Get IndexData(i))+","+Str$(Get IndexData(i+1))+","+Str$(Get IndexData(i + 2))+";,"
Next i
write string 1," 3;"+Str$(Get IndexData(i))+","+Str$(Get IndexData(i+1))+","+Str$(Get IndexData(i+2))+";;"
UnLock VertexData
write string 1," "
write string 1," MeshNormals {"
Lock VertexData For Limb id,cl
verts = Get VertexData Vertex Count()
indexes = Get VertexData Index Count()
faces = indexes / 3
write string 1," "+Str$(verts)+";"
for i = 0 to (verts - 2)
write string 1," "+Str$(Get VertexData Normals X(i),6)+","+Str$(Get VertexData Normals Y(i),6)+","+Str$(Get VertexData Normals Z(i),6)+";,"
Next i
write string 1," "+Str$(Get VertexData Normals X(i),6)+","+Str$(Get VertexData Normals y(i),6)+","+Str$(Get VertexData Normals Z(i),6)+";;"
write string 1," "+Str$(faces)+";"
For i = 0 To (indexes-6) Step 3
write string 1," 3;"+Str$(Get IndexData(i))+","+Str$(Get IndexData(i+1))+","+Str$(Get IndexData(i+2))+";,"
Next i
write string 1," 3;"+Str$(Get IndexData(i))+","+Str$(Get IndexData(i+1))+","+Str$(Get IndexData(i+2))+";;"
UnLock VertexData
write string 1," }"
write string 1," "
write string 1," MeshTextureCoords {"
Lock VertexData For Limb id,cl
verts = Get VertexData Vertex Count()
write string 1," "+Str$(verts)+";"
For i = 0 To (verts-2)
write string 1," "+Str$(Get VertexData U(i),6)+","+Str$(Get VertexData V(i),6)+";,"
Next i
write string 1," "+Str$(Get VertexData U(i),6)+","+Str$(Get VertexData V(i),6)+";;"
UnLock VertexData
write string 1," }"
write string 1," "
write string 1," MeshVertexColors {"
Lock VertexData For Limb id,cl
verts = Get VertexData Vertex Count()
write string 1," "+Str$(verts)+";"
For i = 0 To (verts-2)
color = Get VertexData Diffuse(i)
write string 1," "+Str$(i)+";"+Str$(RGBR(color),6)+";"+Str$(RGBG(color),6)+";"+Str$(RGBB(color),6)+";1.000000;;,"
Next i
write string 1," "+Str$(i)+";"+Str$(RGBR(color),6)+";"+Str$(RGBG(color),6)+";"+Str$(RGBB(color),6)+";1.000000;;;"
UnLock VertexData
write string 1," }"
write string 1," "
write string 1," MeshMaterialList {"
write string 1," 1;"
Lock VertexData For Limb id,cl
write string 1," "+Str$((Get VertexData Index Count()/3))+";"
For ii = 1 To (Get VertexData Index Count()/3)
write string 1," 0;"
Next ii
UnLock VertexData
write string 1," Material Mat_Limb_"+Str$(cl)+"{"
write string 1," 1.000000,1.000000,1.000000,1.000000;;"
write string 1," 1.000000;"
write string 1," 0.000000,0.000000,0.000000;;"
write string 1," 0.000000,0.000000,0.000000;;"
write string 1," TextureFileName {"
write string 1," "+Chr$(34)+Limb Texture Name(id,cl)+Chr$(34)+";"
write string 1," }"
write string 1," }"
write string 1," }"
write string 1," }"
write string 1,"}"
Dec cl,1 : Next i : Close File 1
EndFunction
