Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测阴影贴图纹理GLSL的边缘_Glsl_Fragment Shader_Edge Detection_Texture2d_Shadow Mapping - Fatal编程技术网

如何检测阴影贴图纹理GLSL的边缘

如何检测阴影贴图纹理GLSL的边缘,glsl,fragment-shader,edge-detection,texture2d,shadow-mapping,Glsl,Fragment Shader,Edge Detection,Texture2d,Shadow Mapping,我想知道如何在片段着色器中检测阴影贴图纹理的边缘 我在youtube上看了以下教程: 但在那个家伙的情况下,解决方案取决于摄像机的位置。我宁愿不依赖摄像机的位置 问题是: 如果对象移出阴影贴图渲染过程采样的区域,则对象的阴影将被剪裁(正常行为)。 因此,如果我知道当前片段的位置靠近阴影贴图边界,我可以添加某种淡出机制 干杯并提前表示感谢 好吧,我真的不敢相信,但我自己解决了这个问题,这是一件非常简单的事情: 在“顶点着色器”(vertex shader)中,我从灯光的视点计算顶点位置,然后计算它

我想知道如何在片段着色器中检测阴影贴图纹理的边缘

我在youtube上看了以下教程: 但在那个家伙的情况下,解决方案取决于摄像机的位置。我宁愿不依赖摄像机的位置

问题是: 如果对象移出阴影贴图渲染过程采样的区域,则对象的阴影将被剪裁(正常行为)。 因此,如果我知道当前片段的位置靠近阴影贴图边界,我可以添加某种淡出机制


干杯并提前表示感谢

好吧,我真的不敢相信,但我自己解决了这个问题,这是一件非常简单的事情:

在“顶点着色器”(vertex shader)中,我从灯光的视点计算顶点位置,然后计算它与纹理边的距离:

vShadowCoord = vec4(uShadowModelViewProjectionMatrix * vec4(vertexPos.xyz, 1.0));
float borderFactorX = abs(0.5 - vShadowCoord.x);
float borderFactorY = abs(0.5 - vShadowCoord.y);
vShadowBorderFactor = max(borderFactorX, borderFactorY) * 2;
现在,vShadowBorderFactor存储一个介于0和1之间的值

我将vShadowBorderFactor传递给片段着色器,然后计算变暗量(通过投射阴影):

然后我将变暗应用于场景的整体颜色向量。瞧

darkening = textureProj(uShadowTexture, vec4(vShadowCoord.xy, vShadowCoord.z - bias, 1.0)) + (vShadowBorderFactor * vShadowBorderFactor);