Guest User

Untitled

a guest
Jun 26th, 2018
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Graphics3D 640,480,0,2
  2. SetBuffer BackBuffer()
  3. piv=CreatePivot()
  4. camera=CreateCamera(piv)
  5. light=CreateLight()
  6. RotateEntity light,90,0,0
  7.  
  8. filename$="grassfield.obj"
  9.  
  10. obj=LoadObj(filename$)
  11.  
  12. PositionEntity obj,0,0,15
  13. ScaleEntity obj,10,10,10
  14. While Not KeyHit(1)
  15. TurnEntity piv,0,-MouseXSpeed(),0
  16. TurnEntity camera,-MouseYSpeed(),0,0
  17.  
  18.  
  19.  
  20. cx=0
  21. cy=0
  22. cz=0
  23.  If KeyDown(17)=True Then cz=1
  24.  If KeyDown(31)=True Then cz=-1
  25.  If KeyDown(30)=True Then cx=-1
  26.  If KeyDown(32)=True Then cx=1
  27.   If KeyDown(57)=True Then cy=1
  28.  If KeyDown(42)=True Then cy=-1
  29.  
  30. MoveEntity piv,cx,cy,cz
  31. MoveMouse 640/2,480/2
  32.  RenderWorld
  33.  
  34. UpdateWorld
  35.  ;TurnEntity obj,0.4,0.3,0.2
  36.  
  37.  Text 0,0,"filename$="+filename$
  38.  
  39.  Flip
  40.  
  41. Wend
  42.  
  43. ; By Terabit
  44.  
  45. Function LoadObj(file$)
  46.  Local infile, intex$, cmd$, themesh, blanksurf, ek, its
  47.  Local P1$, P2$, P3$, P4$, vtx1#, vtx2#, vtx3#, vtx4#
  48.  Local tx1#, tx2#, tx3#, tx4#, retmesh, v, uvo
  49.  If FileType(file$)=0 Then Return -1
  50.  infile = ReadFile(file$)
  51.  
  52.  themesh = CreateMesh()
  53.  tempvert = CreateMesh()
  54.  retmesh = CreateMesh()
  55.  
  56.  TempVertSurf = CreateSurface(tempvert)
  57.  blanksurf = CreateSurface(themesh)
  58.  
  59.  While Not Eof(infile)
  60.  intex$ = ReadLine$(infile)
  61.  cmd$ = ParseEntry(intex$,0)
  62.  its = CountIt(intex$," ")
  63.  
  64.  If its>1 Then P1$ = ParseEntry(Intex$,1) Else p1$=""
  65.  If its>2 Then P2$ = ParseEntry(Intex$,2) Else p2$=""
  66.  If its>3 Then P3$ = ParseEntry(Intex$,3) Else p3$=""
  67.  If its>4 Then P4$ = ParseEntry(Intex$,4) Else p4$=""
  68.  
  69.  ;DebugLog "Command: "+cmd$+" P1: "+p1$+" P2: "+p2$+" P3: "+p3$+" P4: "+p4$
  70.  
  71.  Select cmd$
  72.  Case "V"
  73.  AddVertex blanksurf,Float(P1$),Float(P2$),Float(P3$)*-1
  74.  Case "VT"
  75.  AddVertex TempVertSurf,Rand(10),Rand(10),Rand(10)
  76.  VertexTexCoords TempVertSurf,vtx,Float(P1$),1-Float(P2$)
  77.  ;DebugLog "P1$="+p1$+" P2$= "+p2$
  78.  ;DebugLog "U = "+P1$+" V = "+P2$
  79.  vtx = vtx + 1
  80.  Case "USEMTL"
  81.  DebugLog "Hoot "+P1$
  82.  currentsurf = CreateSurface(retmesh)
  83.  If Trim$(P1$)<>"" Then
  84. DebugLog Trim$(P1$)
  85.   If Instr(p1$,".")<>0 And FileType(modelpath$+p1$)<>0 Then sometex = LoadTexture(modelpath$+p1$,1+VRAM) : Goto passway
  86.   If FileType(modelpath$+p1$+".PNG")<>0 Then sometex = LoadTexture(modelpath$+p1$+".PNG",1+VRAM) : Goto passway
  87.   If FileType(modelpath$+p1$+".BMP")<>0 Then sometex = LoadTexture(modelpath$+p1$+".BMP",1+VRAM) : Goto passway
  88.   If FileType(modelpath$+p1$+".TGA")<>0 Then sometex = LoadTexture(modelpath$+p1$+".TGA",1+VRAM) : Goto passway
  89.   If FileType(modelpath$+p1$+".JPG")<>0 Then sometex = LoadTexture(modelpath$+p1$+".JPG",1+VRAM) : Goto passway
  90.  
  91.   sometex = CreateTexture(512,512,1+VRAM)
  92.   SetBuffer TextureBuffer(sometex)
  93.   ClsColor 128,128,128
  94.   Cls
  95.   SetBuffer BackBuffer()
  96.   ;savetex(p1$+".PNG",sometex)
  97.   FreeTexture sometex
  98.   ;sometex = LoadTexture(modelpath$+p1$+".BMP",1+VRAM)
  99.   DebugLog sometex
  100. .passway
  101.    If sometex<>0 Then
  102.     somebrush = CreateBrush(255,255,255)
  103.     BrushTexture somebrush,sometex
  104.     PaintSurface currentsurf,somebrush
  105.    EndIf
  106.   EndIf
  107.  Case "F"
  108.  If currentsurf = 0 Then
  109.   currentsurf = CreateSurface(retmesh)
  110.   sometex = CreateTexture(512,512,1+VRAM)
  111.   SetBuffer TextureBuffer(sometex)
  112.   ClsColor 128,128,128
  113.   Cls
  114.   SetBuffer BackBuffer()
  115.   somebrush = CreateBrush(255,255,255)
  116.   BrushTexture somebrush,sometex
  117.   PaintSurface currentsurf,somebrush
  118.  EndIf
  119.  
  120.   Vtx1# = -65535 : TX1# = -65535
  121.   Vtx2# = -65535 : TX2# = -65535
  122.   Vtx3# = -65535 : TX3# = -65535
  123.   Vtx4# = -65535 : TX4# = -65535
  124.    
  125.   If its>1 Then
  126.    ug = CountIT(P1$,"/")
  127.    If ug>0 Then
  128.    Vtx1#=Float(ParseEntry(p1$,0,"/"))-1
  129.    EndIf
  130.  
  131.    If ug>1 Then
  132.    tx1# = Float(ParseEntry(p1$,1,"/"))-1
  133.    EndIf
  134.   EndIf
  135.  
  136.   If its>2 Then
  137.    ug = CountIT(P2$,"/")
  138.    If ug>0 Then
  139.    Vtx2#=Float(ParseEntry(p2$,0,"/"))-1
  140.    EndIf
  141.  
  142.    If ug>1 Then
  143.    tx2# = Float(ParseEntry(p2$,1,"/"))-1
  144.    EndIf
  145.   EndIf
  146.  
  147.   If its>3 Then
  148.    ug = CountIT(P3$,"/")
  149.    If ug>0 Then
  150.    Vtx3#=Float(ParseEntry(p3$,0,"/"))-1
  151.    EndIf
  152.  
  153.    If ug>1 Then
  154.    tx3# = Float(ParseEntry(p3$,1,"/"))-1
  155.    EndIf
  156.   EndIf
  157.  
  158.  
  159.   If its>4 Then
  160.    ug = CountIT(P4$,"/")
  161.    If ug>0 Then
  162.    Vtx4#=Float(ParseEntry(p4$,0,"/"))-1
  163.    EndIf
  164.  
  165.    If ug>1 Then
  166.    tx4# = Float(ParseEntry(p4$,1,"/"))-1
  167.    EndIf
  168.   EndIf
  169.  
  170.   If vtx1<0 Then vtx1 = 0
  171.   If vtx2<0 Then vtx2 = 0
  172.   If vtx3<0 Then vtx3 = 0
  173.   If vtx4<0 Then vtx4 = 0
  174.  
  175.   If vtx1>CountVertices(blanksurf)-1 Then vtx1 = CountVertices(blanksurf)-1
  176.   If vtx2>CountVertices(blanksurf)-1 Then vtx2 = CountVertices(blanksurf)-1
  177.   If vtx3>CountVertices(blanksurf)-1 Then vtx3 = CountVertices(blanksurf)-1
  178.   If vtx4>CountVertices(blanksurf)-1 Then vtx4 = CountVertices(blanksurf)-1
  179.  
  180.   If tx1>CountVertices(tempvertsurf)-1 Then tx1 = CountVertices(tempvertsurf)-1
  181.   If tx2>CountVertices(tempvertsurf)-1 Then tx2 = CountVertices(tempvertsurf)-1
  182.   If tx3>CountVertices(tempvertsurf)-1 Then tx3 = CountVertices(tempvertsurf)-1
  183.   If tx4>CountVertices(tempvertsurf)-1 Then tx4 = CountVertices(tempvertsurf)-1
  184.  
  185.   v = CountVertices(currentsurf)
  186.  
  187.   If its>1 Then
  188.    If tx1<0 Then tx1 = tx1 + vtx+1
  189.    UVO = TX1
  190.    If CountVertices(TempVertSurf)=0 Then
  191.     AddVertex currentsurf,VertexX(blanksurf,vtx1),VertexY(blanksurf,vtx1),VertexZ(blanksurf,vtx1)
  192.    Else
  193.     AddVertex currentsurf,VertexX(blanksurf,vtx1),VertexY(blanksurf,vtx1),VertexZ(blanksurf,vtx1),VertexU(TempVertSurf,UVO),VertexV(TempVertSurf,UVO)
  194.    EndIf
  195.   EndIf
  196.   If its>2 Then
  197.    If tx2<0 Then tx2 = tx2 + vtx+1    
  198.    UVO = TX2
  199.    ;DebugLog "TX2= "+tx2
  200.    If CountVertices(TempVertSurf)=0 Then
  201.     AddVertex currentsurf,VertexX(blanksurf,vtx2),VertexY(blanksurf,vtx2),VertexZ(blanksurf,vtx2)
  202.    Else
  203.     AddVertex currentsurf,VertexX(blanksurf,vtx2),VertexY(blanksurf,vtx2),VertexZ(blanksurf,vtx2),VertexU(TempVertSurf,UVO),VertexV(TempVertSurf,UVO)
  204.    EndIf
  205.   EndIf
  206.   If its>3 Then
  207.    If tx3<0 Then tx3 = tx3 + vtx+1
  208.    UVO = TX3
  209.    ;DebugLog "TX3= "+tx3
  210.    If CountVertices(TempVertSurf)=0 Then
  211.    AddVertex currentsurf,VertexX(blanksurf,vtx3),VertexY(blanksurf,vtx3),VertexZ(blanksurf,vtx3)
  212.    Else
  213.    AddVertex currentsurf,VertexX(blanksurf,vtx3),VertexY(blanksurf,vtx3),VertexZ(blanksurf,vtx3),VertexU(TempVertSurf,UVO),VertexV(TempVertSurf,UVO)
  214.    EndIf
  215.   EndIf
  216.   If its>4 Then
  217.    If tx4<0 Then tx4 = tx4 + vtx+1    
  218.    UVO = TX4
  219.    If CountVertices(TempVertSurf)=0 Then
  220.    AddVertex currentsurf,VertexX(blanksurf,vtx4),VertexY(blanksurf,vtx4),VertexZ(blanksurf,vtx4)
  221.    Else
  222.    AddVertex currentsurf,VertexX(blanksurf,vtx4),VertexY(blanksurf,vtx4),VertexZ(blanksurf,vtx4),VertexU(TempVertSurf,UVO),VertexV(TempVertSurf,UVO)
  223.    EndIf
  224.   EndIf
  225.  
  226.   AddTriangle currentsurf,v,v+1,v+2
  227.  
  228.   If its>4 Then
  229.    AddTriangle currentsurf,v+2,v+3,v
  230.   EndIf
  231.    
  232.  End Select
  233.  
  234.  Wend
  235.  CloseFile infile
  236.  FitMesh retmesh,0,0,0,1,1,1,True
  237.  FlipMesh retmesh
  238.  centermesh (retmesh)
  239.  UpdateNormals retmesh
  240.  FreeEntity tempvert
  241.  FreeEntity themesh
  242.  
  243.  Return retmesh
  244. End Function
  245.  
  246. Function ParseEntry$( Message$, Item, Sep$ = " ")
  247.  Local fas, count, spos, epos, num#, epon#,pos
  248.  
  249.  Repeat
  250.   fas = Instr(message$,sep$,fas+1)
  251.   count = count + 1
  252.  Until fas = 0 Or count = item
  253.  
  254.  spos = fas+1
  255.  epos = Instr(message$+sep$,sep$,fas+1)
  256.  grub$ = Upper$(Trim$(Mid$(message$,spos,(epos-spos))))
  257.  If Instr(grub$,"E-") Then
  258.   pos = Instr(grub$,"E-")
  259.   ;1.41e-02 = 1.41 * (10 ^ -2)
  260.   num# = Left$(grub$,pos-1)
  261.   epon# = Mid$(grub$,pos+1,Len(grub$)-(pos))
  262.   ;'DebugLog "Total: "+grub$
  263.   ;'DebugLog "Num: "+num#
  264.   ;'DebugLog "etex: "+Mid$(grub$,pos+1,Len(grub$)-(pos))
  265.   ;'DebugLog "Exp: "+epon#
  266.   num# = num# * (10 ^ epon#)
  267.   Return num#
  268.   Return "0.0"
  269.  Else
  270.   Return grub$
  271.  EndIf
  272. End Function
  273.  
  274. Function CountIt( Message$, Sep$=" ")
  275.  message$=Trim$(message$)
  276.  Local fas, count
  277.  Repeat
  278.  fas = Instr(message$,sep$,fas+1)
  279.   If fas<>0 Then count = count + 1
  280.  Until fas = 0
  281.  
  282.  Return count+1
  283. End Function
  284.  
  285. Function CenterMesh (entity)
  286.     FitMesh entity, -(MeshWidth (entity) / 2), -(MeshHeight (entity) / 2), -(MeshDepth (entity) / 2), MeshWidth (entity), MeshHeight (entity), MeshDepth (entity)
  287. End Function
Add Comment
Please, Sign In to add comment