我有一个工作阴影贴图实现方向灯,其中我使用正投影构建投影矩阵。我的问题是,我如何可视化阴影贴图?我使用了以下着色器(我使用透视投影),但是当我尝试将其应用于使用正投影制作的阴影贴图时,我所得到的是完全黑屏(即使阴影贴图工作正常renderering场景本身)呈现阴影贴图到屏幕?
#version 430
layout(std140) uniform;
uniform UnifDepth
{
mat4 mWVPMatrix;
vec2 mScreenSize;
float mZNear;
float mZFar;
} UnifDepthPass;
layout (binding = 5) uniform sampler2D unifDepthTexture;
out vec4 fragColor;
void main()
{
vec2 texcoord = gl_FragCoord.xy/UnifDepthPass.mScreenSize;
float depthValue = texture(unifDepthTexture, texcoord).x;
depthValue = (2.0 * UnifDepthPass.mZNear)/(UnifDepthPass.mZFar + UnifDepthPass.mZNear - depthValue * (UnifDepthPass.mZFar - UnifDepthPass.mZNear));
fragColor = vec4(depthValue, depthValue, depthValue, 1.0);
}
您可能忘记禁用'GL_TEXTURE_COMPARE_MODE',这意味着使用'sampler2D'对深度纹理进行采样未定义(并且可能会产生全部黑色纹理)。如果您使用采样器对象,则可以为实际阴影处理使用启用比较的不同采样器对象,并且在想要可视化深度缓冲区时禁用比较。否则,此状态是每个纹理对象。 –
是的,它的工作原理,添加它作为一个答案 – KaiserJohaan