(!isShadow) //如果不是阴影,继续计算 { //漫反射 Ray reflectRay(closest_hp.position, reflectDir); reflectRay._origin = closest_hp.position + 1e-2reflectDir.normalized(); if (mtl._reflective) { //镜面光,调用递归 //请以下部分,填入正确的递归调用 //请以上部分,填入正确的递归调用 }漫反射递归函数
时间: 2023-12-02 10:03:10 浏览: 129
对于漫反射的递归函数,我们可以采用以下方式:
1. 随机生成一个反射光线的方向,可以使用半球随机采样的方法来实现。
2. 射出反射光线,计算与场景中的物体相交,获取最近的交点和交点处的材质属性。
3. 如果反射次数未达到上限,且材质属性中存在漫反射属性,那么就继续递归调用漫反射函数,同时将反射次数加一。
4. 如果反射次数已经达到上限或者材质属性中不存在漫反射属性,那么就返回当前反射光线的颜色值。
下面是漫反射递归函数的代码实现:
```
Color diffuseRecursive(Ray& ray, int depth) {
if (depth > maxDepth) {
return Color::Black();
}
HitPoint closest_hp;
if (!scene.intersect(ray, closest_hp)) {
return scene.getBackgroundColor(ray.direction);
}
Material& mtl = closest_hp.material;
Vector3 reflectDir = sampleHemisphere(closest_hp.normal);
Ray reflectRay(closest_hp.position, reflectDir);
reflectRay._origin = closest_hp.position + 1e-2 * reflectDir.normalized();
if (mtl._diffuse) {
Color reflectColor = diffuseRecursive(reflectRay, depth + 1);
return mtl._kDiffuse * reflectColor;
} else {
return Color::Black();
}
}
```
阅读全文