- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
OK , thanks for clarifying!

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page