#![forbid(unsafe_code)] use crate::error::*; use crate::linear_algebra::{ Vec2, Vec3 }; use crate::shader_data::Vertex; use std::io::Cursor; use tobj::{ load_obj_buf, LoadOptions }; pub fn load_model() -> Result<(Vec>, Vec)> { let obj = include_bytes!("../models/teapot.obj"); let load_options = LoadOptions { single_index: true, triangulate: true, ..Default::default() }; let (models, materials) = load_obj_buf(&mut Cursor::new(obj), &load_options, |_| Ok(Default::default()))?; let _ = materials?; let mut vertices = Vec::new(); let mut indices = Vec::new(); for model in models { for index in 0 .. model.mesh.positions.len() / 3 { vertices.push(Vertex::new(Vec3::new(model.mesh.positions[index*3], model.mesh.positions[index*3 + 1], model.mesh.positions[index*3 + 2]), Vec3::new(1.0, 1.0, 1.0), Vec2::new(model.mesh.texcoords[index*2], model.mesh.texcoords[index*2 + 1]))) } for index in model.mesh.indices { indices.push(index); } } Ok((vertices, indices)) }