我正在尝试使用分层渲染一次渲染阴影立方体贴图。
我试图尽可能彻底:
长话短说,第一层(即本例中的X +)会被渲染,但其他任何一层都没有,无论是深度还是颜色附件。
关于分层渲染的文档看起来很稀疏,即使红皮书最多只花了半页...无论如何:
代码:
着色器:
顶点:
#version 440 core
layout(location = 0) in vec3 attrPosition;
void main()
{
gl_Position = vec4(attrPosition, 1.0);
}
几何:
#version 440 core
layout(triangles, invocations = 6) in;
layout(triangle_strip, max_vertices = 18) out;
uniform mat4 dkModelMatrix;
uniform mat4 dkViewMatrices[6];
uniform mat4 dkProjectionMatrix;
void main()
{
gl_Layer = gl_InvocationID;
for(int i = 0; i < 3; ++i)
{
gl_Layer = gl_InvocationID;
gl_Position = dkProjectionMatrix * dkViewMatrices[gl_InvocationID] * dkModelMatrix * gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
}
片段:
#version 440 core
layout(location = 0) out vec4 dkFragCoord;
void main()
{
dkFragCoord = vec4( vec3(float(gl_Layer) * 0.1 + 0.5) , 1.0);
}
C ++(主要是使用我的引擎类,它实际上是最小的,并且已经过测试,对于FBO,使用2D(点)阴影贴图):
与Shadowmap相关的变量创建:https://gist.github.com/xtrium-lnx/77d8989b3c2370607cfc
Shadowmap渲染:https://gist.github.com/xtrium-lnx/387b97c077525be60bb4