Advertisement
Guest User

asdasd

a guest
Apr 26th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. struct Triangle : public Intersectable {
  2. vec3 points[3];
  3.  
  4. Triangle() {
  5.  
  6. }
  7.  
  8. Triangle(Triangle& tri) {
  9. points[0] = tri.points[0];
  10. points[1] = tri.points[1];
  11. points[2] = tri.points[2];
  12. material = tri.getMaterial();
  13. }
  14.  
  15. Triangle(vec3 point1, vec3 point2, vec3 point3, Material* _material) {
  16. points[0] = point1;
  17. points[1] = point2;
  18. points[2] = point3;
  19. material = _material;
  20. }
  21.  
  22. void setMaterial(Material* _material) {
  23. material = _material;
  24. }
  25.  
  26. Material* getMaterial() {
  27. return material;
  28. }
  29.  
  30. bool contains(vec3 position, vec3 normal) {
  31. if (dot(cross(points[1] - points[0], position - points[0]), normal) > 0.0f)
  32. if (dot(cross(points[2] - points[1], position - points[1]), normal) > 0.0f)
  33. if (dot(cross(points[0] - points[2], position - points[2]), normal) > 0.0f)
  34. return true;
  35. return false;
  36. }
  37.  
  38. Hit intersect(const Ray& ray) {
  39. Hit hit;
  40. vec3 normal = cross(points[1] - points[0], points[2] - points[0]).normalize();
  41. vec3 dist = points[0] - ray.start;
  42. float upper = dot(dist, normal);
  43. float lower = dot(ray.dir, normal);
  44. float t = upper / lower;
  45. vec3 position = ray.start + ray.dir * t;
  46. if (!contains(position, normal)) {
  47. return hit;
  48. }
  49.  
  50. hit.t = t;
  51. hit.position = position;
  52. vec3 normalPlus = normal * vec3(1, 1, -1);
  53. hit.normal = normalPlus;
  54. hit.material = material;
  55. return hit;
  56. }
  57. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement