write a cube as IQM by sheer will
						commit
						0b57f1a53e
					
				| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					/target
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					# This file is automatically @generated by Cargo.
 | 
				
			||||||
 | 
					# It is not intended for manual editing.
 | 
				
			||||||
 | 
					version = 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "byteorder"
 | 
				
			||||||
 | 
					version = "1.4.3"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "model_converter"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "byteorder",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					[package]
 | 
				
			||||||
 | 
					name = "model_converter"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					edition = "2021"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					byteorder = "1.4.3"
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,155 @@
 | 
				
			||||||
 | 
					use std::{
 | 
				
			||||||
 | 
						fs::File,
 | 
				
			||||||
 | 
						io::Write,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main () {
 | 
				
			||||||
 | 
						let mut f = File::create ("cube.iqm").unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						f.write_all (b"INTERQUAKEMODEL\0").unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						f.write_all (&(2u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// filesize
 | 
				
			||||||
 | 
						f.write_all (&(0x198u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// flags
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_text, ofs_text
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_meshes, ofs_meshes
 | 
				
			||||||
 | 
						f.write_all (&(1u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0x7Cu32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_vertexarrays, num_vertexes, ofs_vertexarrays
 | 
				
			||||||
 | 
						f.write_all (&(1u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(8u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0x94u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_triangles, ofs_triangles, ofs_adjacency
 | 
				
			||||||
 | 
						f.write_all (&(1u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0x108u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_joints, ofs_joints
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_poses, ofs_poses
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_anims, ofs_anims
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_frames, num_framechannels, ofs_frames, ofs_bounds
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_comment, ofs_comment
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// num_extensions, ofs_extensions
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Meshes
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// name
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// material
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// first_vertex, num_vertexes
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(8u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// first_triangle, num_triangles
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						f.write_all (&(12u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Vertex arrays
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// type
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// flags
 | 
				
			||||||
 | 
						f.write_all (&(0u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// format
 | 
				
			||||||
 | 
						f.write_all (&(7u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// size
 | 
				
			||||||
 | 
						f.write_all (&(3u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// offset
 | 
				
			||||||
 | 
						f.write_all (&(0xA8u32.to_le_bytes ())).unwrap ();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Vertexes
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						for t in [
 | 
				
			||||||
 | 
							[-1.0, -1.0, -1.0],
 | 
				
			||||||
 | 
							[ 1.0, -1.0, -1.0],
 | 
				
			||||||
 | 
							[ 1.0,  1.0, -1.0],
 | 
				
			||||||
 | 
							[-1.0,  1.0, -1.0],
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							[-1.0, -1.0,  1.0],
 | 
				
			||||||
 | 
							[ 1.0, -1.0,  1.0],
 | 
				
			||||||
 | 
							[ 1.0,  1.0,  1.0],
 | 
				
			||||||
 | 
							[-1.0,  1.0,  1.0],
 | 
				
			||||||
 | 
						] {
 | 
				
			||||||
 | 
							for x in t {
 | 
				
			||||||
 | 
								f.write_all (&(f32::to_le_bytes (x))).unwrap ();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Triangles
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						for t in [
 | 
				
			||||||
 | 
							[0, 2, 1],
 | 
				
			||||||
 | 
							[0, 3, 2],
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							[0, 5, 1],
 | 
				
			||||||
 | 
							[1, 6, 2],
 | 
				
			||||||
 | 
							[2, 7, 3],
 | 
				
			||||||
 | 
							[3, 4, 0],
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							[0, 4, 5],
 | 
				
			||||||
 | 
							[1, 5, 6],
 | 
				
			||||||
 | 
							[2, 6, 7],
 | 
				
			||||||
 | 
							[3, 7, 4],
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							[4, 6, 5],
 | 
				
			||||||
 | 
							[4, 7, 6],
 | 
				
			||||||
 | 
						] {
 | 
				
			||||||
 | 
							for x in t {
 | 
				
			||||||
 | 
								f.write_all (&(u32::to_le_bytes (x))).unwrap ();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mod iqm {
 | 
				
			||||||
 | 
						struct VertexArray {
 | 
				
			||||||
 | 
							r#type: u32,
 | 
				
			||||||
 | 
							flags: u32,
 | 
				
			||||||
 | 
							format: u32,
 | 
				
			||||||
 | 
							size: u32,
 | 
				
			||||||
 | 
							offset: u32,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						struct Triangle {
 | 
				
			||||||
 | 
							vertex: [u32; 3],
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						struct Vertex {
 | 
				
			||||||
 | 
							position: [f32; 3],
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue