Я пытаюсь сделать теневую кубическую карту за один проход, используя многоуровневую визуализацию.
Я старался быть максимально тщательным:
Короче говоря, первый слой (т.е. в данном случае 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
Рендеринг карты теней: https://gist.github.com/xtrium-lnx/387b97c077525be60bb4
Задача ещё не решена.