Guest User

Untitled

a guest
May 14th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Sub LoadOBJ(filename As String, m As ModelStatic3D Ptr)
  2.     Dim fh As Integer
  3.     Dim txt As String
  4.     Dim cmd As String
  5.     Dim arg As String
  6.     Dim temp As String
  7.     Dim set1 As String
  8.     Dim set1a As String
  9.     Dim set2 As String
  10.     Dim set2a As String
  11.     Dim set3 As String
  12.     Dim set3a As String
  13.     Dim i As Integer = 0
  14.     Dim j As Integer = 0
  15.     Dim k As Integer = 0
  16.     fh = FreeFile()
  17.     Open filename For Input As #fh
  18.    
  19.     Do Until Eof(fh)
  20.         Line Input #fh, txt
  21.         cmd = Trim(Left(txt, InStr(txt, " ")))
  22.         If cmd = "v" Then
  23.             m->v_cnt = m->v_cnt + 1
  24.         EndIf
  25.         If cmd = "vt" Then
  26.             m->t_cnt = m->t_cnt + 1
  27.         EndIf
  28.         If cmd = "f" Then
  29.             m->f_cnt = m->f_cnt + 1
  30.         EndIf
  31.     Loop
  32.    
  33.     Close #fh
  34.    
  35.     m->m_verts = Allocate(m->v_cnt * SizeOf(Vert3D))
  36.     m->m_faces = Allocate(m->f_cnt * SizeOf(Tri3D))
  37.     m->m_texts = Allocate(m->t_cnt * SizeOf(Tex2D))
  38.    
  39.     Open filename For Input As #fh
  40.    
  41.     Do Until Eof(fh)
  42.         Line Input #fh, txt
  43.         cmd = Trim(Left(txt, InStr(txt, " ")))
  44.         If cmd = "v" Then
  45.             'Store vertices in memory
  46.             arg = Trim(Mid(txt, InStr(txt, " ")))
  47.             temp = Trim(Mid(arg, InStr(arg, " ")))
  48.            
  49.             m->m_verts[i].x = Val(Trim(Left(arg,InStr(arg, " "))))
  50.             m->m_verts[i].y = Val(Trim(Left(temp, InStr(temp, " "))))
  51.             m->m_verts[i].z = Val(Trim(Mid(temp, InStr(temp, " "))))
  52.             i = i + 1
  53.         EndIf
  54.         If cmd = "vt" Then
  55.             'Store tex-coords in memory
  56.             arg = Trim(Mid(txt, InStr(txt, " ")))
  57.            
  58.             m->m_texts[j].u = Val(Trim(Left(arg, InStr(arg, " "))))
  59.             m->m_texts[j].v = Val(Trim(Mid(arg, InStr(arg, " "))))
  60.             j = j + 1
  61.         EndIf
  62.         If cmd = "f" Then
  63.             'Store faces in memory
  64.             arg = Trim(Mid(txt, InStr(txt, " ")))
  65.             temp = Trim(Mid(arg, InStr(arg, " ")))
  66.            
  67.             set1 = Trim(Left(arg,InStr(arg, " ")))
  68.             set1a = Trim(Mid(set1, InStr(set1, "/")), "/")
  69.            
  70.             set2 = Trim(Left(temp, InStr(temp, " ")))
  71.             set2a = Trim(Mid(set2, InStr(set2, "/")), "/")
  72.            
  73.             set3 = Trim(Mid(temp, InStr(temp, " ")))
  74.             set3a = Trim(Mid(set3, InStr(set3, "/")), "/")
  75.            
  76.             'In .OBJ format, faces are stored as follows:
  77.             ' f v/vt/vn v/vt/vn v/vt/vn ; hence the "set<n>" variables
  78.             m->m_faces[k].v1 = m->m_verts[ValInt(Trim(Left(set1, InStr(set1, "/")), "/")) - 1]
  79.             m->m_faces[k].t1 = m->m_texts[ValInt(Trim(Left(set1a, InStr(set1a, "/")), "/")) - 1]
  80.            
  81.             m->m_faces[k].v2 = m->m_verts[ValInt(Trim(Left(set2, InStr(set2, "/")), "/")) - 1]
  82.             m->m_faces[k].t2 = m->m_texts[ValInt(Trim(Left(set2a, InStr(set2a, "/")), "/")) - 1]
  83.            
  84.             m->m_faces[k].v3 = m->m_verts[ValInt(Trim(Left(set3, InStr(set3, "/")), "/")) - 1]
  85.             m->m_faces[k].t3 = m->m_texts[ValInt(Trim(Left(set3a, InStr(set3a, "/")), "/")) - 1]
  86.            
  87.             k = k + 1          
  88.         EndIf
  89.     Loop
  90.    
  91.     Close #fh
  92. End Sub
Add Comment
Please, Sign In to add comment