通过阴影贴图创建阴影时出现虚假伪影。
我无法理解为什么要绘制许多阴影,以及它们来自何处? 例如:example
答案 0 :(得分:2)
看起来您的阴影贴图仅覆盖场景的一小部分,并且正在平铺(重复)以覆盖其余部分。将阴影贴图的包装模式更改为GL_CLAMP_TO_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 :(得分:0)
我认为你的意思是阴影痤疮。渲染表面时,计算表面点与光线的距离,并将其与从阴影贴图读取的距离进行比较。理想情况下,如果表面被点亮,这些应该相等,但由于浮动精度误差,可能会有轻微的不准确性,导致阴影不应该存在。
解决方案是应用偏移量,因此在从阴影贴图读取的距离上添加一个小数字(如0.001)。实际的偏差应该取决于世界的规模。
答案 2 :(得分:0)
确保阴影摄像机的飞机足够高!