combine quads
This commit is contained in:
parent
457d3e2d6b
commit
5bd181adc9
8 changed files with 181 additions and 116 deletions
src/primitives
|
@ -1,5 +1,5 @@
|
|||
use vulkanalia::prelude::v1_0::*;
|
||||
use cgmath::vec3;
|
||||
use cgmath::{vec3, ElementWise, Vector2};
|
||||
use crate::vertex::{self, Facing};
|
||||
use crate::scene::Scene;
|
||||
use crate::primitives::drawable::Drawable;
|
||||
|
@ -11,6 +11,7 @@ pub struct Quad{
|
|||
pub pos3: vertex::Vec3,
|
||||
pub pos4: vertex::Vec3,
|
||||
pub raster_pos: cgmath::Vector2<u32>,
|
||||
pub size: cgmath::Vector2<u32>,
|
||||
pub volume_index: u32,
|
||||
pub facing: Facing,
|
||||
}
|
||||
|
@ -21,40 +22,50 @@ impl Drawable for Quad {
|
|||
// 0 top left far
|
||||
scene.rt_vertices.push(vertex::RTVertex::new(
|
||||
vec3(self.pos1.x as f32, self.pos1.y as f32, self.pos1.z as f32),
|
||||
self.raster_pos,
|
||||
self.raster_pos + self.size.mul_element_wise(cgmath::Vector2 {x: 0, y: 0}),
|
||||
self.volume_index,
|
||||
self.facing
|
||||
));
|
||||
// 1 top right far
|
||||
scene.rt_vertices.push(vertex::RTVertex::new(
|
||||
vec3(self.pos2.x as f32, self.pos2.y as f32, self.pos2.z as f32),
|
||||
self.raster_pos,
|
||||
self.raster_pos + self.size.mul_element_wise(cgmath::Vector2 {x: 0, y: 1}),
|
||||
self.volume_index,
|
||||
self.facing
|
||||
));
|
||||
// 2 top left near
|
||||
scene.rt_vertices.push(vertex::RTVertex::new(
|
||||
vec3(self.pos3.x as f32, self.pos3.y as f32, self.pos3.z as f32),
|
||||
self.raster_pos,
|
||||
self.raster_pos + self.size.mul_element_wise(cgmath::Vector2 {x: 1, y: 1}),
|
||||
self.volume_index,
|
||||
self.facing
|
||||
));
|
||||
// 3 top right near
|
||||
scene.rt_vertices.push(vertex::RTVertex::new(
|
||||
vec3(self.pos4.x as f32, self.pos4.y as f32, self.pos4.z as f32),
|
||||
self.raster_pos,
|
||||
self.raster_pos + self.size.mul_element_wise(cgmath::Vector2 {x: 1, y: 0}),
|
||||
self.volume_index,
|
||||
self.facing
|
||||
));
|
||||
|
||||
// top
|
||||
scene.indices_rt.push(start_index as u32 + 2);
|
||||
scene.indices_rt.push(start_index as u32 + 1);
|
||||
scene.indices_rt.push(start_index as u32 + 0);
|
||||
// change node order while preserving texture coordinates
|
||||
if [Facing::Top].contains(&self.facing) {
|
||||
scene.indices_rt.push(start_index as u32 + 0);
|
||||
scene.indices_rt.push(start_index as u32 + 1);
|
||||
scene.indices_rt.push(start_index as u32 + 2);
|
||||
|
||||
scene.indices_rt.push(start_index as u32 + 0);
|
||||
scene.indices_rt.push(start_index as u32 + 3);
|
||||
scene.indices_rt.push(start_index as u32 + 2);
|
||||
scene.indices_rt.push(start_index as u32 + 2);
|
||||
scene.indices_rt.push(start_index as u32 + 3);
|
||||
scene.indices_rt.push(start_index as u32 + 0);
|
||||
} else {
|
||||
scene.indices_rt.push(start_index as u32 + 2);
|
||||
scene.indices_rt.push(start_index as u32 + 1);
|
||||
scene.indices_rt.push(start_index as u32 + 0);
|
||||
|
||||
scene.indices_rt.push(start_index as u32 + 0);
|
||||
scene.indices_rt.push(start_index as u32 + 3);
|
||||
scene.indices_rt.push(start_index as u32 + 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue