Трассировка лучей — отражение

Сейчас я работаю над трассировщиком лучей, отражающей частью. У меня все работает правильно, включая создание сферы с тенью. Теперь я реализую часть отражения. Однако я не мог получить это. Мой алгоритм ниже:

traceRay(Ray ray, int counter){
// look through the intersection between ray and list of objects
// find the final index aka the winning index, (if final index == -1, return background color)
// then calculate the intersection point

// perform reflection calculation here
if(counter > 1  && winning object's reflectivity > 1 ){
//get the intersection normal, vector N
//Calculate the reflection ray, R
// let I is the inverse of direction of incoming ray
//Calculate R = 2aN - I (a = N dotProduct I)

// the reflection ray is origin at the point of intersection between incoming ray and sphere with the R direction
Ray reflecRay (intersection_poisition, R);

Color reflection = traceRay(reflecRay, counter + 1);
// multiply by fraction ks
reflection = reflection * ks;
}// the color of the sphere calculated using phong formula in shadeRay function
Color prefinal = shadeRay();// return the total color of prefinal + reflection

}

Я пытаюсь получить отражение, но не могу его получить, может кто-нибудь сообщить мне, если мой алгоритм для функции traceRay правильный?

1

Решение

При отражении луча необходимо перемещать его по нормали к отражателю, чтобы избежать пересечения с самим отражателем. Например:

 const double ERR = 1e-12;
Ray reflecRay (intersection_poisition + normal*ERR, R);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]