渲染拼字图映射到屏幕



我有一个用于方向灯的工作影子映射实现,我在其中使用正式投影构建投影矩阵。我的问题是,如何可视化阴影图?我有以下用于点灯的着色器(使用透视图投影),但是当我尝试将其应用于用拼字图制作的阴影映射时,我得到的就是完全黑屏(即使阴影映射有效当渲染场景本身时)

#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设置为GL_COMPARE_R_TO_TEXTURE。这对于用深度纹理实际执行阴影映射非常有用,但是它使尝试使用sampler2D未定义进行采样。由于您希望将实际的深度值存储在深度纹理中,而不是通过/失败深度测试的结果,因此您需要首先将GL_TEXTURE_COMPARE_MODE设置为CC_4。

当您想在可视化深度缓冲区和绘图阴影之间切换时,以每种文本为基础设置此状态是非常不便的。我建议使用将GL_TEXTURE_COMPARE_MODE设置为GL_COMPARE_R_TO_TEXTURE(与sampler2DShadow兼容)的Sampler对象,该对象可用于阴影映射,并使用GL_NONE(与sampler2D兼容)的另一个Sampler对象可视化深度缓冲区。这样,您要做的就是根据纹理图像单元5绑定的采样对象,具体取决于着色器实际使用深度纹理。

相关内容

  • 没有找到相关文章

最新更新