mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 13:28:20 +00:00
Geometry shader support+omnidirectional depth map shader+improvements
This commit is contained in:
62
res/shaders/omnidirectional-depth-map.glsl
Executable file
62
res/shaders/omnidirectional-depth-map.glsl
Executable file
@ -0,0 +1,62 @@
|
||||
//shader:vertex
|
||||
#version 410
|
||||
|
||||
layout(location=0) in vec3 vertPosIn;
|
||||
|
||||
uniform mat4 modelMat;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = modelMat * vec4(vertPosIn, 1);
|
||||
}
|
||||
|
||||
//shader:geometry
|
||||
#version 410
|
||||
|
||||
layout (triangles) in;
|
||||
|
||||
// Cubemap means 6 faces, and the
|
||||
// input 3 triangle vertices are drawn once per face, so 6*3=18
|
||||
layout (triangle_strip, max_vertices=18) out;
|
||||
|
||||
uniform mat4 cubemapProjViewMats[6];
|
||||
|
||||
out vec4 FragPos;
|
||||
|
||||
void main()
|
||||
{
|
||||
for(int face = 0; face < 6; ++face)
|
||||
{
|
||||
// Built in variable that specifies which cubemap face we are rendering to
|
||||
// and only works when a cubemap is attached to the active fbo
|
||||
gl_Layer = face;
|
||||
|
||||
// Transform each triangle vertex
|
||||
for(int i = 0; i < 3; ++i)
|
||||
{
|
||||
FragPos = gl_in[i].gl_Position;
|
||||
gl_Position = cubemapProjViewMats[face] * FragPos;
|
||||
EmitVertex();
|
||||
}
|
||||
EndPrimitive();
|
||||
}
|
||||
}
|
||||
|
||||
//shader:fragment
|
||||
#version 410
|
||||
|
||||
in vec4 FragPos;
|
||||
|
||||
uniform vec3 lightPos;
|
||||
uniform float farPlane;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Get distance between fragment and light source
|
||||
float lightDistance = length(FragPos.xyz - lightPos);
|
||||
|
||||
// Map to [0, 1] by dividing by far plane and use it as our depth
|
||||
lightDistance = lightDistance / farPlane;
|
||||
|
||||
gl_FragDepth = lightDistance;
|
||||
}
|
||||
Reference in New Issue
Block a user