レイトレーサーにソフトシャドウを実装しようとしています。そのために、交点からエリア光源に向かって複数のシャドウレイを照射する予定です。球形のエリアライトを使用することを目指しています。これは、光線の方向ベクトルに対して球上にランダムな点を生成する必要があることを意味します(光線は原点と方向で指定されることを思い出してください)。
球上にランダムな点の均一な分布を生成する方法を探しましたが、それらは私が探しているものよりも少し複雑に見えます。球上にこれらの点を生成する方法を知っている人はいますか?私の球体領域の光源は、XYZワールド座標、RGBカラー値、およびr半径によって単純に定義されると思います。
私はこのコードをGraphicsGemsIII、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);
}
これは問題なく、私はこれを理解していますが、私の球体光源は、3DXYZ座標と半径で指定された空間のあるポイントにあります。数式が単位球で機能することは理解していますが、数式が球の位置をどのように説明しているかはわかりません。
ありがとう、そして私は助けに感謝します!