Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. intersection intersect(const ray &ray) const
  2. {
  3. vector3 r_d = ray.direction, r_o = ray.origin;
  4. vector3 k = r_o - a.coords, e1 = b.coords - a.coords, e2 = c.coords - a.coords;
  5. vector3 d_e2 = r_d%e2, k_e1 = k%e1; // % is the cross product operator
  6. double det = d_e2*e1;
  7. if (det >= -DELTA && det <= DELTA)
  8. return intersection(); //no intersection
  9. else
  10. {
  11. bool inside = det < 0;
  12. double inv_det = 1 / det, u = inv_det*(d_e2*k);
  13. if (u < 0 || u > 1)
  14. return intersection();
  15. else
  16. {
  17. double v = inv_det*(k_e1*r_d);
  18. if (v < 0 || v>1 || u + v > 1)
  19. return intersection();
  20. else
  21. {
  22. //there is an intersection, compute t
  23. double t = inv_det*(k_e1*e2);
  24. vector3 point = r_o + t*r_d;
  25. vector3 temp_normal = ((b.coords - point) % (c.coords - point)).normalize();
  26. vector3 normal = inside ? -temp_normal : temp_normal;
  27. return intersection(point, normal, interpolateData(a, b, c, u, v, 1 - u - v).mat, true, inside);
  28. }
  29. }
  30. }
  31. return intersection();
  32. }
  33.  
  34. color col = w*a.col + u*b.col + v*c.col;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement