【发布时间】:2014-01-23 20:19:07
【问题描述】:
我有一个适用于定向光的阴影贴图实现,我使用正交投影构造投影矩阵。我的问题是,如何可视化阴影贴图?我有以下用于聚光灯的着色器(它使用透视投影),但是当我尝试将其应用于使用正交投影制作的阴影贴图时,我得到的只是一个完全黑色的屏幕(即使阴影贴图有效渲染场景本身时)
#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对深度纹理进行采样是未定义的(并且可能会产生所有黑色纹素)。如果您使用采样器对象,您可以使用一个不同的采样器对象,为实际的阴影处理启用比较,当您想要可视化深度缓冲区时,可以使用一个禁用比较的采样器对象。否则,此状态是每个纹理对象。 -
是的,成功了,添加它作为答案
标签: opengl shadow shadow-mapping