bool Face::intersect(const Ray &r, Hit &h, bool intersect_backfacing, bool* backfacing_hit) { // intersect with each of the subtriangles Vertex *a = (*this)[0]; Vertex *b = (*this)[1]; Vertex *c = (*this)[2]; Vertex *d = (*this)[3]; return triangle_intersect(r,h,a,b,c,intersect_backfacing, backfacing_hit) || triangle_intersect(r,h,a,c,d,intersect_backfacing, backfacing_hit); }
bool Model::intersect(const Ray& r, Intersection* info) { unsigned int N = mesh->num_triangles(); const MeshVertex* verts = mesh->get_vertices(); Intersection tmpinfo; info->t = DBL_MAX; info->idx = -1; for (unsigned int i = 0; i < N; i++) { const unsigned int* vIdxs = mesh->triangles[i].vertices; if (triangle_intersect(r, verts[vIdxs[0]].position, verts[vIdxs[1]].position, verts[vIdxs[2]].position, &tmpinfo)) { if (tmpinfo.t < info->t) { *info = tmpinfo; info->idx = i; } } } return info->idx != -1; }