---
name: "RTC_GEOMETRY_TYPE_QUAD"
section: "3"
platform: "linux"
package: "libembree-dev"
version: "4.3.3+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/RTC_GEOMETRY_TYPE_QUAD"
---

# RTC\_GEOMETRY\_TYPE\_QUAD(3)

### NAME

-

  ```
  RTC_GEOMETRY_TYPE_QUAD - quad geometry type
  ```

### SYNOPSIS

-

  ```
  #include <embree4/rtcore.h>
  RTCGeometry geometry =
    rtcNewGeometry(device, RTC_GEOMETRY_TYPE_QUAD);
  ```

### DESCRIPTION

Quad meshes are created by passing `RTC_GEOMETRY_TYPE_QUAD` to the `rtcNewGeometry` function call. The quad indices can be specified by setting an index buffer (`RTC_BUFFER_TYPE_INDEX` type) and the quad vertices by setting a vertex buffer (`RTC_BUFFER_TYPE_VERTEX` type). See `rtcSetGeometryBuffer` and `rtcSetSharedGeometryBuffer` for more details on how to set buffers. The index buffer contains an array of four 32-bit indices per quad (`RTC_FORMAT_UINT4` format), and the number of primitives is inferred from the size of that buffer. The vertex buffer contains an array of single precision `x`, `y`, `z` floating point coordinates (`RTC_FORMAT_FLOAT3` format), and the number of vertices is inferred from the size of that buffer. The vertex buffer can be at most 16 GB large.

A quad is internally handled as a pair of two triangles `v0,v1,v3` and `v2,v3,v1`, with the `u'`/`v'` coordinates of the second triangle corrected by `u = 1-u'` and `v = 1-v'` to produce a quad parametrization where `u` and `v` are in the range 0 to 1. Thus the parametrization of a quad uses the first vertex `p0` as base point, and the vector `p1 - p0` as `u`-direction, and `p3 - p0` as v-direction. Thus vertex attributes `t0,t1,t2,t3` can be bilinearly interpolated over the quadrilateral the following way:

-

  ```
  t_uv = (1-v)((1-u)*t0 + u*t1) + v*((1-u)*t3 + u*t2)
  ```

Mixed triangle/quad meshes are supported by encoding a triangle as a quad, which can be achieved by replicating the last triangle vertex (`v0,v1,v2` -\> `v0,v1,v2,v2`). This way the second triangle is a line (which can never get hit), and the parametrization of the first triangle is compatible with the standard triangle parametrization.

A quad whose vertices are laid out counter-clockwise has its geometry normal pointing upwards outside the front face, like illustrated in the following picture.

-

  ```

  ```

For multi-segment motion blur, the number of time steps must be first specified using the `rtcSetGeometryTimeStepCount` call. Then a vertex buffer for each time step can be set using different buffer slots, and all these buffers must have the same stride and size.

### EXIT STATUS

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

### SEE ALSO

\[rtcNewGeometry\]
