use vulkanalia::prelude::v1_0::*; use cgmath::{vec2, vec3, Matrix, SquareMatrix}; use crate::vertex; use crate::scene::Scene; #[derive(Clone, Debug)] pub struct Cube{ pub pos: vertex::Vec3, pub color: vertex::Vec3, pub tex_coord: vertex::Vec2 } impl Cube { pub fn draw(& self, topology: &vk::PrimitiveTopology, start_index: usize, scene: &mut Scene) { if *topology == vk::PrimitiveTopology::TRIANGLE_LIST { // 0 top left far scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 - 0.5, self.pos.y as f32 + 0.5, self.pos.z as f32 + 0.5), self.color, self.tex_coord )); // 1 top right far scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 + 0.5, self.pos.y as f32 + 0.5, self.pos.z as f32 + 0.5), self.color, self.tex_coord )); // 2 top left near scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 - 0.5, self.pos.y as f32 - 0.5, self.pos.z as f32 + 0.5), self.color, self.tex_coord )); // 3 top right near scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 + 0.5, self.pos.y as f32 - 0.5, self.pos.z as f32 + 0.5), self.color, self.tex_coord )); // 4 bottom left far scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 - 0.5, self.pos.y as f32 + 0.5, self.pos.z as f32 - 0.5), self.color, self.tex_coord )); // 5 bottom right far scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 + 0.5, self.pos.y as f32 + 0.5, self.pos.z as f32 - 0.5), self.color, self.tex_coord )); // 6 bottom left near scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 - 0.5, self.pos.y as f32 - 0.5, self.pos.z as f32 - 0.5), self.color, self.tex_coord )); // 7 bottom right near scene.vertices.push(vertex::Vertex::new( vec3(self.pos.x as f32 + 0.5, self.pos.y as f32 - 0.5, self.pos.z as f32 - 0.5), self.color, self.tex_coord )); // top scene.indices.push(start_index as u32 + 3); scene.indices.push(start_index as u32 + 0); scene.indices.push(start_index as u32 + 2); scene.indices.push(start_index as u32 + 3); scene.indices.push(start_index as u32 + 1); scene.indices.push(start_index as u32 + 0); // bottom scene.indices.push(start_index as u32 + 6); scene.indices.push(start_index as u32 + 4); scene.indices.push(start_index as u32 + 7); scene.indices.push(start_index as u32 + 4); scene.indices.push(start_index as u32 + 5); scene.indices.push(start_index as u32 + 7); // left scene.indices.push(start_index as u32 + 0); scene.indices.push(start_index as u32 + 4); scene.indices.push(start_index as u32 + 2); scene.indices.push(start_index as u32 + 6); scene.indices.push(start_index as u32 + 2); scene.indices.push(start_index as u32 + 4); // right scene.indices.push(start_index as u32 + 1); scene.indices.push(start_index as u32 + 3); scene.indices.push(start_index as u32 + 5); scene.indices.push(start_index as u32 + 5); scene.indices.push(start_index as u32 + 3); scene.indices.push(start_index as u32 + 7); // near scene.indices.push(start_index as u32 + 6); scene.indices.push(start_index as u32 + 3); scene.indices.push(start_index as u32 + 2); scene.indices.push(start_index as u32 + 3); scene.indices.push(start_index as u32 + 6); scene.indices.push(start_index as u32 + 7); // far scene.indices.push(start_index as u32 + 0); scene.indices.push(start_index as u32 + 1); scene.indices.push(start_index as u32 + 4); scene.indices.push(start_index as u32 + 5); scene.indices.push(start_index as u32 + 4); scene.indices.push(start_index as u32 + 1); } if *topology == vk::PrimitiveTopology::POINT_LIST { scene.vertices.push(vertex::Vertex::new( self.pos, self.color, self.tex_coord )); scene.indices.push(start_index as u32); } } }