diff --git a/docs/intermediate/tutorial10-lighting/README.md b/docs/intermediate/tutorial10-lighting/README.md index b5c98856..df2e0d4c 100644 --- a/docs/intermediate/tutorial10-lighting/README.md +++ b/docs/intermediate/tutorial10-lighting/README.md @@ -96,7 +96,7 @@ Let's also update the lights position in the `update()` method, so we can see wh let old_position = self.light.position; self.light.position = cgmath::Quaternion::from_axis_angle((0.0, 1.0, 0.0).into(), cgmath::Deg(1.0)) * old_position; -let staging_buffer = device.create_buffer_with_data( +let staging_buffer = self.device.create_buffer_with_data( bytemuck::cast_slice(&[self.light]), wgpu::BufferUsage::COPY_SRC, ); @@ -189,7 +189,7 @@ let render_pipeline = { &device, &render_pipeline_layout, sc_desc.format, - Some(texture::DEPTH_FORMAT), + Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], vs_src, fs_src @@ -307,7 +307,7 @@ let light_render_pipeline = { &device, &layout, sc_desc.format, - Some(texture::DEPTH_FORMAT), + Some(texture::Texture::DEPTH_FORMAT), &[model::ModelVertex::desc()], vs_src, fs_src, @@ -345,7 +345,7 @@ void main() { vec3 v_position = a_position * scale + u_position; gl_Position = u_view_proj * vec4(v_position, 1); - v_color = u_color; + v_color = vec4(u_color, 1.0); } ``` @@ -459,8 +459,8 @@ The ambient part is based on the light color as well as the object color. We've ```glsl layout(set = 2, binding = 0) uniform Light { - vec3 u_position; - vec3 u_color; + vec3 light_position; + vec3 light_color; }; ``` @@ -515,8 +515,9 @@ For now let's just pass the normal directly as is. This is wrong, but we'll fix void main() { v_tex_coords = a_tex_coords; v_normal = a_normal; // NEW! - v_position = s_models[gl_InstanceIndex] * vec4(a_position, 1.0); // NEW! - gl_Position = u_view_proj * v_position; // UPDATED! + vec4 model_space = s_models[gl_InstanceIndex] * vec4(a_position, 1.0); // NEW! + v_position = model_space.xyz; // NEW! + gl_Position = u_view_proj * model_space; // UPDATED! } ``` @@ -601,7 +602,7 @@ Specular lighting describes the highlights that appear on objects when viewed fr ![./specular_diagram.png](./specular_diagram.png) -Because this is relative to the view angle, we are going to need to pass in the camera's position into the fragment shader. +Because this is relative to the view angle, we are going to need to pass in the camera's position both into the fragment shader and into the vertex shader. ```glsl // shader.frag @@ -612,6 +613,16 @@ uniform Uniforms { }; ``` +```glsl +// shader.vert & light.vert +layout(set=1, binding=0) +uniform Uniforms { + vec3 u_view_position; // unused + mat4 u_view_proj; +}; +``` + + We're going to need to update the `Uniforms` struct as well. ```rust @@ -706,4 +717,4 @@ It's hard to tell the difference, but here's the results. ![./half_dir.png](./half_dir.png) - \ No newline at end of file +