diff --git a/shaders/chunk.frag b/shaders/chunk.frag index 3f3287c..5bcacaa 100644 --- a/shaders/chunk.frag +++ b/shaders/chunk.frag @@ -7,16 +7,19 @@ layout(location = 0) out vec4 outColor; layout(location = 0) in vec4 normal; layout(location = 1) in vec4 pos_pre; layout(location = 2) in vec4 view_orig; +layout(location = 3) in vec4 pos_post; layout(push_constant, std430) uniform pc { layout(offset=48) vec4 data; }; void main() { - outColor = vec4(data.rgb*(1.0+dot(normal.xyz, normalize(vec3(-0.7, -0.5, -0.1))))/2.0, 1.0); + outColor = vec4(vec3(pos_post.z / pos_post.w), 1.0); //if(pos_post.z <= 0.0) { // outColor = vec4(1.0); //} //outColor = normal.xyz; //outColor = vec4(vec3(1.0-gl_FragCoord.z), 1.0); + + //gl_FragDepth = pos_post.z / pos_post.w; } diff --git a/shaders/chunk.vert b/shaders/chunk.vert index a8375c7..bf16c8f 100644 --- a/shaders/chunk.vert +++ b/shaders/chunk.vert @@ -20,6 +20,8 @@ layout(push_constant, std430) uniform pc { layout (location = 0) out vec4 normal; layout (location = 1) out vec4 pos_pre; layout (location = 2) out vec4 view_orig; +layout (location = 3) out vec4 pos_post; + const float PI = 3.14159; // Forgive me for I have sinned @@ -32,7 +34,7 @@ void main() { view_orig = cam_orig; // define constants - const float zFar = 100.0; + const float zFar = 10.0; const float zNear = 0.1; // assign the transformee @@ -77,7 +79,7 @@ void main() { mat4 project_div = mat4( 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, tan((70.0/2.0)/360.0*TAU), 0.0 ); mat4 project_normal = mat4( @@ -127,4 +129,5 @@ void main() { //gl_Position.z /= zFar; gl_Position *= project_normal; + pos_post = gl_Position; } diff --git a/shaders/cube.frag b/shaders/cube.frag index 95894e0..e9aeb79 100644 --- a/shaders/cube.frag +++ b/shaders/cube.frag @@ -9,6 +9,8 @@ layout(location = 0) out vec4 outColor; layout(location = 0) in vec4 normal; layout(location = 1) in vec4 pos_pre; layout(location = 2) in vec4 view_orig; +layout(location = 3) in vec4 pos_post; + layout(push_constant, std430) uniform pc { layout(offset=48) vec4 data; @@ -23,4 +25,5 @@ void main() { //} //outColor = normal.xyz; //outColor = vec4(vec3(1.0-gl_FragCoord.z), 1.0); + //gl_FragDepth = pos_post.z / pos_post.w; } diff --git a/shaders/cube.vert b/shaders/cube.vert index a8375c7..70a945e 100644 --- a/shaders/cube.vert +++ b/shaders/cube.vert @@ -20,6 +20,7 @@ layout(push_constant, std430) uniform pc { layout (location = 0) out vec4 normal; layout (location = 1) out vec4 pos_pre; layout (location = 2) out vec4 view_orig; +layout (location = 3) out vec4 pos_post; const float PI = 3.14159; // Forgive me for I have sinned @@ -32,8 +33,8 @@ void main() { view_orig = cam_orig; // define constants - const float zFar = 100.0; - const float zNear = 0.1; + const float zFar = 10.0; + const float zNear = 0.01; // assign the transformee gl_Position = pos.posnrm[gl_VertexIndex].pos; @@ -77,7 +78,7 @@ void main() { mat4 project_div = mat4( 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, tan((70.0/2.0)/360.0*TAU), 0.0 ); mat4 project_normal = mat4( @@ -127,4 +128,5 @@ void main() { //gl_Position.z /= zFar; gl_Position *= project_normal; + pos_post = gl_Position; } diff --git a/shaders/skybox.frag b/shaders/skybox.frag index f7c6ea4..91cd42d 100644 --- a/shaders/skybox.frag +++ b/shaders/skybox.frag @@ -7,4 +7,7 @@ layout(location = 0) out vec4 outColor; layout(location = 0) in vec4 pos_pre; -void main() { outColor = texture(combined_image, vec3(pos_pre)); } +void main() { + outColor = texture(combined_image, vec3(pos_pre)); + gl_FragDepth = 0.99; +} diff --git a/shaders/skybox.vert b/shaders/skybox.vert index 4616c0c..f510ac5 100644 --- a/shaders/skybox.vert +++ b/shaders/skybox.vert @@ -4,52 +4,52 @@ const vec4 positions[36] = vec4[36]( // BOTTOM - vec4(-0.5, 0.5, -0.5, 1.0), - vec4(0.5, 0.5, 0.5, 1.0), - vec4(-0.5, 0.5, 0.5, 1.0), - vec4(0.5, 0.5, -0.5, 1.0), - vec4(0.5, 0.5, 0.5, 1.0), - vec4(-0.5, 0.5, -0.5, 1.0), + vec4(-50.0, 50.0, -50.0, 1.0), + vec4(50.0, 50.0, 50.0, 1.0), + vec4(-50.0, 50.0, 50.0, 1.0), + vec4(50.0, 50.0, -50.0, 1.0), + vec4(50.0, 50.0, 50.0, 1.0), + vec4(-50.0, 50.0, -50.0, 1.0), // TOP - vec4(0.5, -0.5, 0.5, 1.0), - vec4(-0.5, -0.5, -0.5, 1.0), - vec4(-0.5, -0.5, 0.5, 1.0), - vec4(0.5, -0.5, 0.5, 1.0), - vec4(0.5, -0.5, -0.5, 1.0), - vec4(-0.5, -0.5, -0.5, 1.0), + vec4(50.0, -50.0, 50.0, 1.0), + vec4(-50.0, -50.0, -50.0, 1.0), + vec4(-50.0, -50.0, 50.0, 1.0), + vec4(50.0, -50.0, 50.0, 1.0), + vec4(50.0, -50.0, -50.0, 1.0), + vec4(-50.0, -50.0, -50.0, 1.0), // FRONT - vec4(-0.5, -0.5, -0.5, 1.0), - vec4(0.5, 0.5, -0.5, 1.0), - vec4(-0.5, 0.5, -0.5, 1.0), - vec4(0.5, -0.5, -0.5, 1.0), - vec4(0.5, 0.5, -0.5, 1.0), - vec4(-0.5, -0.5, -0.5, 1.0), + vec4(-50.0, -50.0, -50.0, 1.0), + vec4(50.0, 50.0, -50.0, 1.0), + vec4(-50.0, 50.0, -50.0, 1.0), + vec4(50.0, -50.0, -50.0, 1.0), + vec4(50.0, 50.0, -50.0, 1.0), + vec4(-50.0, -50.0, -50.0, 1.0), // BACK - vec4(0.5, 0.5, 0.5, 1.0), - vec4(-0.5, -0.5, 0.5, 1.0), - vec4(-0.5, 0.5, 0.5, 1.0), - vec4(0.5, 0.5, 0.5, 1.0), - vec4(0.5, -0.5, 0.5, 1.0), - vec4(-0.5, -0.5, 0.5, 1.0), + vec4(50.0, 50.0, 50.0, 1.0), + vec4(-50.0, -50.0, 50.0, 1.0), + vec4(-50.0, 50.0, 50.0, 1.0), + vec4(50.0, 50.0, 50.0, 1.0), + vec4(50.0, -50.0, 50.0, 1.0), + vec4(-50.0, -50.0, 50.0, 1.0), // LEFT - vec4(-0.5, -0.5, -0.5, 1.0), - vec4(-0.5, 0.5, 0.5, 1.0), - vec4(-0.5, -0.5, 0.5, 1.0), - vec4(-0.5, 0.5, -0.5, 1.0), - vec4(-0.5, 0.5, 0.5, 1.0), - vec4(-0.5, -0.5, -0.5, 1.0), + vec4(-50.0, -50.0, -50.0, 1.0), + vec4(-50.0, 50.0, 50.0, 1.0), + vec4(-50.0, -50.0, 50.0, 1.0), + vec4(-50.0, 50.0, -50.0, 1.0), + vec4(-50.0, 50.0, 50.0, 1.0), + vec4(-50.0, -50.0, -50.0, 1.0), // RIGHT - vec4(0.5, 0.5, 0.5, 1.0), - vec4(0.5, -0.5, -0.5, 1.0), - vec4(0.5, -0.5, 0.5, 1.0), - vec4(0.5, 0.5, 0.5, 1.0), - vec4(0.5, 0.5, -0.5, 1.0), - vec4(0.5, -0.5, -0.5, 1.0) + vec4(50.0, 50.0, 50.0, 1.0), + vec4(50.0, -50.0, -50.0, 1.0), + vec4(50.0, -50.0, 50.0, 1.0), + vec4(50.0, 50.0, 50.0, 1.0), + vec4(50.0, 50.0, -50.0, 1.0), + vec4(50.0, -50.0, -50.0, 1.0) ); layout(push_constant, std430) uniform pc { @@ -69,7 +69,7 @@ void main() { pos_pre = positions[gl_VertexIndex]; // define constants - const float zFar = 100.0; + const float zFar = 50.0; const float zNear = 0.1; // assign the transformee diff --git a/src/input/ingame_input.rs b/src/input/ingame_input.rs index 86bfa0e..3c48433 100644 --- a/src/input/ingame_input.rs +++ b/src/input/ingame_input.rs @@ -7,8 +7,8 @@ use crate::{Game, InWorld}; use super::InputHandler; -const MOV_STEP: f32 = 0.05; -const ROT_MOUSE_SCALE: f32 = 0.001; +const MOV_STEP: f32 = 0.1; +const ROT_MOUSE_SCALE: f32 = 0.002; impl InputHandler for Game { fn handle_cont_key(&mut self, keycode: Keycode) { diff --git a/src/main.rs b/src/main.rs index 53dcbcc..4de8da3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -141,6 +141,18 @@ fn main() { }, vec3!(1, 1, 1), ); + chunk.set_block( + Block { + typ: BlockType::Solid, + }, + vec3!(1, 2, 1), + ); + chunk.set_block( + Block { + typ: BlockType::Solid, + }, + vec3!(2, 2, 1), + ); let chunk = game.create_chunk(&chunk); game.add_component(chunk); diff --git a/src/render/chunk.rs b/src/render/chunk.rs index c94a058..8517ef6 100644 --- a/src/render/chunk.rs +++ b/src/render/chunk.rs @@ -213,7 +213,7 @@ fn setup_pipeline( .topology(vk::PrimitiveTopology::TRIANGLE_LIST); let rasterization = vk::PipelineRasterizationStateCreateInfo::default() .polygon_mode(vk::PolygonMode::FILL) - .cull_mode(vk::CullModeFlags::NONE) + .cull_mode(vk::CullModeFlags::BACK) .front_face(vk::FrontFace::CLOCKWISE) .line_width(1.0); let multisample = vk::PipelineMultisampleStateCreateInfo::default() @@ -222,7 +222,7 @@ fn setup_pipeline( .depth_test_enable(true) .depth_write_enable(true) .depth_compare_op(vk::CompareOp::LESS) - .depth_bounds_test_enable(true) + .depth_bounds_test_enable(false) .stencil_test_enable(false) .min_depth_bounds(0.0) .max_depth_bounds(1.0); diff --git a/src/render/cube.rs b/src/render/cube.rs index adb9d13..d34a994 100644 --- a/src/render/cube.rs +++ b/src/render/cube.rs @@ -345,7 +345,7 @@ fn setup_pipeline( .depth_test_enable(true) .depth_write_enable(true) .depth_compare_op(vk::CompareOp::LESS) - .depth_bounds_test_enable(true) + .depth_bounds_test_enable(false) .stencil_test_enable(false) .min_depth_bounds(0.0) .max_depth_bounds(1.0); diff --git a/src/render/in_world.rs b/src/render/in_world.rs index 3dc1141..78d66c5 100644 --- a/src/render/in_world.rs +++ b/src/render/in_world.rs @@ -198,7 +198,8 @@ impl Game { *cmd_buf, &[vk::Viewport::default() .width(*width as f32) - .height(*height as f32)], + .height(*height as f32) + .max_depth(1.0)], ); dev.cmd_set_scissor_with_count( *cmd_buf, diff --git a/src/render/mesher/block_mesher.rs b/src/render/mesher/block_mesher.rs index 271aed5..bbbdf67 100644 --- a/src/render/mesher/block_mesher.rs +++ b/src/render/mesher/block_mesher.rs @@ -5,12 +5,12 @@ use crate::{game::chunk::Block, vec3, vector::Vector3}; use super::Mesh; const TOP_POSITIONS: [Vector3; 6] = [ - vec3!(0.0, 1.0, 0.0), - vec3!(1.0, 1.0, 0.0), vec3!(0.0, 1.0, 1.0), - vec3!(1.0, 1.0, 1.0), vec3!(1.0, 1.0, 0.0), - vec3!(0.0, 1.0, 1.0), + vec3!(0.0, 1.0, 0.0), + vec3!(1.0, 1.0, 1.0), // 3 + vec3!(1.0, 1.0, 0.0), // 2 + vec3!(0.0, 1.0, 1.0), // 1 ]; const TOP_NORMAL: Vector3 = vec3!(0.0, 1.0, 0.0); @@ -19,9 +19,9 @@ const BOTTOM_POSITIONS: [Vector3; 6] = [ vec3!(0.0, 0.0, 0.0), vec3!(1.0, 0.0, 0.0), vec3!(0.0, 0.0, 1.0), - vec3!(1.0, 0.0, 1.0), - vec3!(1.0, 0.0, 0.0), - vec3!(0.0, 0.0, 1.0), + vec3!(0.0, 0.0, 1.0), // 1 + vec3!(1.0, 0.0, 0.0), // 2 + vec3!(1.0, 0.0, 1.0), // 3 ]; const BOTTOM_NORMAL: Vector3 = vec3!(0.0, -1.0, 0.0); @@ -31,19 +31,19 @@ const NORTH_POSITIONS: [Vector3; 6] = [ vec3!(1.0, 1.0, 0.0), vec3!(1.0, 0.0, 1.0), vec3!(1.0, 1.0, 1.0), - vec3!(1.0, 1.0, 0.0), vec3!(1.0, 0.0, 1.0), + vec3!(1.0, 1.0, 0.0), ]; const NORTH_NORMAL: Vector3 = vec3!(1.0, 0.0, 0.0); const SOUTH_POSITIONS: [Vector3; 6] = [ - vec3!(0.0, 0.0, 0.0), - vec3!(0.0, 1.0, 0.0), vec3!(0.0, 0.0, 1.0), - vec3!(0.0, 1.0, 1.0), vec3!(0.0, 1.0, 0.0), - vec3!(0.0, 0.0, 1.0), + vec3!(0.0, 0.0, 0.0), + vec3!(0.0, 1.0, 1.0), // 3 + vec3!(0.0, 1.0, 0.0), // 2 + vec3!(0.0, 0.0, 1.0), // 1 ]; const SOUTH_NORMAL: Vector3 = vec3!(-1.0, 0.0, 0.0); @@ -52,17 +52,17 @@ const EAST_POSITIONS: [Vector3; 6] = [ vec3!(0.0, 0.0, 1.0), vec3!(1.0, 0.0, 1.0), vec3!(0.0, 1.0, 1.0), - vec3!(1.0, 1.0, 1.0), - vec3!(1.0, 0.0, 1.0), vec3!(0.0, 1.0, 1.0), + vec3!(1.0, 0.0, 1.0), + vec3!(1.0, 1.0, 1.0), ]; const EAST_NORMAL: Vector3 = vec3!(0.0, 0.0, 1.0); const WEST_POSITIONS: [Vector3; 6] = [ - vec3!(0.0, 0.0, 0.0), - vec3!(1.0, 0.0, 0.0), vec3!(0.0, 1.0, 0.0), + vec3!(1.0, 0.0, 0.0), + vec3!(0.0, 0.0, 0.0), vec3!(1.0, 1.0, 0.0), vec3!(1.0, 0.0, 0.0), vec3!(0.0, 1.0, 0.0), diff --git a/src/render/mesher/mod.rs b/src/render/mesher/mod.rs index c4901a3..23f4b6b 100644 --- a/src/render/mesher/mod.rs +++ b/src/render/mesher/mod.rs @@ -18,7 +18,7 @@ pub struct PosNorm { impl PosNorm { fn new(pos: Vector3, norm: Vector3) -> Self { Self { - pos: [pos.x, pos.y, pos.z, 0.0], + pos: [pos.x, pos.y, pos.z, 1.0], norm: [norm.x, norm.y, norm.z, 0.0], } }