私はレイ トレーシングに関するプロジェクトを行っています。現在、基本的なレンダリングを行うことができます。
下の画像には次のものがあります。
ミラー反射、屈折、テクスチャ マッピング、およびシャドウ。
私は光沢のある反射をしようとしていますが、これは私が得ているものです。この光沢のある反射画像に問題があるかどうか誰か教えてもらえますか?
比較すると、下の画像はミラー反射からのものです
これは、基本的に、一次光線がオブジェクトと交差すると、光沢のある反射に関する私のコードです。この交点から、さらに 80 本の光線をランダムに発射し、この 80 本の光線の色の平均をとります。このコードで私が抱えている問題は、x と y の大きさです。光沢のある反射光線がランダムになりすぎないように、これらを何らかの値 (この場合は 16) で割る必要があります。このロジックに何か問題がありますか?
Colour c(0, 0, 0);
for (int i = 0; i < 80; i++) {
Ray3D testRay;
double a = rand() / (double) RAND_MAX;
double b = rand() / (double) RAND_MAX;
double theta = acos(pow((1 - a), ray.intersection.mat->reflectivity));
double phi = 2 * M_PI * b;
double x = sin(phi) * cos(theta)/16;
double y = sin(phi) * sin(theta)/16;
double z = cos(phi);
Vector3D u = reflect.dir.cross(ray.intersection.normal);
Vector3D v = reflect.dir.cross(u);
testRay.dir = x * u + y * v + reflect.dir;
testRay.dir.normalize();
testRay.origin = reflect.origin;
testRay.nbounces = reflect.nbounces;
c = c + (ray.intersection.mat->reflectivity)*shadeRay(testRay);
}
col = col + c / 80;