我正在尝试在我的光线跟踪器中实现柔和阴影。为此,我计划从交叉点向区域光源拍摄多条阴影光线。我的目标是使用球面区域光 - 这意味着我需要在球体上为我的光线的方向矢量生成随机点(回想一下,光线是用原点和方向指定的)。
我四处寻找在球体上生成随机点均匀分布的方法,但它们看起来比我正在寻找的要复杂一些。有谁知道在球体上生成这些点的任何方法?我相信我的球面光源将简单地由其XYZ世界坐标,RGB颜色值和r半径定义。
谢谢,我感谢您的帮助!
答案 0 :(得分:5)
Graphics Gems 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 给出。
答案 1 :(得分:0)
在Global Illumination Compendium中可以找到许多用于随机分布的好公式。部分 4.B。具有用于在(半)球上生成点的公式。它是采样,集成等的绝佳参考。