在光线追踪中实现反射的问题
Problem implementing reflections in ray tracing
我已经实现了一个简单的光线追踪器,现在我正在尝试实现反射,但对象表现得像透明的。
这是我获取反射光线的代码。
ray* reflected = new ray();
reflected->direction = rayIn.direction - (2 * glm::dot(rayIn.direction, normal)) * normal;
reflected->origin = int_point + epsilon * normal;
outColor += ((int_object->reflectivity)*intersectray(*reflected, depth - 1));
这是带代码的图片:
无代码:
如果需要更多代码,我会编辑 post。
Edit :问题似乎出在我遍历场景中的对象时。我将对象插入为
scene->add(sphere1);
scene->add(sphere2);
但是当我将其更改为:
scene->add(sphere2);
scene->add(sphere1);
输出正确。
球体 1 比球体 2 更靠近相机,并且它们不重叠。
问题出在这部分代码
for (objects in scene){
double intersection = (*objIterator)->intersect(rayIn,normal);
if (intersection < minDistance && intersection > epsilon )
{
minDistance = intersection;
int_object = *objIterator;
int_point = rayIn.origin + intersection * rayIn.direction + (epsilon * normal);
}}
此处法线稍后用于其他计算,但第一行更新当前对象交点的法线(即使它不接近)。所以我添加了一个向量来存储交点对象的法线,并在以后使用它。
我已经实现了一个简单的光线追踪器,现在我正在尝试实现反射,但对象表现得像透明的。 这是我获取反射光线的代码。
ray* reflected = new ray();
reflected->direction = rayIn.direction - (2 * glm::dot(rayIn.direction, normal)) * normal;
reflected->origin = int_point + epsilon * normal;
outColor += ((int_object->reflectivity)*intersectray(*reflected, depth - 1));
这是带代码的图片:
无代码:
如果需要更多代码,我会编辑 post。
Edit :问题似乎出在我遍历场景中的对象时。我将对象插入为
scene->add(sphere1);
scene->add(sphere2);
但是当我将其更改为:
scene->add(sphere2);
scene->add(sphere1);
输出正确。 球体 1 比球体 2 更靠近相机,并且它们不重叠。
问题出在这部分代码
for (objects in scene){
double intersection = (*objIterator)->intersect(rayIn,normal);
if (intersection < minDistance && intersection > epsilon )
{
minDistance = intersection;
int_object = *objIterator;
int_point = rayIn.origin + intersection * rayIn.direction + (epsilon * normal);
}}
此处法线稍后用于其他计算,但第一行更新当前对象交点的法线(即使它不接近)。所以我添加了一个向量来存储交点对象的法线,并在以后使用它。