curs0r
curs0r

Reputation: 21

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.

Upvotes: 0

Views: 670

Answers (1)

curs0r
curs0r

Reputation: 21

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.

Upvotes: 0

Related Questions