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