diff --git a/Skeleton.cpp b/Skeleton.cpp index dd0e3a598165f6361e31589339262f6031e716f8..86e83e0da89aa0a0609cbda6ae3f940344ecd91a 100644 --- a/Skeleton.cpp +++ b/Skeleton.cpp @@ -144,6 +144,10 @@ struct Pentagon : public Intersectable { Material* material; Material* portal = new PortalMaterial(); + static float distance(const vec3& e1, const vec3& e2, const vec3& p){ + return length(cross(p-e1, p-e2))/length(e2-e1); + } + Pentagon(const vec3& _r1, const vec3& _r2, const vec3& _r3, const vec3& _r4, const vec3& _r5, Material* _material) { r1 = _r1; r2 = _r2; @@ -177,11 +181,11 @@ struct Pentagon : public Intersectable { hit.position = p; if ( - dot(cross(r2-r1, p-r1), n) > 0.1 && - dot(cross(r3-r2, p-r2), n) > 0.1 && - dot(cross(r4-r3, p-r3), n) > 0.1 && - dot(cross(r5-r4, p-r4), n) > 0.1 && - dot(cross(r1-r5, p-r5), n) > 0.1 + distance(r1, r2, p) > 0.1 && + distance(r2, r3, p) > 0.1 && + distance(r3, r4, p) > 0.1 && + distance(r4, r5, p) > 0.1 && + distance(r5, r1, p) > 0.1 ) { hit.material = portal; }