diff --git a/shader/FragCoord.frag b/shader/FragCoord.frag index ad1591c..3b78ebe 100644 --- a/shader/FragCoord.frag +++ b/shader/FragCoord.frag @@ -1,4 +1,4 @@ -#version 450 core +#version 450 core layout(binding=1) uniform WorldMatrix // hgl/math/Math.h { @@ -9,6 +9,7 @@ layout(binding=1) uniform WorldMatrix // hgl/math/Math.h mat4 modelview; mat4 inverse_modelview; + mat3 normal; mat4 mvp; mat4 inverse_mvp; diff --git a/shader/LightPosition3D.vert b/shader/LightPosition3D.vert new file mode 100644 index 0000000..c5c62f2 --- /dev/null +++ b/shader/LightPosition3D.vert @@ -0,0 +1,51 @@ +#version 450 core + +layout(location = 0) in vec3 Vertex; +layout(location = 1) in vec3 Normal; + +layout(binding=0) uniform WorldMatrix // hgl/math/Math.h +{ + mat4 ortho; + + mat4 projection; + mat4 inverse_projection; + + mat4 modelview; + mat4 inverse_modelview; + + mat4 mvp; + mat4 inverse_mvp; + + vec4 view_pos; + vec2 canvas_resolution; + vec2 viewport_resolution; +}world; + +layout(push_constant) uniform Consts { + mat4 local_to_world; +}pc; + +layout(binding=1) uniform ColorMaterial +{ + vec4 color; + vec4 amibent; +} color_material; + +layout(binding=2) uniform Sun +{ + vec3 direction; +}sun; + +layout(location=0) out vec4 FragmentColor; + +float GetSunlightIntensity() +{ + return max(dot(normalize(Normal*mat3(world.mvp)),sun.direction),0.0); +} + +void main() +{ + FragmentColor=color_material.color*GetSunlightIntensity()+color_material.amibent; + + gl_Position=vec4(Vertex,1.0)*(pc.local_to_world*world.mvp); +} diff --git a/shader/OnlyPosition3D.vert b/shader/OnlyPosition3D.vert index a190865..e38c1a4 100644 --- a/shader/OnlyPosition3D.vert +++ b/shader/OnlyPosition3D.vert @@ -11,6 +11,7 @@ layout(binding=0) uniform WorldMatrix // hgl/math/Math.h mat4 modelview; mat4 inverse_modelview; + mat3 normal; mat4 mvp; mat4 inverse_mvp; @@ -18,11 +19,11 @@ layout(binding=0) uniform WorldMatrix // hgl/math/Math.h vec4 view_pos; vec2 canvas_resolution; vec2 viewport_resolution; -} world; +}world; layout(push_constant) uniform Consts { mat4 local_to_world; -} pc; +}pc; void main() { diff --git a/shader/UBO/WorldMatrix.glsl b/shader/UBO/WorldMatrix.glsl index 0335cf8..23a2cab 100644 --- a/shader/UBO/WorldMatrix.glsl +++ b/shader/UBO/WorldMatrix.glsl @@ -1,4 +1,4 @@ -layout(binding=0) uniform WorldMatrix // hgl/math/Math.h +layout(binding=0) uniform WorldMatrix // hgl/math/Math.h { mat4 ortho; @@ -7,10 +7,12 @@ layout(binding=0) uniform WorldMatrix // hgl/math/Math.h mat4 modelview; mat4 inverse_modelview; + mat3 normal; mat4 mvp; mat4 inverse_mvp; vec4 view_pos; - vec2 resolution; + vec2 canvas_resolution; + vec2 viewport_resolution; } world; diff --git a/shader/VertexColor.frag b/shader/VertexColor.frag index 1e87450..1ba71e9 100644 --- a/shader/VertexColor.frag +++ b/shader/VertexColor.frag @@ -1,4 +1,4 @@ -#version 450 core +#version 450 core layout(location = 0) in vec4 FragmentColor; layout(location = 0) out vec4 FragColor;