May 26, 2020, 06:17:45 PM

Author Topic: [bb] Truespace 2 importer. by David Bird(Birdie) [ 1+ years ago ]  (Read 1137 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Truespace 2 importer.
Author : David Bird(Birdie)
Posted : 1+ years ago

Description : A little buggy but works ok. I'll be looking into this a little more but heres a start.

Code :
Code: BlitzBasic
  1. ;
  2. ;       Cob File Loader
  3. ;       ASCII only
  4. ;       (c)2002 David Bird
  5. ;       enquire@davebird.fsnet.co.uk
  6. ;
  7. ;Rules for use.
  8. ;truespace2 objects must be rotated to 0,0,0 in the editer before saving
  9. ;No children support. but multiple surfaces can be applied
  10. ;textures must be in the root dir of exe
  11. ;You get better results if you triangulate the mesh in ts
  12. Graphics3D 640,480,0,2
  13.  
  14. cam=CreateCamera()
  15. CameraRange cam,.1,300
  16. PositionEntity cam,0,0,-8
  17.  
  18.  
  19. mesh=LoadCobASCII("test.cob")   ;Can be run without triangulation but not very well.
  20.  
  21. lit=CreateLight()
  22. While Not KeyDown(1)
  23.         If KeyHit(17) Then w=1-w
  24.         If KeyDown(30) Then MoveEntity cam,0,0,.1
  25.         If KeyDown(44) Then MoveEntity cam,0,0,-.1
  26.         If KeyDown(200) Then TurnEntity cam,1,0,0
  27.         If KeyDown(208) Then TurnEntity cam,-1,0,0
  28.         If KeyDown(203) Then TurnEntity cam,0,1,0
  29.         If KeyDown(205) Then TurnEntity cam,0,-1,0
  30.         WireFrame w
  31.         UpdateWorld
  32.         RenderWorld
  33.         Text 0,0,vecx
  34.         Text 0,15,vecy
  35.         Text 0,30,vecz
  36.         Flip
  37. Wend
  38.  
  39.  
  40. ClearWorld
  41. EndGraphics
  42. End
  43.  
  44. ;
  45. ;       Cob File Loader
  46. ;       ASCII only
  47. ;       (c)2002 David Bird
  48. ;
  49. Type vrt
  50.         Field ind
  51.         Field x#,y#,z#
  52. End Type
  53.  
  54. Type tex
  55.         Field ind
  56.         Field u#,v#
  57. End Type
  58.        
  59. Type face
  60.         Field count
  61.         Field i[20]
  62.         Field matid
  63.         Field t[20]
  64. End Type
  65.  
  66. Function GetVert.vrt(index)
  67.         For v.vrt=Each vrt
  68.                 If vind=index Then Return v
  69.         Next
  70. End Function
  71.  
  72. Function Gettex.tex(index)
  73.         For t.tex=Each tex
  74.                 If tind=index Then Return t
  75.         Next
  76. End Function
  77.  
  78. Function LoadCobASCII(filename$)
  79.         file=ReadFile(filename$)
  80.         If file=0 Then Return 0
  81.        
  82.         mesh=CreateMesh()
  83.         dum$=ReadLine(file)     ;strip 2 info lines
  84.         dum=ReadLine(file)
  85.         NameEntity mesh,Trim$(Mid$(ReadLine$(file),5))  ;Read in entities name
  86.         dum=ReadLine(file)
  87.         vecx$=Mid$(ReadLine(file),8)
  88.         vecy$=Mid$(ReadLine(file),8)
  89.         vecz$=Mid$(ReadLine(file),8)
  90.         dum=ReadLine(file)
  91.         tmat1$=Mid$(ReadLine(file),1)
  92.         tmat2$=Mid$(ReadLine(file),1)
  93.         tmat3$=Mid$(ReadLine(file),1)
  94.         tmat4$=Mid$(ReadLine(file),1)
  95.         ratfish$=Trim$(Mid$(ReadLine(file),15))
  96.         vertcount=ratfish
  97.         indexc=0
  98.         For a=1 To vertcount
  99.                 v.vrt=New vrt
  100.                 vind=indexc
  101.                 indexc=indexc+1
  102.                 st$=Trim$(ReadLine$(file))
  103.                 vx=Mid$(st,1,Instr(st," ")-1)
  104.                 vx=vx
  105.                 st=Mid$(st,Instr(st," ")+1)
  106.                 vy=Mid$(st,1,Instr(st," ")-1)
  107.                 vy=vy
  108.                 st=Mid$(st,Instr(st," ")+1)
  109.                 vz=st
  110.         Next
  111.         texcount=Trim$(Mid$(ReadLine(file),17))
  112.         indext=0
  113.         For a=1 To texcount
  114.                 t.Tex=New tex
  115.                 tind=indext
  116.                 indext=indext+1
  117.                 st=Trim$(ReadLine$(file))
  118.                 tu=Mid$(st,1,Instr(st," "))
  119.                 tv=Mid$(st,Instr(st," "))
  120.         Next
  121.         facecount=Trim$(Mid$(ReadLine(file),6))
  122.         surfcount=0
  123.         For a=1 To facecount
  124.                 f.face=New face
  125.                 tmp$=Trim$(ReadLine$(file))             ;surface id last indent
  126.                 fcount=Mid$(tmp,11,2)
  127.                 If Lower$(Left$(tmp,4))="face" Then
  128.                         Repeat
  129.                                 tmp$=Mid$(tmp$,Instr(tmp$," ")+1)
  130.                         Until Instr(tmp$," ")=0
  131.                         fmatid=tmp
  132.                         fmatid=fmatid+1
  133.                 Else
  134.                         fmatid=1        ;;todo Hole face describes how to cut out the next face
  135.                 End If
  136.                 If fmatid>surfcount Then surfcount=fmatid
  137.                 tmp$=Trim$(ReadLine$(file))
  138.                 For b=0 To fcount-1
  139.                         tp$=Mid$(tmp$,Instr(tmp$,"<")+1,Instr(tmp$,">")-2)      ;<vertindex , texture index>
  140.                         If Right$(tp$,1)=">" Then tp=Left$(tp,Len(tp)-1)
  141.                         tmp$=Mid$(tmp$,Instr(tmp$,">")+1)
  142.                         fi[b]=Left$(tp,Instr(tp,","))
  143.                         f       [b]=Mid$(tp,Instr(tp,",")+1)
  144.                 Next
  145.         Next
  146.         dum=ReadLine(file)
  147.         ;Once loaded all vert/face and tex coord info setup surfaces
  148.         dum=ReadLine(file)
  149.         For a=1 To surfcount
  150.                 Repeat
  151.                         t4$=ReadLine$(file)
  152.                         If Lower$(Left$(t4,3))="end" Then Goto misstexture
  153.                 Until Lower$(Left$(t4,3))="rgb"
  154.                 ;rgb
  155.                 t4=Mid$(t4,4)
  156.                 red#=Left$(t4,Instr(t4,",")-1)
  157.                 t4=Mid$(t4,Instr(t4,",")+1)
  158.                 green#=Left$(t4,Instr(t4,",")-1)
  159.                 blue#=Mid$(t4,Instr(t4,",")+1)
  160.                 ;alpha info
  161.                 t5$=ReadLine$(file)
  162.                 alpha$=Trim$(Mid$(t5,6))
  163.                 alpha=Mid$(alpha,1,Instr(alpha," ")-1)
  164.                 ;shininess
  165.                 t5=Trim$(Mid$(t5,Instr(t5,"ks")-12))
  166.                 shiny#=Mid$(t5,1,Instr(t5," ")-1)
  167.                 ;texture info
  168.                 ;filename cull must be in main directory sorry
  169.                 BFile$=ReadLine$(file)
  170.                 Repeat
  171.                         bfile=Mid$(bfile,1+Instr(bfile,""))
  172.                 Until Instr(bfile,"")=0
  173.                 brush=LoadBrush(bfile)
  174.                 If brush=0 Then
  175.                         brush=CreateBrush(red*255,green*255,blue*255)
  176.                         BrushColor brush,red*255,green*255,blue*255
  177.                         texxx=LoadTexture(bfile)
  178.                         If texxx<>0 Then
  179.                                 BrushTexture brush,texxx
  180.                         End If
  181.                 Else
  182.                         BrushColor brush,red*255,green*255,blue*255
  183.                 End If
  184.                 BrushAlpha brush,alpha
  185.                 BrushShininess brush,shiny
  186.                 surf=CreateSurface(mesh,brush)
  187.                 dum=ReadLine(file)
  188.         Next
  189.         .misstexture
  190.         Local vv.vrt[20]
  191.         Local tt.tex[20]
  192.        
  193.         CloseFile file
  194.         ;Now add the mesh information
  195.         For f=Each face
  196.                 If fmatid>=0 Then
  197.                         surf=GetSurface(mesh,fmatid)
  198.                         For b=1 To fcount
  199.                                 vv[b-1]=getvert(fi[b-1])
  200.                                
  201.                                 tt[b-1]=gettex(f        [b-1])
  202.                         Next
  203.        
  204.                         vrtst=AddVertex(surf,vv[0]x,vv[0]y,vv[0]z,tt[0]u,tt[0]v)
  205.                         For b=1 To fcount-1
  206.                                 AddVertex surf,vv[b]x,vv[b]y,vv[b]z,tt[b]u,tt[b]v
  207.                         Next
  208.                        
  209.                         AddTriangle surf,vrtst,vrtst+1,vrtst+2
  210.                         For b=3 To fcount-1
  211.                                 AddTriangle surf,vrtst,vrtst+b-1,vrtst+b
  212.                         Next
  213.                 Else
  214.  
  215.                 End If
  216.         Next
  217.         Delete Each vrt
  218.         Delete Each tex
  219.         Delete Each face
  220.         UpdateNormals mesh
  221.         m11#=Mid$(tmat1,1,Instr(tmat1," ")-1)
  222.         tmat1=Mid$(tmat1,Instr(tmat1," ")+1)
  223.         m12#=Mid$(tmat1,1,Instr(tmat1," ")-1)
  224.         tmat1=Mid$(tmat1,Instr(tmat1," ")+1)
  225.         m13#=Mid$(tmat1,1,Instr(tmat1," ")-1)
  226.         tmat1=Mid$(tmat1,Instr(tmat1," ")+1)
  227.         m14#=tmat1
  228.         m21#=Mid$(tmat2,1,Instr(tmat2," ")-1)
  229.         tmat2=Mid$(tmat2,Instr(tmat2," ")+1)
  230.         m22#=Mid$(tmat2,1,Instr(tmat2," ")-1)
  231.         tmat2=Mid$(tmat2,Instr(tmat2," ")+1)
  232.         m23#=Mid$(tmat2,1,Instr(tmat2," ")-1)
  233.         tmat2=Mid$(tmat2,Instr(tmat2," ")+1)
  234.         m24#=tmat2
  235.         m31#=Mid$(tmat3,1,Instr(tmat3," ")-1)
  236.         tmat3=Mid$(tmat3,Instr(tmat3," ")+1)
  237.         m32#=Mid$(tmat3,1,Instr(tmat3," ")-1)
  238.         tmat3=Mid$(tmat3,Instr(tmat3," ")+1)
  239.         m33#=Mid$(tmat3,1,Instr(tmat3," ")-1)
  240.         tmat3=Mid$(tmat3,Instr(tmat3," ")+1)
  241.         m34#=tmat3
  242.  
  243.         For ss=1 To CountSurfaces(mesh)
  244.                 surf=GetSurface(mesh,ss)
  245.                 For vt=0 To CountVertices(surf)-1
  246.                         x#=VertexX(surf,vt)
  247.                         y#=VertexY(surf,vt)
  248.                         z#=VertexZ(surf,vt)
  249.                         ny#=(m11*x)+(m12*y)+(m13*z)+m14
  250.                         nx#=(m21*x)+(m22*y)+(m23*z)+m24
  251.                         nz#=(m31*x)+(m32*y)+(m33*z)+m34
  252.                         VertexCoords surf,vt,nx,ny,nz
  253.                 Next
  254.         Next
  255.         RotateMesh mesh,-90,0,0
  256.  
  257. ;       vx1#=Mid$(vecx,1,Instr(vecx," "))
  258. ;       vecx=Mid$(vecx,Instr(vecx," ")+1)
  259. ;       vx2#=Mid$(vecx,1,Instr(vecx," "))
  260. ;       vecx=Mid$(vecx,Instr(vecx," ")+1)
  261. ;       vx3#=vecx
  262.  
  263. ;       vz1#=Mid$(vecy,1,Instr(vecy," "))
  264. ;       vecy=Mid$(vecy,Instr(vecy," ")+1)
  265. ;       vz2#=Mid$(vecy,1,Instr(vecy," "))
  266. ;       vecy=Mid$(vecy,Instr(vecy," ")+1)
  267. ;       vz3#=vecy
  268.  
  269. ;       vy1#=Mid$(vecz,1,Instr(vecz," "))
  270. ;       vecz=Mid$(vecz,Instr(vecz," ")+1)
  271. ;       vy2#=Mid$(vecz,1,Instr(vecz," "))
  272. ;       vecz=Mid$(vecz,Instr(vecz," ")+1)
  273. ;       vy3#=vecz
  274. ;       AlignToVector mesh,vx1,vx2,vx3,2
  275. ;       AlignToVector mesh,vy1,vy2,vy3,1
  276. ;       AlignToVector mesh,vz1,vz2,vz3,3
  277. ;       Stop
  278.         Delete Each face
  279.         Delete Each vrt
  280.         Delete Each tex
  281.         Return mesh
  282. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal