Community
cancel
Showing results for
Did you mean:
New Contributor I
114 Views

## user geometry intersection routine

Following from the "user_geometry" example. I am mixing analytical spheres and triangulated geometry.

The sphere intersection function has a signature of void sphereIntersectFunc(void* spheres_i, RTCRay& ray, size_t item);

My algorithm simply sets up the rays, loops over them and calls

rtcIntersect(rtcscene, rtc_ray);

In the "user defined intersection" function for the sphere(s). I notice in the passed RTCRay structure  two things that I find a bit confusing.

- the tnear and tfar values are not 0.0 and inf as I would expect. They are often a "segment" of the ray. I can understand this may be an optimization based on a geometry space subdivision. It appears I should restrict any intersection to only be within the passed tnear and tfar.

- the RTCRay structure sometimes also contains a geomID  == the triangulated geometry ID. That is, the ray seems to already have intersected some part of the triangulated geometry before being passed to the "sphere" intersection routine. I really don't understand this.  I would expect that once a ray has intersected a geometry, it would return immediately from rtcIntersect.

Tags (2)
1 Solution
Moderator
114 Views

1) In the user geometry callback the tnear value will always be identical to the tnear initially passed to the ray, but the tfar value will shrink when hits get found. Reason is that rtcIntersect is interested in the closest hit only, and the current closest distance is recorded as ray.tfar.

2) rtcIntersect returns the closest intersection, thus even if it already found an intersection with a triangle, intersections with your sphere might still be closer than this current closest hit. This is why you see triangle hit data inside the ray. However, you should never read that hit data, your callback should just update the hit data (and tfar) when a closer hit is found.

2 Replies
Moderator
115 Views

1) In the user geometry callback the tnear value will always be identical to the tnear initially passed to the ray, but the tfar value will shrink when hits get found. Reason is that rtcIntersect is interested in the closest hit only, and the current closest distance is recorded as ray.tfar.

2) rtcIntersect returns the closest intersection, thus even if it already found an intersection with a triangle, intersections with your sphere might still be closer than this current closest hit. This is why you see triangle hit data inside the ray. However, you should never read that hit data, your callback should just update the hit data (and tfar) when a closer hit is found.

New Contributor I
114 Views

OK , thanks for clarifying!