home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 11983 / render_mesh4.7z / render_mesh4.ms
Encoding:
Text File  |  2016-12-05  |  12.2 KB  |  424 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 == 0x02025 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 0x14 #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 == 0x02c2f 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 0x020 #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 if  data_chunk1_array[i].data_coding == 0x0240e then (    
  308.         for j = 1 to data_chunk1_array[i].element_number do (
  309.             offs = ftell f__mesh
  310.             x = readshort f__mesh #unsigned
  311.             y = readshort f__mesh #unsigned
  312.             z = readshort f__mesh #unsigned        
  313.             fseek f__mesh 0x2 #seek_cur        
  314.             u = readshort f__mesh #unsigned
  315.             w = readshort f__mesh #unsigned    
  316.             u_f = (1.0 * u)/65536
  317.             w_f = (1.0 * w)/65536
  318.             
  319.             fseek f__mesh 0x18 #seek_cur    
  320.             append vert_array [x,y,z]
  321.             append UV_array [u_f,-w_f+1,0]
  322.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  323.             )
  324.         )
  325.     else if  data_chunk1_array[i].data_coding == 0x02428 then (    
  326.         for j = 1 to data_chunk1_array[i].element_number do (
  327.             offs = ftell f__mesh
  328.             x = readshort f__mesh #unsigned
  329.             y = readshort f__mesh #unsigned
  330.             z = readshort f__mesh #unsigned        
  331.             fseek f__mesh 0x2 #seek_cur        
  332.             u = readshort f__mesh #unsigned
  333.             w = readshort f__mesh #unsigned    
  334.             u_f = (1.0 * u)/65536
  335.             w_f = (1.0 * w)/65536
  336.             
  337.             fseek f__mesh 0x18 #seek_cur    
  338.             append vert_array [x,y,z]
  339.             append UV_array [u_f,-w_f+1,0]
  340.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  341.             )
  342.         )
  343.         
  344.     else(
  345.         print("error reading vertex! unknown coding format")
  346.         )
  347.  
  348.     append UV_arrays UV_array
  349.     append vert_arrays vert_array
  350.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  351.     print("")
  352.     )
  353.     
  354.     print("")
  355.         print("FACES")
  356.             print("")
  357.     
  358. for i = v1[2] + 1 + submesh_number  to (v1[2]  + submesh_number + submesh_number) do (
  359.     print ("faces mesh number: " + i as string  + "    //    " + ((face_arrays.count + 1 )as string))
  360.     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)))
  361.     fnum = data_chunk1_array[i].size_block / 6
  362.     print("faces number: " + (fnum as string))
  363.         print("data coding: 0x0" + (bit.intAsHex (data_chunk1_array[i].data_coding )))
  364.  
  365.     fseek f__mesh data_chunk1_array[i].offset_block  #seek_set
  366.     
  367.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  368.  
  369.     face_array = #()
  370.     m = 0
  371.     for j = 1 to fnum do (
  372.         offs = ftell f__mesh
  373.         x = (readshort f__mesh #unsigned) + 1
  374.         y = (readshort f__mesh #unsigned) + 1
  375.         z = (readshort f__mesh #unsigned) + 1    
  376.         if x > m do m = x
  377.         if y > m do m = y
  378.         if z > m do m = z
  379.         --print((j as string) + "        " +([x,y,z] as string) )
  380.         append face_array [x,y,z]
  381.         )
  382.  
  383.     append face_arrays face_array
  384.     print ("m: " + (m as string))
  385.     append ms m
  386.     data_chunk1_array[i].m = m
  387.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  388.     print("")
  389.     )    
  390.     
  391.     
  392.     for i = 1 to submesh_number do (
  393.         try(
  394.             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]    
  395.             setNumTVerts msh UV_arrays[i].count        
  396.             for j = 1 to UV_arrays[i].count do (setTVert msh j UV_arrays[i][j]) 
  397.             buildTVFaces msh false
  398.             for j = 1 to face_arrays[i].count do (setTVFace msh j face_arrays[i][j])
  399.             )
  400.         catch(
  401.             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))
  402.             
  403.             )
  404.     )
  405.     
  406.     
  407.     
  408.     
  409.     
  410.     
  411.     
  412.     
  413.     
  414.     
  415.     
  416.     
  417.     
  418.     
  419.     
  420.     fclose f__mesh
  421.  
  422.     
  423.     
  424.