4

レイトレーサーにソフト シャドウを実装しようとしています。そのために、交点から面光源に向かって複数のシャドウ レイを発射する予定です。球面エリア ライトを使用することを目指しています。これは、レイの方向ベクトルに対して球上にランダムなポイントを生成する必要があることを意味します (レイは原点と方向で指定されていることを思い出してください)。

球上のランダムな点の均一な分布を生成する方法を探しましたが、探しているものよりも少し複雑に思えます。球上にこれらの点を生成する方法を知っている人はいますか? 私の球面光源は、その XYZ ワールド座標、RGB カラー値、および r 半径によって単純に定義されると思います。

ありがとう、私は助けに感謝します!

4

2 に答える 2

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記事で紹介されている 4 つの方法の 2 番目です。)

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 に答える