Manpages - RTC_GEOMETRY_TYPE_USER.3embree3

Table of Contents

NAME

  RTC_GEOMETRY_TYPE_USER - user geometry type

SYNOPSIS

  #include <embree3/rtcore.h>

  RTCGeometry geometry =
    rtcNewGeometry(device, RTC_GEOMETRY_TYPE_USER);

DESCRIPTION

User-defined geometries contain a number of user-defined primitives, just like triangle meshes contain multiple triangles. The shape of the user-defined primitives is specified through registered callback functions, which enable extending Embree with arbitrary types of primitives.

User-defined geometries are created by passing RTC_GEOMETRY_TYPE_USER to the rtcNewGeometry function call. One has to set the number of primitives (see rtcSetGeometryUserPrimitiveCount), a user data pointer (see rtcSetGeometryUserData), a bounding function closure (see rtcSetGeometryBoundsFunction), as well as user-defined intersect (see rtcSetGeometryIntersectFunction) and occluded (see rtcSetGeometryOccludedFunction) callback functions. The bounding function is used to query the bounds of all time steps of a user primitive, while the intersect and occluded callback functions are called to intersect the primitive with a ray. The user data pointer is passed to each callback invocation and can be used to point to the application’s representation of the user geometry.

The creation of a user geometry typically looks the following:

  RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_USER);
  rtcSetGeometryUserPrimitiveCount(geometry, numPrimitives);
  rtcSetGeometryUserData(geometry, userGeometryRepresentation);
  rtcSetGeometryBoundsFunction(geometry, boundsFunction);
  rtcSetGeometryIntersectFunction(geometry, intersectFunction);
  rtcSetGeometryOccludedFunction(geometry, occludedFunction);

Please have a look at the rtcSetGeometryBoundsFunction, rtcSetGeometryIntersectFunction, and rtcSetGeometryOccludedFunction functions on the implementation of the callback functions.

Primitives of a user geometry are ignored during rendering when their bounds are empty, thus bounds have lower>upper in at least one dimension.

See tutorial [User Geometry] for an example of how to use the user-defined geometries.

EXIT STATUS

On failure NULL is returned and an error code is set that can be queried using rtcGetDeviceError.

SEE ALSO

[rtcNewGeometry], [rtcSetGeometryUserPrimitiveCount], [rtcSetGeometryUserData], [rtcSetGeometryBoundsFunction], [rtcSetGeometryIntersectFunction], [rtcSetGeometryOccludedFunction]

Author: dt

Created: 2022-02-20 Sun 18:31