4

我正在尝试在我的光线追踪器中实现软阴影。为此,我计划从交点向区域光源拍摄多条阴影光线。我的目标是使用球形区域光——这意味着我需要在球体上为我的光线的方向矢量生成随机点(回想一下,光线是用原点和方向指定的)。

我一直在寻找在球体上生成均匀分布的随机点的方法,但它们似乎比我正在寻找的要复杂一些。有谁知道在球体上生成这些点的任何方法?我相信我的球面光源将简单地由它的 XYZ 世界坐标、RGB 颜色值和 r 半径来定义。

谢谢,我很感激帮助!

4

2 回答 2

5

图形宝石 III,第 126 页:

void random_unit_vector(double v[3]) {    
    double theta = random_double(2.0 * PI);
    double x = random_double(2.0) - 1.0;
    double s = sqrt(1.0 - x * x);
    v[0] = x;
    v[1] = s * cos(theta);
    v[2] = s * sin(theta);
}

(这是 MathWorld 的Sphere Point Picking文章中给出的四种方法中的第二种。)

ETA:如果一个半径为r的球体以O为中心,并且u是一个随机单位向量,那么球体表面上的一个随机点由O + r u给出。

于 2012-12-08T09:19:16.640 回答
0

在Global Illumination Compendium中找到了许多用于随机分布的好的公式。第4.B部分。具有在(半)球体上生成点的公式。它是采样、集成等的一个很好的参考。

于 2012-12-08T11:30:09.867 回答