Draw the cubes using flat shading and fewer vertexes.
authorBernie Innocenti <bernie@codewiz.org>
Mon, 26 Jun 2017 05:29:02 +0000 (01:29 -0400)
committerBernie Innocenti <bernie@codewiz.org>
Mon, 26 Jun 2017 05:29:02 +0000 (01:29 -0400)
Described in detail here: http://poniesandlight.co.uk/notes/flat_shading_on_osx/

main.rs
shaded.frag
shaded.vert
shaded_cube.rs

diff --git a/main.rs b/main.rs
index d4e38b79198cc34d079a0e2622232da8815263f3..c673e020c0108e9b0670063bf5b488eded231190 100644 (file)
--- a/main.rs
+++ b/main.rs
@@ -98,7 +98,7 @@ fn main() {
         zmax:  1.1,
     };
     let mandelwow_bbox = bounding_box::BoundingBox::new(&display, &bounds, &bounding_box_program);
-    let shaded_cube = ShadedCube::new(&display, &Cube::default(), &shaded_program);
+    let shaded_cube = ShadedCube::new(&display, &shaded_program);
 
     const SEA_XSIZE: usize = 24;
     const SEA_ZSIZE: usize = 20;
@@ -226,8 +226,8 @@ fn main() {
                             .with_depth_buffer(24)
                             .rebuild_glium(&display).unwrap();
                     } else {
-                        //glutin::WindowBuilder::new()
-                        //    .rebuild_glium(&display).unwrap();
+                        glutin::WindowBuilder::new()
+                            .rebuild_glium(&display).unwrap();
                     }
                 },
                 ev => camera.process_input(&ev),
index e48c837ceef2fc016470a42bef01d95d95cb5512..492644fba3f12cd1b5dc354946891fdbe1279dd7 100644 (file)
@@ -1,7 +1,7 @@
 #version 300 es
 precision lowp float;
 
-in vec4 color;
+flat in vec4 color;
 out vec4 color_out;
 
 void main() {
index e21f5fcbd6cdf4478054ad5331b1ac80dab69a2b..c7c7fa168cd86dd6d5c75005585cd1c77cf6e2cc 100644 (file)
@@ -3,7 +3,7 @@ precision lowp float;
 
 in vec3 position;
 in vec3 normal;
-out vec4 color;  // Shaded color
+flat out vec4 color;  // Shaded color
 
 uniform mat4 model;
 uniform mat4 perspview;
@@ -12,7 +12,7 @@ uniform vec3 col;
 void main() {
     mat4 m = perspview * model;
     vec3 dark = col * 0.1;
-    vec3 u_light = vec3(-0.5, -0.7, -0.6);
+    vec3 u_light = vec3( 0.5, -0.7, -0.6);
     vec3 v_normal = transpose(inverse(mat3(model))) * normal;
 
     float distance = model[3][2];
index f334d2fbd2bad3dc16616b73170a4bcec8304c44..560256f2ad3d59b8905dc6f3cdde5219b200bea8 100644 (file)
@@ -1,4 +1,3 @@
-use cube::Cube;
 use glium;
 use glium::{Display, Program, Surface};
 use glium::index::{IndexBuffer, PrimitiveType};
@@ -23,59 +22,35 @@ pub struct ShadedCube<'a> {
 }
 
 impl<'a> ShadedCube<'a> {
-    pub fn new(display: &Display, c: &Cube, program: &'a Program) -> ShadedCube<'a> {
+    pub fn new(display: &Display, program: &'a Program) -> ShadedCube<'a> {
         //      x--->
         //      4 ──────┐ 5
         //      ╱┆     ╱│
         //   0 ┌─────┐1 │
-        // y   │ 7+┄┄│┄┄+ 6
-        // |   │╱    │ ╱   /
-        // v   └─────┘    z
+        // y   │ 7+┄┄│┄┄+ 6    z
+        // |   │╱    │ ╱    ╱
+        // v   └─────┘
         //    3       2
         let vertex_data = [
-            // Front face
-            Vertex { position: [c.xmin, c.ymin, c.zmin], normal: [  0.,  0.,  1.] },  // 0
-            Vertex { position: [c.xmax, c.ymin, c.zmin], normal: [  0.,  0.,  1.] },  // 1
-            Vertex { position: [c.xmax, c.ymax, c.zmin], normal: [  0.,  0.,  1.] },  // 2
-            Vertex { position: [c.xmin, c.ymax, c.zmin], normal: [  0.,  0.,  1.] },  // 3
+            // Front
+            Vertex { position: [-0.5, -0.5,  0.5], normal: [  0.,  0., -1.] },  // 0
+            Vertex { position: [ 0.5, -0.5,  0.5], normal: [ -1.,  0.,  0.] },  // 1
+            Vertex { position: [ 0.5,  0.5,  0.5], normal: [  0., -1.,  0.] },  // 2
+            Vertex { position: [-0.5,  0.5,  0.5], normal: [  1.,  0.,  0.] },  // 3
 
-            // Back face
-            Vertex { position: [c.xmin, c.ymax, c.zmax], normal: [  0.,  0., -1.] },  // 7
-            Vertex { position: [c.xmax, c.ymax, c.zmax], normal: [  0.,  0., -1.] },  // 6
-            Vertex { position: [c.xmax, c.ymin, c.zmax], normal: [  0.,  0., -1.] },  // 5
-            Vertex { position: [c.xmin, c.ymin, c.zmax], normal: [  0.,  0., -1.] },  // 4
-
-            // Right face
-            Vertex { position: [c.xmax, c.ymin, c.zmin], normal: [ -1.,  0.,  0.] },  // 1
-            Vertex { position: [c.xmax, c.ymin, c.zmax], normal: [ -1.,  0.,  0.] },  // 5
-            Vertex { position: [c.xmax, c.ymax, c.zmax], normal: [ -1.,  0.,  0.] },  // 6
-            Vertex { position: [c.xmax, c.ymax, c.zmin], normal: [ -1.,  0.,  0.] },  // 2
-
-            // Left face
-            Vertex { position: [c.xmin, c.ymin, c.zmin], normal: [  1.,  0.,  0.] },  // 0
-            Vertex { position: [c.xmin, c.ymax, c.zmin], normal: [  1.,  0.,  0.] },  // 3
-            Vertex { position: [c.xmin, c.ymax, c.zmax], normal: [  1.,  0.,  0.] },  // 7
-            Vertex { position: [c.xmin, c.ymin, c.zmax], normal: [  1.,  0.,  0.] },  // 4
-
-            // Top face
-            Vertex { position: [c.xmin, c.ymin, c.zmin], normal: [  0.,  1.,  0.] },  // 0
-            Vertex { position: [c.xmin, c.ymin, c.zmax], normal: [  0.,  1.,  0.] },  // 4
-            Vertex { position: [c.xmax, c.ymin, c.zmax], normal: [  0.,  1.,  0.] },  // 5
-            Vertex { position: [c.xmax, c.ymin, c.zmin], normal: [  0.,  1.,  0.] },  // 1
-
-            // Bottom face
-            Vertex { position: [c.xmax, c.ymax, c.zmin], normal: [  0., -1.,  0.] },  // 2
-            Vertex { position: [c.xmax, c.ymax, c.zmax], normal: [  0., -1.,  0.] },  // 6
-            Vertex { position: [c.xmin, c.ymax, c.zmax], normal: [  0., -1.,  0.] },  // 7
-            Vertex { position: [c.xmin, c.ymax, c.zmin], normal: [  0., -1.,  0.] },  // 3
+            // Back
+            Vertex { position: [-0.5, -0.5, -0.5], normal: [  0.,  1.,  0.] },  // 4
+            Vertex { position: [ 0.5, -0.5, -0.5], normal: [  0.,  0.,  1.] },  // 5
+            Vertex { position: [ 0.5,  0.5, -0.5], normal: [  0.,  0.,  0.] },  // 6
+            Vertex { position: [-0.5,  0.5, -0.5], normal: [  0.,  0.,  0.] },  // 7
         ];
         const INDICES: &[u16] = &[
-             0,  1,  2,  0,  2,  3,  // Front
-             4,  5,  6,  4,  6,  7,  // Back
-             8,  9, 10,  8, 10, 11,  // Right
-            12, 13, 14, 12, 14, 15,  // Left
-            16, 17, 18, 16, 18, 19,  // Top
-            20, 21, 22, 20, 22, 23u16  // Bottom
+             1,  2,  0,  2,  3,  0,    // Front
+             5,  6,  1,  6,  2,  1,    // Right
+             6,  7,  2,  7,  3,  2,    // Top
+             4,  0,  3,  7,  4,  3,    // Left
+             5,  1,  4,  1,  0,  4,    // Top
+             7,  6,  5,  4,  7,  5u16  // Back
         ];
 
         ShadedCube {
@@ -93,7 +68,7 @@ impl<'a> ShadedCube<'a> {
                 write: true,
                 ..Default::default()
             },
-            backface_culling: glium::draw_parameters::BackfaceCullingMode::CullCounterClockwise,
+            backface_culling: glium::draw_parameters::BackfaceCullingMode::CullClockwise,
             ..Default::default()
         };
         frame.draw(&self.vertexes, &self.indices, &self.program, uniforms, &params).unwrap();