Code archives/3D Graphics - Mesh/OBJ Exporter

This code has been declared by its author to be Public Domain code.

Download source code

OBJ Exporter by Leon Drake2010
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