Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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
Javascript 如何消除阴影贴图的虚假瑕疵?_Javascript_Webgl_Shader_Shadow - Fatal编程技术网

Javascript 如何消除阴影贴图的虚假瑕疵?

Javascript 如何消除阴影贴图的虚假瑕疵?,javascript,webgl,shader,shadow,Javascript,Webgl,Shader,Shadow,通过阴影贴图创建阴影时出现虚假瑕疵 我不明白为什么会画出许多阴影,它们是从哪里来的? 示例:我想你指的是暗疮。渲染小曲面时,计算曲面点与灯光的距离,并将其与从阴影贴图读取的距离进行比较。现在,理想情况下,如果曲面被照亮,这些值应该相等,但是由于浮动精度误差,可能会有轻微的不精确,导致阴影不应该存在 解决方案是应用偏移,因此在从阴影贴图读取的距离上添加一个小数字,如0.001。实际偏移量应取决于世界的比例。看起来您的阴影贴图只覆盖了场景的一小部分,并且正在平铺(重复)以覆盖其余部分。将阴影贴图的环

通过阴影贴图创建阴影时出现虚假瑕疵

我不明白为什么会画出许多阴影,它们是从哪里来的?
示例:

我想你指的是暗疮。渲染小曲面时,计算曲面点与灯光的距离,并将其与从阴影贴图读取的距离进行比较。现在,理想情况下,如果曲面被照亮,这些值应该相等,但是由于浮动精度误差,可能会有轻微的不精确,导致阴影不应该存在


解决方案是应用偏移,因此在从阴影贴图读取的距离上添加一个小数字,如0.001。实际偏移量应取决于世界的比例。

看起来您的阴影贴图只覆盖了场景的一小部分,并且正在平铺(重复)以覆盖其余部分。将阴影贴图的环绕模式更改为
GL\u CLAMP\u到\u BORDER

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
并将边框颜色设置为
1.0f
0.0f
,具体取决于您希望阴影贴图之外的东西亮起还是不亮起:

GLfloat borderColor[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);

确保阴影摄影机的远平面足够高

您有多少光源?在场景1光源上是否有超反射曲面?否,反射不会影响阴影。本课程以webglacademy.com课程为例№ 28对不起,我只是在抛砖引玉,因为没有其他人在抛砖引玉;idk opengl。在我的示例中,bias=0.0022这不是,这个问题是一个重复的深度贴图与一个错误的阴影投影矩阵相结合,只覆盖场景的一个子区域。它不支持。GLаu夹钳аu至аu边框不支持@Аааааааааfn
ctx。夹钳аu至аu边缘