我正在尝试在我的光线追踪器中实现软阴影。为此,我计划从交点向区域光源拍摄多条阴影光线。我的目标是使用球形区域光——这意味着我需要在球体上为我的光线的方向矢量生成随机点(回想一下,光线是用原点和方向指定的)。
我一直在寻找在球体上生成均匀分布的随机点的方法,但它们似乎比我正在寻找的要复杂一些。有谁知道在球体上生成这些点的任何方法?我相信我的球面光源将简单地由它的 XYZ 世界坐标、RGB 颜色值和 r 半径来定义。
谢谢,我很感激帮助!
我正在尝试在我的光线追踪器中实现软阴影。为此,我计划从交点向区域光源拍摄多条阴影光线。我的目标是使用球形区域光——这意味着我需要在球体上为我的光线的方向矢量生成随机点(回想一下,光线是用原点和方向指定的)。
我一直在寻找在球体上生成均匀分布的随机点的方法,但它们似乎比我正在寻找的要复杂一些。有谁知道在球体上生成这些点的任何方法?我相信我的球面光源将简单地由它的 XYZ 世界坐标、RGB 颜色值和 r 半径来定义。
谢谢,我很感激帮助!
图形宝石 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给出。
在Global Illumination Compendium中找到了许多用于随机分布的好的公式。第4.B部分。具有在(半)球体上生成点的公式。它是采样、集成等的一个很好的参考。