Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}