我正在阅读逼真的光线追踪这本书,我无法理解盒子过滤器代码:
void boxFilter(Vector2* samples, int num_samples)
{
for (int i = 0; i < num_samples; i++)
{
samples[i].x = samples[i].x - 0.5f;
samples[i].y = samples[i].y - 0.5f;
}
}
在我看来,“filter”是一个权重数组,而sampling是生成位置以产生光线,filter是结合结果(所以filter方法应该返回float[]
,但上面的函数返回Vector2[]
)。代码是什么意思?
答案 0 :(得分:0)
盒子过滤的基本思想是无论在图像平面上的哪个位置&#34;像素&#34;样本着陆后,盒式滤镜会使渲染器就像它落在该像素的正中心一样。
我还没看过那本特定的书,但我猜测在那段代码片段中,sample[].x
和.y
是int
(或之前的{{ 1}} ed)返回光线在像素坐标中击中图像平面的位置。因此,从每个中减去floor()
会将样本放在每个像素的几何中心,因此,它是一个盒式过滤器。
有关框过滤(和其他过滤器)的深入讨论,请参阅基于物理的渲染,第7章,&#34;采样和重建&#34;。