From 69343b3bc6fb464f89ec22eca52c379dec58ac68 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 16 Jun 2020 18:43:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0LightPosition3D.vert=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E9=A1=B6=E7=82=B9=E6=96=B9=E5=90=91=E5=85=89=EF=BC=8C?= =?UTF-8?q?=E9=85=8D=E5=90=88SceneTree=E8=8C=83=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shader/FragCoord.frag | 3 ++- shader/LightPosition3D.vert | 51 +++++++++++++++++++++++++++++++++++++ shader/OnlyPosition3D.vert | 5 ++-- shader/UBO/WorldMatrix.glsl | 6 +++-- shader/VertexColor.frag | 2 +- 5 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 shader/LightPosition3D.vert 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;