Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- intersection intersect(const ray &ray) const
- {
- vector3 r_d = ray.direction, r_o = ray.origin;
- vector3 k = r_o - a.coords, e1 = b.coords - a.coords, e2 = c.coords - a.coords;
- vector3 d_e2 = r_d%e2, k_e1 = k%e1; // % is the cross product operator
- double det = d_e2*e1;
- if (det >= -DELTA && det <= DELTA)
- return intersection(); //no intersection
- else
- {
- bool inside = det < 0;
- double inv_det = 1 / det, u = inv_det*(d_e2*k);
- if (u < 0 || u > 1)
- return intersection();
- else
- {
- double v = inv_det*(k_e1*r_d);
- if (v < 0 || v>1 || u + v > 1)
- return intersection();
- else
- {
- //there is an intersection, compute t
- double t = inv_det*(k_e1*e2);
- vector3 point = r_o + t*r_d;
- vector3 temp_normal = ((b.coords - point) % (c.coords - point)).normalize();
- vector3 normal = inside ? -temp_normal : temp_normal;
- return intersection(point, normal, interpolateData(a, b, c, u, v, 1 - u - v).mat, true, inside);
- }
- }
- }
- return intersection();
- }
- color col = w*a.col + u*b.col + v*c.col;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement