Opengl 延迟阴影映射GLSL
我目前正在实现一个延迟渲染管道,我一直使用阴影映射。 我已经成功地将它应用到了一条前进的管道中 我采取的步骤是:Opengl 延迟阴影映射GLSL,opengl,mapping,glsl,shadow,deferred,Opengl,Mapping,Glsl,Shadow,Deferred,我目前正在实现一个延迟渲染管道,我一直使用阴影映射。 我已经成功地将它应用到了一条前进的管道中 我采取的步骤是: 在灯光视图中获得位置 转换为灯光视图剪辑空间 获得*0.5+0.5的阴影纹理坐标 检查深度 编辑:使用新结果图像更新代码: float checkShadow(vec3 position) { // get position in light view mat4 invView = inverse(cameraView); vec4 pEyeDir = sunBias * sunP
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;
另外,我在一些相机位置得到了一个暗背景(网格保持不变),只有当我将阴影值乘以最终颜色时才会发生
根据要求,以下是位置和太阳深度纹理:
好的,我修好了。问题是因为灯光深度与gbuffer纹理的大小不同 要使用不同的纹理大小,我必须使用
coords = (coords / imageSize ) * windowSize;
好的,我修好了。问题是因为灯光深度与gbuffer纹理的大小不同 要使用不同的纹理大小,我必须使用
coords = (coords / imageSize ) * windowSize;
要显示的一些图像??什么是同步性…-)乍一看,用眼向量计算shadowTexCoord很奇怪。它应该用
translate(0.5,0.5)*scale(0.5,0.5)*lightProj*lightView*vertexos
-(modeltransforms*vertexos)计算。您看到的图像是不使用眼向量的结果。我只使用了位置纹理中的位置。是否需要对象模型矩阵?这不是gbuffer位置纹理的作用吗?vec4 ModWorldPos=inverse(gl_ModelViewMatrix)*gl_顶点-inverse(modelView)*gl_顶点;ShadowCoord=gl_TextureMatrix[7]*(gl_顶点-ModWorldPos)代码>这是我的,纹理矩阵是translate(0.5,0.5)*scale(0.5,0.5)*lightProj*lightView
你确定要使用延迟渲染吗?我不知道应该如何将每个模型矩阵传递给延迟传递,因为这只是一个着色的四元组。您可以使用不推荐使用的glsl函数,如glTextureMatrix。我使用4.2核心。一些图片来显示??什么是同步性…-)乍一看,用眼向量计算shadowTexCoord很奇怪。它应该用translate(0.5,0.5)*scale(0.5,0.5)*lightProj*lightView*vertexos
-(modeltransforms*vertexos)计算。您看到的图像是不使用眼向量的结果。我只使用了位置纹理中的位置。是否需要对象模型矩阵?这不是gbuffer位置纹理的作用吗?vec4 ModWorldPos=inverse(gl_ModelViewMatrix)*gl_顶点-inverse(modelView)*gl_顶点;ShadowCoord=gl_TextureMatrix[7]*(gl_顶点-ModWorldPos)代码>这是我的,纹理矩阵是translate(0.5,0.5)*scale(0.5,0.5)*lightProj*lightView
你确定要使用延迟渲染吗?我不知道应该如何将每个模型矩阵传递给延迟传递,因为这只是一个着色的四元组。您可以使用不推荐使用的glsl函数,如glTextureMatrix。我使用4.2内核。