在光线追踪中实现反射的问题

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);
    }}

此处法线稍后用于其他计算,但第一行更新当前对象交点的法线(即使它不接近)。所以我添加了一个向量来存储交点对象的法线,并在以后使用它。