Code archives/3D Graphics - Mesh/OBJ Exporter
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| I couldn't find one of these anywhere on the forums or in the archives so i wrote a simple one, i'm sure it could be improved but it works.. | |||||
Function SaveMeshOBJ(mesh,filename$)
Local file,surfcount,syrf,si,brush,brushtex,texname$,nov,facedef$,offset,vi
If mesh = 0 Return False
file=WriteFile(stripext$(filename$)+".mtl")
If Not file Return False ;fail code
WriteLine(file,"# Wavefront material file")
WriteLine(file,"# Converted from b3d by Landon Ritchie")
;get a list of materials
surfcount = CountSurfaces(mesh)
For si = 1 To CountSurfaces(mesh)
surf=GetSurface(mesh,si)
brush = GetSurfaceBrush(surf)
brushtex = GetBrushTexture(brush)
texname$ = TextureName$(brushtex)
WriteLine(file,"newmtl "+stripext$(stripdir$(texname$))+"1073741824")
WriteLine(file,"Ka 1 1 1")
WriteLine(file,"Ns 8")
WriteLine(file,"illum 2")
WriteLine(file,"map_Kd "+stripdir$(texname$))
Next
CloseFile(file)
file=WriteFile(filename$)
If Not file Return False ;fail code
WriteLine(file,"# Wavefront object file")
WriteLine(file,"# Converted from b3d by Landon Ritchie")
WriteLine(file,"mtllib "+stripdir$(stripext$(filename$)+".mtl"))
offset = 1
For si = 1 To CountSurfaces(mesh)
surf=GetSurface(mesh,si)
brush = GetSurfaceBrush(surf)
brushtex = GetBrushTexture(brush)
texname$ = TextureName$(brushtex)
WriteLine(file,"usemtl "+stripext$(stripdir$(texname$))+"1073741824")
facedef$ = "f"
nov=CountVertices(surf)
For vi = 0 To CountVertices(surf)-1
facedef$ = facedef$ + " "+Str(vi+offset)+"/"+Str(vi+offset)+"/"+Str(vi+offset)
Next
WriteLine(file,facedef$)
For vi = 0 To CountVertices(surf)-1
WriteLine(file,"v "+VertexX(surf,vi)+" "+VertexY(surf,vi)+" "+VertexZ(surf,vi))
Next
For vi = 0 To CountVertices(surf)-1
WriteLine(file,"vt "+(-VertexU(surf,vi))+" "+(-VertexV(surf,vi))+" "+VertexW(surf,vi))
Next
For vi = 0 To CountVertices(surf)-1
WriteLine(file,"vn "+Abs(VertexNX(surf,vi))+" "+Abs(VertexNY(surf,vi))+" "+Abs(VertexNZ(surf,vi)))
Next
offset = offset + CountVertices(surf)
Next
CloseFile(file)
DebugLog "Exported OBJ"
End Function
Function stripdir$(filename$)
If Len(filename$) = 0 Then Return filename$
For i = Len(filename$) To 1 Step -1
If Mid(filename$,i,1) = "\" Or Mid(filename$,i,1) = "/" Then
;DebugLog("WAT: "+Right(filename$,Len(filename$)-i))
Return Right(filename$,Len(filename$)-i)
EndIf
Next
Return filename$
End Function
Function stripext$(filename$)
If Len(filename$) = 0 Then Return filename$
For i = Len(filename$) To 1 Step -1
If Mid(filename$,i,1) = "." Then
Return Left(filename$,i-1)
EndIf
Next
Return filename$
End Function
Function StripAll$(filename$)
If Len(filename$) = 0 Then Return filename$
Return stripext(stripdir(filename$))
End Function |
Comments
None.
Code Archives Forum