November 28, 2020, 02:39:01 PM

Author Topic: [bb] Batch Convert .3ds & .x to .b3d by elias_t [ 1+ years ago ]  (Read 529 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Batch Convert .3ds & .x to .b3d
Author : elias_t
Posted : 1+ years ago

Description : The only extra information retrieved is uv-mapping coords.

But it's very usefull to convert all 3ds and x models in a directory to b3d.


Code :
Code: BlitzBasic
  1. ;batch convert .3ds and .x files in a directory to .b3d files
  2. ;modified Mark's code
  3.  
  4. ;---------------------
  5. Dim b3d_stack(100)
  6. Global b3d_file,b3d_tos
  7.  
  8. ;---------------------
  9.  
  10. Graphics3D 640,480,32,2
  11.  
  12.  
  13. ;/////////////////////////////////
  14. rd=ReadDir(CurrentDir$())
  15.  
  16. tm$=NextFile$(rd)
  17.  
  18. While Not tm$=""
  19.  
  20. If Right$(tm$,4)=".3ds" Or Right$(tm$,4)=".3DS" Or Right$(tm$,2)=".x" Or Right$(tm$,2)=".X"
  21.  
  22. mesh = LoadMesh  (tm$)
  23.  
  24. If Right$(tm$,4)=".3ds" Or Right$(tm$,4)=".3DS" Then tm$=Left$(tm$,Len(tm$)-4)
  25. If Right$(tm$,2)=".x" Or Right$(tm$,2)=".X" Then tm$=Left$(tm$,Len(tm$)-2)
  26.  
  27. WriteBB3D( tm$+".b3d",mesh )
  28.  
  29. FreeEntity mesh
  30.  
  31. Print tm$ + "  Ok"
  32.  
  33. EndIf
  34.  
  35. tm$=NextFile$(rd)
  36. Wend
  37.  
  38.  
  39. CloseDir rd
  40.  
  41. End
  42.  
  43.  
  44. ;/////////////////////////////////////////////////////////////////////////
  45. ;////////////////////////////////////////////////////////////////////////
  46.  
  47.  
  48. Function WriteBB3D( f_name$,mesh )
  49.  
  50.         file=WriteFile( f_name$ )
  51.  
  52.         b3dSetFile( file )
  53.        
  54.         b3dBeginChunk( "BB3D" )
  55.                 b3dWriteInt( 1 )        ;version
  56.                
  57.                 b3dBeginChunk( "BRUS" )
  58.                         b3dWriteInt( 0 )                                        ;0 textures per brush
  59.                         b3dWriteString( "Brush" )                       ;brush name
  60.                         b3dWriteFloat( 1 )                                      ;red
  61.                         b3dWriteFloat( 1 )                                      ;green
  62.                         b3dWriteFloat( 1 )                                      ;blue
  63.                         b3dWriteFloat( 1 )                                      ;alpha
  64.                         b3dWriteFloat( 0 )                                      ;shininess
  65.                         b3dWriteInt( 1 )                                        ;blend
  66.                         b3dWriteInt( 0 )                                        ;FX
  67.                 b3dEndChunk()   ;end of BRUS chunk
  68.                
  69.                 b3dBeginChunk( "NODE" )
  70.                         b3dWriteString( "_" );entity name
  71.                         b3dWriteFloat( 0 )      ;x_pos
  72.                         b3dWriteFloat( 0 )      ;y_pos
  73.                         b3dWriteFloat( 0 )      ;y_pos
  74.                         b3dWriteFloat( 1 )      ;x_scale
  75.                         b3dWriteFloat( 1 )      ;y_scale
  76.                         b3dWriteFloat( 1 )      ;z_scale
  77.                         b3dWriteFloat( 1 )      ;rot_w
  78.                         b3dWriteFloat( 0 )      ;rot_x
  79.                         b3dWriteFloat( 0 )      ;rot_y
  80.                         b3dWriteFloat( 0 )      ;rot_z
  81.                         WriteMESH( mesh )
  82.                 b3dEndChunk()   ;end of NODE chunk
  83.                
  84.         b3dEndChunk()   ;end of BB3D chunk
  85.        
  86.         CloseFile file
  87. End Function
  88.  
  89. Function WriteMESH( mesh )
  90.  
  91.         n_surfs=CountSurfaces( mesh )
  92.        
  93.         b3dBeginChunk( "MESH" )
  94.                 b3dWriteInt( -1 )                               ;no 'entity' brush
  95.                
  96.                 b3dBeginChunk( "VRTS" )
  97.                         b3dWriteInt( 0 )                        ;flags - 0=no normal/color
  98.                         b3dWriteInt( 1 )                        ;1 tex_coord sets
  99.                         b3dWriteInt( 2 )                        ;2 coords per set
  100.                        
  101.                         For k=1 To n_surfs
  102.                                 surf=GetSurface( mesh,k )
  103.                                 n_verts=CountVertices( surf )-1
  104.                                
  105.                                 For j=0 To n_verts
  106.                                         b3dWriteFloat( VertexX( surf,j ) )
  107.                                         b3dWriteFloat( VertexY( surf,j ) )
  108.                                         b3dWriteFloat( VertexZ( surf,j ) )
  109.                                        
  110.                                         b3dWriteFloat( VertexU#( surf,j ) )
  111.                                         b3dWriteFloat( VertexV#( surf,j ) )
  112.                                        
  113.                                 Next
  114.                         Next
  115.                 b3dEndChunk()   ;end of VRTS chunk
  116.                
  117.                 first_vert=0
  118.                 For k=1 To n_surfs
  119.                         surf=GetSurface( mesh,k )
  120.                         n_tris=CountTriangles( surf )-1
  121.                        
  122.                         b3dBeginChunk( "TRIS" )
  123.                                 b3dWriteInt( 0 )                ;brush for these triangles
  124.                                
  125.                                 For j=0 To n_tris
  126.                                         b3dWriteInt( first_vert+TriangleVertex( surf,j,0 ) )
  127.                                         b3dWriteInt( first_vert+TriangleVertex( surf,j,1 ) )
  128.                                         b3dWriteInt( first_vert+TriangleVertex( surf,j,2 ) )
  129.                                 Next
  130.                                
  131.                         b3dEndChunk()   ;end of TRIS chunk
  132.                        
  133.                         first_vert=first_vert+CountVertices( surf )
  134.                        
  135.                 Next
  136.                
  137.         b3dEndChunk()   ;end of MESH chunk
  138.        
  139. End Function
  140.  
  141.  
  142. ;////////////////////////////////////////////////////////////////////////
  143.  
  144. ;***** Functions for writing to B3D files *****
  145.  
  146. Function b3dWriteByte( n )
  147.         WriteByte( b3d_file,n )
  148. End Function
  149.  
  150. Function b3dWriteInt( n )
  151.         WriteInt( b3d_file,n )
  152. End Function
  153.  
  154. Function b3dWriteFloat( n# )
  155.         WriteFloat( b3d_file,n )
  156. End Function
  157.  
  158. Function b3dWriteString( t$ )
  159.         For k=1 To Len( t$ )
  160.                 ch=Asc(Mid$(t$,k,1))
  161.                 b3dWriteByte(ch)
  162.                 If ch=0 Return
  163.         Next
  164.         b3dWriteByte( 0 )
  165. End Function
  166.  
  167. Function b3dBeginChunk( tag$ )
  168.         b3d_tos=b3d_tos+1
  169.         For k=1 To 4
  170.                 b3dWriteByte(Asc(Mid$( tag$,k,1 )))
  171.         Next
  172.         b3dWriteInt( 0 )
  173.         b3d_stack(b3d_tos)=FilePos( b3d_file )
  174. End Function
  175.  
  176. Function b3dEndChunk()
  177.         n=FilePos( b3d_file )
  178.         SeekFile b3d_file,b3d_stack(b3d_tos)-4
  179.         b3dWriteInt( n-b3d_stack(b3d_tos) )
  180.         SeekFile b3d_file,n
  181.         b3d_tos=b3d_tos-1
  182. End Function
  183.  
  184. ;------------------
  185. Function b3dSetFile( file )
  186.         b3d_tos=0
  187.         b3d_file=file
  188. End Function
  189. ;----------------------------------


Comments :


Prym(Posted 1+ years ago)

 thank  you , but how to use with textures ? textures in brushes ?


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal