kinect/codes/Azure-Kinect-Samples/body-tracking-samples/csharp_3d_viewer/Shaders.cs

62 lines
1.9 KiB
C#
Raw Permalink Normal View History

2024-03-06 18:05:53 +00:00
using System.Linq;
namespace Csharp_3d_viewer
{
public static class Shaders
{
private const string VertexShaderText = @"
#version 430
layout(location = 0) in vec3 vertexPosition;
layout(location = 1) in vec3 vertexNormal;
out vec4 fragmentColor;
out vec3 fragmentPosition;
out vec3 fragmentNormal;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform vec4 color;
void main()
{
fragmentColor = color;
fragmentPosition = vec3(model * vec4(vertexPosition, 1.0));
fragmentNormal = mat3(transpose(inverse(model))) * vertexNormal;
gl_Position = projection * view * model * vec4(vertexPosition, 1);
}
";
private const string FragmentShaderText = @"
#version 430
out vec4 fragColor;
in vec4 fragmentColor;
in vec3 fragmentPosition;
in vec3 fragmentNormal;
void main()
{
vec3 lightPosition = vec3(0, 0, 0);
// diffuse
vec3 norm = normalize(fragmentNormal);
vec3 lightDir = lightPosition - fragmentPosition;
float dist2 = dot(lightDir, lightDir);
lightDir = normalize(lightDir);
float diffuse = abs(dot(norm, lightDir)) / dist2;
fragColor = vec4(fragmentColor.rgb * diffuse, fragmentColor.a);
}
";
public static string[] VertexShaderLines => ConvertToLines(VertexShaderText);
public static string[] VertexFragmentLines => ConvertToLines(FragmentShaderText);
private static string[] ConvertToLines(string text)
{
return text.Split('\n').Select(s => s + '\n').ToArray();
}
}
}