home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 11974 / render_mesh3.7z / render_mesh3.ms
Encoding:
Text File  |  2016-12-01  |  10.8 KB  |  387 lines

  1.     
  2. fname = getOpenFileName \
  3. caption:"Open .mesh from Mesh folder" \
  4. types:"Halo5Mesh (*.*)|*.*" \
  5. historyCategory:"Halo5MeshPresets"    
  6.     
  7.  
  8. -- f__model = fopen fname "rb"   --"D:\\needler\\needler.model" "rb"
  9. -- f__model = fopen "D:\\plasma_rifle_h2\\plasma_rifle_h2.model" "rb"
  10.  
  11.  
  12. f__mesh = fopen fname "rb"                    --                fopen "D:\\needler\\needler.render_model[0_mesh resource!_]" "rb"
  13.  
  14. struct data_chunk1 (
  15.     public
  16.     offset_block = 0,
  17.     size_block = 0,    
  18.     types= 0,
  19.     offset_block2 = 0,
  20.     data_coding = 0,
  21.     element_number=0,
  22.     m = 0
  23.     )
  24.     
  25. data_chunk1_array = #()
  26.  
  27. vert_arrays = #()
  28. UV_arrays = #()
  29. face_arrays = #()
  30. m_array = #()
  31. ms = #()
  32.     
  33. vert_array = #()
  34. UV_array = #()
  35. face_array = #()
  36.  
  37.  
  38. print f__mesh
  39.  
  40. fseek f__mesh 0x20 #seek_set
  41.  
  42. v1 = #()
  43. for i = 1 to 0x0C do (
  44.     val = (readlong f__mesh #unsigned)
  45.     append v1 val
  46.     )
  47.     
  48.     
  49.     
  50. print v1
  51.  
  52. print("")
  53. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  54. print("")
  55.  
  56.  
  57.  
  58. for i = 1 to v1[1] do (
  59.     vv1 = #()
  60.     
  61.     vv1s = (i as string + "    ||    ")
  62.     for i = 1 to 0x010 do (
  63.         val = readbyte f__mesh #unsigned
  64.         vv1s = vv1s + "    " + (bit.intAsHex val)
  65.         append vv1 val
  66.         )
  67.     print vv1s
  68.     size1 = vv1[1] + vv1[2] * 0x100 + vv1[3] * 0x10000 + vv1[4] * 0x1000000
  69.     offset1 = vv1[9] + vv1[10] * 0x100 + vv1[11] * 0x10000 + vv1[12] * 0x1000000 + (v1[8] + v1[9])
  70.     vd = data_chunk1()
  71.     vd.offset_block = offset1
  72.     vd.size_block = size1
  73.     append data_chunk1_array vd
  74.     print("offset block: 0x0" + (bit.intAsHex (vd.offset_block )) +"    size block: 0x0" + (bit.intAsHex (vd.size_block )) + "    offset next block: 0x0" + (bit.intAsHex (vd.offset_block + vd.size_block)))
  75.  
  76.         
  77.     )
  78.  
  79. print("")
  80. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  81. print("")
  82.  
  83.     
  84. for i = 1 to v1[2] do (
  85.     vv1 = #()
  86.     vv1s = (i as string + "    ||    ")
  87.     for i = 1 to 0x020 do (
  88.         val = readbyte f__mesh #unsigned
  89.         vv1s = vv1s + "    " + (bit.intAsHex val)
  90.         )
  91.     print vv1s
  92.         
  93.     )
  94.     
  95. print("")
  96. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  97. print("")
  98.  
  99. for i = 1 to v1[3] do (
  100.     vv1 = #()
  101.     vv1s = (i as string + "    ||    ")
  102.     for i = 1 to 0x014 do (
  103.         val = readbyte f__mesh #unsigned
  104.         append vv1 val
  105.         vv1s = vv1s + "    " + (bit.intAsHex val)
  106.         )
  107.     print vv1s
  108.         
  109.     data_chunk1_array[i + v1[2]].types = vv1[1]
  110.     offset1 = vv1[17] + vv1[18] * 0x100 + vv1[19] * 0x10000 + vv1[20] * 0x1000000
  111.  
  112.     
  113.     )
  114.  
  115.     
  116. print("")
  117. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  118. print("")
  119.  
  120. offset_3 = ftell f__mesh
  121. fseek f__mesh (0x18 + 32) #seek_cur
  122.  
  123. for i = (v1[2] + 1) to data_chunk1_array.count do (
  124.     if(data_chunk1_array[i].types == 1) then (
  125.         vv1 = #()
  126.         vv1s = (i as string + "    ||    ")
  127.         for i = 1 to 0x050 do (
  128.             val = readbyte f__mesh #unsigned
  129.             append vv1 val
  130.             vv1s = vv1s + "    " + (bit.intAsHex val)
  131.         )
  132.         print vv1s
  133.         data_chunk1_array[i].data_coding = vv1[1] + vv1[2] * 0x100
  134.         data_chunk1_array[i].element_number = vv1[5] + vv1[6] * 0x100 + vv1[7] * 0x10000 + vv1[8] * 0x1000000
  135.  
  136.         )
  137.     else if (data_chunk1_array[i].types == 2) then (
  138.         vv1 = #()
  139.         vv1s = (i as string + "    ||    ")
  140.         for i = 1 to 0x048 do (
  141.             val = readbyte f__mesh #unsigned
  142.             append vv1 val
  143.             vv1s = vv1s + "    " + (bit.intAsHex val)
  144.         )
  145.         print vv1s
  146.         --print(vv1 as string)
  147.         data_chunk1_array[i].data_coding = vv1[1] + vv1[2] * 0x100
  148.         data_chunk1_array[i].element_number = vv1[5] + vv1[6] * 0x100 + vv1[7] * 0x10000 + vv1[8] * 0x1000000
  149.         )
  150.     else (print "!!!ERROR!!!")
  151.     )
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171. submesh_number = (data_chunk1_array.count - v1[2])/2
  172. print("submesh_number: " + (submesh_number as string))
  173.     
  174.         print("")
  175.  
  176.             print("")
  177.  
  178.                 print("")
  179.  
  180.                 
  181.                 
  182. for i = v1[2] + 1 to (v1[2] +  submesh_number) do (
  183.     print ("vertex mesh number: " + (i as string ) + "    //    " + ((vert_arrays.count + 1) as string)) 
  184.     print("offset block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block )) +"    size block: 0x0" + (bit.intAsHex (data_chunk1_array[i].size_block )) + "    offset next block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block + data_chunk1_array[i].size_block)))
  185.     vn = data_chunk1_array[i].size_block / 0x01c
  186.     --print("vertex number: " + (vn as string))
  187.     print("data coding: 0x0" + (bit.intAsHex (data_chunk1_array[i].data_coding )))
  188.     print("vertex number: " + (data_chunk1_array[i].element_number as string) +  "    (0x0" + (bit.intAsHex (data_chunk1_array[i].element_number )) + ")")
  189.     
  190.     fseek f__mesh data_chunk1_array[i].offset_block  #seek_set
  191.     
  192.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  193.  
  194.     vert_array = #()
  195.     UV_array = #()
  196.     
  197.     
  198.     if data_chunk1_array[i].data_coding == 0x01c24 then (
  199.         for j = 1 to data_chunk1_array[i].element_number do (
  200.             offs = ftell f__mesh
  201.             x = readshort f__mesh #unsigned
  202.             y = readshort f__mesh #unsigned
  203.             z = readshort f__mesh #unsigned        
  204.             fseek f__mesh 0x2 #seek_cur        
  205.             u = readshort f__mesh #unsigned
  206.             w = readshort f__mesh #unsigned    
  207.             u_f = (1.0 * u)/65536
  208.             w_f = (1.0 * w)/65536
  209.             
  210.             fseek f__mesh 0x10 #seek_cur    
  211.             append vert_array [x,y,z]
  212.             append UV_array [u_f,-w_f+1,0]
  213.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  214.             )
  215.         )
  216.     else if  data_chunk1_array[i].data_coding == 0x01c01 then (    
  217.         for j = 1 to data_chunk1_array[i].element_number do (
  218.             offs = ftell f__mesh
  219.             x = readshort f__mesh #unsigned
  220.             y = readshort f__mesh #unsigned
  221.             z = readshort f__mesh #unsigned        
  222.             fseek f__mesh 0x2 #seek_cur        
  223.             u = readshort f__mesh #unsigned
  224.             w = readshort f__mesh #unsigned    
  225.             u_f = (1.0 * u)/65536
  226.             w_f = (1.0 * w)/65536
  227.             
  228.             fseek f__mesh 0x10 #seek_cur    
  229.             append vert_array [x,y,z]
  230.             append UV_array [u_f,-w_f+1,0]
  231.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  232.             )
  233.         )
  234.     else if  data_chunk1_array[i].data_coding == 0x01802 then (    
  235.         for j = 1 to data_chunk1_array[i].element_number do (
  236.             offs = ftell f__mesh
  237.             x = readshort f__mesh #unsigned
  238.             y = readshort f__mesh #unsigned
  239.             z = readshort f__mesh #unsigned        
  240.             fseek f__mesh 0x2 #seek_cur        
  241.             u = readshort f__mesh #unsigned
  242.             w = readshort f__mesh #unsigned    
  243.             u_f = (1.0 * u)/65536
  244.             w_f = (1.0 * w)/65536
  245.             
  246.             fseek f__mesh 0xC #seek_cur    
  247.             append vert_array [x,y,z]
  248.             append UV_array [u_f,-w_f+1,0]
  249.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  250.             )
  251.         )    
  252.     else if  data_chunk1_array[i].data_coding == 0x02003 then (    
  253.         for j = 1 to data_chunk1_array[i].element_number do (
  254.             offs = ftell f__mesh
  255.             x = readshort f__mesh #unsigned
  256.             y = readshort f__mesh #unsigned
  257.             z = readshort f__mesh #unsigned        
  258.             fseek f__mesh 0x2 #seek_cur        
  259.             u = readshort f__mesh #unsigned
  260.             w = readshort f__mesh #unsigned    
  261.             u_f = (1.0 * u)/65536
  262.             w_f = (1.0 * w)/65536
  263.             
  264.             fseek f__mesh 0x14 #seek_cur    
  265.             append vert_array [x,y,z]
  266.             append UV_array [u_f,-w_f+1,0]
  267.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  268.             )
  269.         )
  270.     else if  data_chunk1_array[i].data_coding == 0x0240e then (    
  271.         for j = 1 to data_chunk1_array[i].element_number do (
  272.             offs = ftell f__mesh
  273.             x = readshort f__mesh #unsigned
  274.             y = readshort f__mesh #unsigned
  275.             z = readshort f__mesh #unsigned        
  276.             fseek f__mesh 0x2 #seek_cur        
  277.             u = readshort f__mesh #unsigned
  278.             w = readshort f__mesh #unsigned    
  279.             u_f = (1.0 * u)/65536
  280.             w_f = (1.0 * w)/65536
  281.             
  282.             fseek f__mesh 0x18 #seek_cur    
  283.             append vert_array [x,y,z]
  284.             append UV_array [u_f,-w_f+1,0]
  285.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  286.             )
  287.         )
  288.     else if  data_chunk1_array[i].data_coding == 0x02428 then (    
  289.         for j = 1 to data_chunk1_array[i].element_number do (
  290.             offs = ftell f__mesh
  291.             x = readshort f__mesh #unsigned
  292.             y = readshort f__mesh #unsigned
  293.             z = readshort f__mesh #unsigned        
  294.             fseek f__mesh 0x2 #seek_cur        
  295.             u = readshort f__mesh #unsigned
  296.             w = readshort f__mesh #unsigned    
  297.             u_f = (1.0 * u)/65536
  298.             w_f = (1.0 * w)/65536
  299.             
  300.             fseek f__mesh 0x18 #seek_cur    
  301.             append vert_array [x,y,z]
  302.             append UV_array [u_f,-w_f+1,0]
  303.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  304.             )
  305.         )
  306.         
  307.     else(
  308.         print("error reading vertex! unknown coding format")
  309.         )
  310.  
  311.     append UV_arrays UV_array
  312.     append vert_arrays vert_array
  313.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  314.     print("")
  315.     )
  316.     
  317.     print("")
  318.         print("FACES")
  319.             print("")
  320.     
  321. for i = v1[2] + 1 + submesh_number  to (v1[2]  + submesh_number + submesh_number) do (
  322.     print ("faces mesh number: " + i as string  + "    //    " + ((face_arrays.count + 1 )as string))
  323.     print("offset block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block )) +"    size block: 0x0" + (bit.intAsHex (data_chunk1_array[i].size_block )) + "    offset next block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block + data_chunk1_array[i].size_block)))
  324.     fnum = data_chunk1_array[i].size_block / 6
  325.     print("faces number: " + (fnum as string))
  326.         print("data coding: 0x0" + (bit.intAsHex (data_chunk1_array[i].data_coding )))
  327.  
  328.     fseek f__mesh data_chunk1_array[i].offset_block  #seek_set
  329.     
  330.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  331.  
  332.     face_array = #()
  333.     m = 0
  334.     for j = 1 to fnum do (
  335.         offs = ftell f__mesh
  336.         x = (readshort f__mesh #unsigned) + 1
  337.         y = (readshort f__mesh #unsigned) + 1
  338.         z = (readshort f__mesh #unsigned) + 1    
  339.         if x > m do m = x
  340.         if y > m do m = y
  341.         if z > m do m = z
  342.         --print((j as string) + "        " +([x,y,z] as string) )
  343.         append face_array [x,y,z]
  344.         )
  345.  
  346.     append face_arrays face_array
  347.     print ("m: " + (m as string))
  348.     append ms m
  349.     data_chunk1_array[i].m = m
  350.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  351.     print("")
  352.     )    
  353.     
  354.     
  355.     for i = 1 to submesh_number do (
  356.         try(
  357.             msh = mesh name:((i as string) + "__f" + (face_arrays[i].count as string) + "__v" + (vert_arrays[i].count as string)) vertices:vert_arrays[i] faces:face_arrays[i]    
  358.             setNumTVerts msh UV_arrays[i].count        
  359.             for j = 1 to UV_arrays[i].count do (setTVert msh j UV_arrays[i][j]) 
  360.             buildTVFaces msh false
  361.             for j = 1 to face_arrays[i].count do (setTVFace msh j face_arrays[i][j])
  362.             )
  363.         catch(
  364.             print("ERROR CREATING MESH " + (i as string) + "        number faces: " + (face_arrays[i].count as string) + "        number vertex: " + (vert_arrays[i].count as string) + "        found vertex: " + (ms[i] as string))
  365.             
  366.             )
  367.     )
  368.     
  369.     
  370.     
  371.     
  372.     
  373.     
  374.     
  375.     
  376.     
  377.     
  378.     
  379.     
  380.     
  381.     
  382.     
  383.     fclose f__mesh
  384.  
  385.     
  386.     
  387.