plane_shader.wgsl 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // Vertex shader
  2. struct CameraUniform {
  3. view_proj: mat4x4<f32>
  4. }
  5. @group(0) @binding(0)
  6. var<uniform> camera: CameraUniform;
  7. struct VertexInput {
  8. @location(0) position: vec3<f32>,
  9. @location(1) color: vec3<f32>,
  10. @location(2) uv: vec2<f32>,
  11. };
  12. struct VertexOutput {
  13. @builtin(position) clip_position: vec4<f32>,
  14. @location(0) color: vec3<f32>,
  15. };
  16. @group(1) @binding(0)
  17. var t_diffuse: texture_2d<f32>;
  18. @group(1) @binding(1)
  19. var s_diffuse: sampler;
  20. @vertex
  21. fn vs_main(
  22. model: VertexInput,
  23. ) -> VertexOutput {
  24. let normalized_uv_coordinates = model.uv * vec2<f32>(textureDimensions(t_diffuse));
  25. let height_added = textureLoad(t_diffuse,vec2<u32>(normalized_uv_coordinates),0);
  26. let grayscale_height_added = height_added.x;
  27. var out: VertexOutput;
  28. out.color = model.color;
  29. out.clip_position = camera.view_proj * vec4<f32>(model.position.x,model.position.y, model.position.z + (100* grayscale_height_added), 1.0);
  30. return out;
  31. }
  32. // Fragment shader
  33. @fragment
  34. fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
  35. return vec4<f32>(1.0,0.0,0.0, 1.0);
  36. }