Search code examples
c++graphicsraytracing

Problem implementing reflections in ray tracing


I've implemented a simple ray tracer and now I'm trying to implement reflections but objects are behaving as transparent. Here is my code for getting the reflected ray.

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

Here are images With code:

img

Without code:

img

I'll edit the post if more code is needed.

Edit : It seems the problem is when I'm iterating through the objects in the scene. I insert the objects as

    scene->add(sphere1);
    scene->add(sphere2);

But when I change this to :

    scene->add(sphere2);
    scene->add(sphere1);

the output is correct. Sphere 1 is at closer to camera than sphere 2 and they are not overlapping.


Solution

  • Problem was this part of code

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

    Here normal is used later for other calculations but the first line update normal for current object intersection (Even if its not close). So I added a vector to store normal of the intersection object and used it later.