mirror of
https://github.com/Mercantec-GHC/h5-projekt-mst.git
synced 2026-08-27 05:37:39 +02:00
fix rendering order
This commit is contained in:
parent
121bf802aa
commit
04b1943040
2
game/Cargo.lock
generated
2
game/Cargo.lock
generated
@ -39,7 +39,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "1d73fc820b0b6b9bd0557de7b799ec9da1ca4f35fcd1cb42f7ceb85e640d1477"
|
checksum = "1d73fc820b0b6b9bd0557de7b799ec9da1ca4f35fcd1cb42f7ceb85e640d1477"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unnamed-game-engine"
|
name = "skate-slope"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"sdl3",
|
"sdl3",
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "unnamed-game-engine"
|
name = "skate-slope"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
|||||||
@ -18,35 +18,41 @@ impl Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn render<R: Renderer>(&mut self, r: &mut R, camera: V3) {
|
pub fn render<R: Renderer>(&mut self, r: &mut R, camera: V3) {
|
||||||
self.objects.sort_by(|a, b| {
|
let mut indices_with_scores = self
|
||||||
let a = a
|
|
||||||
.triangle
|
|
||||||
.points()
|
|
||||||
.map(|p| p.distance(camera))
|
|
||||||
.into_iter()
|
|
||||||
.max_by(|a, b| a.total_cmp(b))
|
|
||||||
.unwrap();
|
|
||||||
let b = b
|
|
||||||
.triangle
|
|
||||||
.points()
|
|
||||||
.map(|p| p.distance(camera))
|
|
||||||
.into_iter()
|
|
||||||
.max_by(|a, b| a.total_cmp(b))
|
|
||||||
.unwrap();
|
|
||||||
b.total_cmp(&a)
|
|
||||||
});
|
|
||||||
|
|
||||||
let drawn_triangles = self
|
|
||||||
.objects
|
.objects
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|v| {
|
.enumerate()
|
||||||
v.triangle.0 .2 >= -1.0 && v.triangle.1 .2 >= -1.0 && v.triangle.2 .2 >= -1.0
|
.map(|(i, object)| {
|
||||||
|
let mut point_scores = object.triangle.points().map(|p| p.distance(camera));
|
||||||
|
point_scores.sort_by(|a, b| a.total_cmp(b));
|
||||||
|
|
||||||
|
(i, point_scores[0])
|
||||||
})
|
})
|
||||||
.map(|v| (v.triangle.project_2d(), v.outline_color, v.fill_color));
|
.rev()
|
||||||
for (triangle, outline_color, fill_color) in drawn_triangles {
|
.collect::<Vec<_>>();
|
||||||
r.draw_triangle(triangle.clone(), fill_color);
|
|
||||||
r.draw_line(triangle.0, triangle.1, outline_color);
|
indices_with_scores.sort_by(|a, b| b.1.total_cmp(&a.1));
|
||||||
r.draw_line(triangle.0, triangle.2, outline_color);
|
|
||||||
|
for (i, _) in indices_with_scores {
|
||||||
|
let object = &self.objects[i];
|
||||||
|
|
||||||
|
// check if behind camera
|
||||||
|
if !(object.triangle.0 .2 >= -1.0
|
||||||
|
&& object.triangle.1 .2 >= -1.0
|
||||||
|
&& object.triangle.2 .2 >= -1.0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if object.triangle.normal().dot(object.triangle.0 - camera) >= 0.0 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let triangle = object.triangle.project_2d();
|
||||||
|
|
||||||
|
r.draw_triangle(triangle.clone(), object.fill_color);
|
||||||
|
r.draw_line(triangle.0, triangle.1, object.outline_color);
|
||||||
|
r.draw_line(triangle.0, triangle.2, object.outline_color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -120,7 +120,7 @@ struct ShapeGroupShape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ShapeGroup {
|
struct ShapeGroup {
|
||||||
shapes: Vec<ShapeGroupShape>,
|
pub shapes: Vec<ShapeGroupShape>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShapeGroup {
|
impl ShapeGroup {
|
||||||
@ -188,6 +188,7 @@ impl Object {
|
|||||||
fn render(&self, scene: &mut Scene) {
|
fn render(&self, scene: &mut Scene) {
|
||||||
match self.kind {
|
match self.kind {
|
||||||
ObjectKind::SkateBoard { pos, rot, .. } => {
|
ObjectKind::SkateBoard { pos, rot, .. } => {
|
||||||
|
let camera_pos = V3(0.0, 0.0, -1.0);
|
||||||
let board = ShapeGroup::new(vec![
|
let board = ShapeGroup::new(vec![
|
||||||
ShapeGroupShape {
|
ShapeGroupShape {
|
||||||
shape: Shape::new_cube(V3(0.2, 0.01, 0.05)),
|
shape: Shape::new_cube(V3(0.2, 0.01, 0.05)),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user