obj.lua 1020 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. local split=function(inputstr, sep)
  2. sep=sep or '%s'
  3. local t={}
  4. for field,s in string.gmatch(inputstr, "([^"..sep.."]*)("..sep.."?)") do
  5. table.insert(t,field)
  6. if s=="" then
  7. return t
  8. end
  9. end
  10. end
  11. local loadobj=function(file)
  12. local f=io.open(file,"r")
  13. local s=""
  14. local data={}
  15. while true do
  16. s=f:read()
  17. if s==nil then
  18. break
  19. end
  20. local groups=split(s,"%s")
  21. if data[groups[1]]==nil then
  22. data[groups[1]]={}
  23. end
  24. local groups2={}
  25. for i=2,#groups do
  26. if groups[1]=="f" then
  27. table.insert(groups2,groups[i])
  28. else
  29. table.insert(groups2,tonumber(groups[i]))
  30. end
  31. end
  32. table.insert(data[groups[1]],groups2)
  33. end
  34. f:close()
  35. local f=data["f"]
  36. data["f"]={}
  37. for _,vv in ipairs(f) do
  38. for j=1,#vv-2 do
  39. for i=3,1,-1 do
  40. if i==1 then
  41. v=vv[i]
  42. else
  43. v=vv[i+j-1]
  44. end
  45. local qq=split(v,"/")
  46. local ww={}
  47. for _,j in ipairs(qq) do
  48. table.insert(ww,tonumber(j))
  49. end
  50. table.insert(data["f"],ww)
  51. end
  52. end
  53. end
  54. return data
  55. end
  56. return loadobj