void FastInstanceIntersectorK<K>::occluded(vint<K>* valid, const Instance* instance, RayK<K>& ray, size_t item) { typedef Vec3<vfloat<K>> Vec3vfK; typedef AffineSpaceT<LinearSpace3<Vec3vfK>> AffineSpace3vfK; const Vec3vfK ray_org = ray.org; const Vec3vfK ray_dir = ray.dir; const vint<K> ray_geomID = ray.geomID; const AffineSpace3vfK world2local(instance->world2local); ray.org = xfmPoint (world2local,ray_org); ray.dir = xfmVector(world2local,ray_dir); ray.instID = instance->id; occludedObject(valid,instance->object,ray); ray.org = ray_org; ray.dir = ray_dir; }
__noinline void FastInstanceIntersectorN::occludedN(vint<N>* validi, const Instance* instance, const RTCIntersectContext* user_context, RayK<N>& ray, size_t item) { AffineSpace3vf<N> world2local; const vbool<N> valid = *validi == vint<N>(-1); if (likely(instance->numTimeSteps == 1)) world2local = instance->getWorld2Local(); else world2local = instance->getWorld2Local<N>(valid,ray.time); const Vec3vf<N> ray_org = ray.org; const Vec3vf<N> ray_dir = ray.dir; ray.org = xfmPoint (world2local,ray_org); ray.dir = xfmVector(world2local,ray_dir); ray.instID = instance->geomID; IntersectContext context(instance->object,user_context); occludedObject((vint<N>*)validi,instance->object,&context,ray); ray.org = ray_org; ray.dir = ray_dir; }
void FastInstanceIntersectorK<K>::occluded(vint<K>* valid, const Instance* instance, RayK<K>& ray, size_t item) { typedef Vec3<vfloat<K>> Vec3vfK; typedef AffineSpaceT<LinearSpace3<Vec3vfK>> AffineSpace3vfK; AffineSpace3vfK world2local; if (likely(instance->numTimeSteps == 1)) { world2local = instance->world2local[0]; } else { vfloat<K> t1 = ray.time, t0 = vfloat<K>(1.0f)-t1; world2local = rcp(t0*AffineSpace3vfK(instance->local2world[0]) + t1*AffineSpace3vfK(instance->local2world[1])); } const Vec3vfK ray_org = ray.org; const Vec3vfK ray_dir = ray.dir; ray.org = xfmPoint (world2local,ray_org); ray.dir = xfmVector(world2local,ray_dir); ray.instID = instance->id; occludedObject(valid,instance->object,ray); ray.org = ray_org; ray.dir = ray_dir; }