我目前正在实现一个延迟渲染管道,并且我坚持使用阴影贴图。 我已经成功地将它实施到了一个前进的管道中。
我所做的步骤是:
修改:使用新结果图片更新了代码:
float checkShadow(vec3 position) {
// get position in light view
mat4 invView = inverse(cameraView);
vec4 pEyeDir = sunBias * sunProjection * sunView * invView * vec4(position, 1.0);
// light view clip space
pEyeDir = pEyeDir / pEyeDir.w;
// get uv coordinates
vec2 sTexCoords = pEyeDir.xy * 0.5 + 0.5;
float bias = 0.0001;
float depth = texture(sunDepthTex, sTexCoords).r - bias;
float shadow = 1.0f;
if(pEyeDir.z * 0.5 + 0.5 > depth)
{
shadow = 0.3f;
}
return shadow;
}
这里有一些对上面代码很重要的变量:
vec3 position = texture(positionTex, uv).rgb;
此外,我在一些相机位置得到一个深色背景(网格保持不变),只有当我将阴影值乘以最终颜色时才会发生。
根据要求,这里是位置和太阳深度纹理:
答案 0 :(得分:4)
好的我修好了。问题是因为光的深度与gbuffer纹理的大小不同。
要使用不同的纹理大小,我必须使用
对它们进行标准化coords = (coords / imageSize ) * windowSize;