> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC

> Descreve um conjunto de triângulos usado como geometria de raytracing. A geometria apontada por esta struct está sempre no formato de lista de triângulos, indexada ou não indexada.

Descreve um conjunto de triângulos usado como geometria de raytracing. A geometria apontada por esta struct está sempre no formato de lista de triângulos, indexada ou não indexada. Faixas de triângulos (triangle strips) não têm suporte.

## Sintaxe

```cpp theme={null}
typedef struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC
{
    D3D12_GPU_VIRTUAL_ADDRESS Transform3x4;
    DXGI_FORMAT IndexFormat;
    DXGI_FORMAT VertexFormat;
    UINT IndexCount;
    UINT VertexCount;
    D3D12_GPU_VIRTUAL_ADDRESS IndexBuffer;
    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer;
} D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC
```

### Membros

*Transform3x4*\
Tipo: D3D12\_GPU\_VIRTUAL\_ADDRESS

Endereço de uma matriz de transformação afim 3x4 em layout de linha principal (row-major) a ser aplicada aos vértices em <i>VertexBuffer</i> durante o build de uma estrutura de aceleração. O conteúdo de <i>VertexBuffer</i> não é modificado. Se um formato de vértice 2D for usado, a transformação será aplicada presumindo que o terceiro componente do vértice seja zero.

Se <i>Transform3x4</i> for NULL, os vértices não serão transformados. O uso de <i>Transform3x4</i> pode resultar em aumento dos requisitos de computação e/ou memória para o build da estrutura de aceleração.

A memória apontada deve estar no estado [D3D12\_RESOURCE\_STATE\_NON\_PIXEL\_SHADER\_RESOURCE](/pt-BR/reference/graphics/d3d12_x/enums/d3d12_resource_states). O endereço deve estar alinhado a 16 bytes, definido como [D3D12\_RAYTRACING\_TRANSFORM3X4\_BYTE\_ALIGNMENT](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/constants).

*IndexFormat*\
Tipo: DXGI\_FORMAT

Formato dos índices em <i>IndexBuffer</i>. Deve ser um dos seguintes:

<ul>
  <li>**DXGI\_FORMAT\_UNKNOWN** - quando IndexBuffer for NULL</li>
  <li>**DXGI\_FORMAT\_R32\_UINT**</li>
  <li>**DXGI\_FORMAT\_R16\_UINT**</li>
</ul>

*VertexFormat*\
Tipo: DXGI\_FORMAT

Formato dos vértices em <i>VertexBuffer</i>. Deve ser um dos seguintes:

<ul>
  <li>**DXGI\_FORMAT\_R32G32\_FLOAT** - presume-se que o terceiro componente seja 0</li>
  <li>**DXGI\_FORMAT\_R32G32B32\_FLOAT**</li>
  <li>**DXGI\_FORMAT\_R16G16\_FLOAT** - presume-se que o terceiro componente seja 0</li>
  <li>**DXGI\_FORMAT\_R16G16B16A16\_FLOAT**  - o componente A16 é ignorado; outros dados podem ser empacotados nele, por exemplo, definindo o stride de vértice como 6 bytes.</li>
  <li>**DXGI\_FORMAT\_R16G16\_SNORM**  - presume-se que o terceiro componente seja 0</li>
  <li>**DXGI\_FORMAT\_R16G16B16A16\_SNORM**   - o componente A16 é ignorado; outros dados podem ser empacotados nele, por exemplo, definindo o stride de vértice como 6 bytes.</li>
</ul>

Dispositivos de camada (tier) 1.1 dão suporte aos seguintes formatos adicionais:

<ul>
  <li>**DXGI\_FORMAT\_R16G16B16A16\_UNORM**   - o componente A16 é ignorado; outros dados podem ser empacotados nele, por exemplo, definindo o stride de vértice como 6 bytes</li>
  <li>**DXGI\_FORMAT\_R16G16\_UNORM**   - presume-se que o terceiro componente seja 0</li>
  <li>**DXGI\_FORMAT\_R10G10B10A2\_UNORM**   - o componente A2 é ignorado; o stride deve ser de 4 bytes</li>
  <li>**DXGI\_FORMAT\_R8G8B8A8\_UNORM**   - o componente A8 é ignorado; outros dados podem ser empacotados nele, por exemplo, definindo o stride de vértice como 3 bytes</li>
  <li>**DXGI\_FORMAT\_R8G8\_UNORM**   - presume-se que o terceiro componente seja 0</li>
  <li>**DXGI\_FORMAT\_R8G8B8A8\_SNORM**  - o componente A8 é ignorado; outros dados podem ser empacotados nele, por exemplo, definindo o stride de vértice como 3 bytes</li>
  <li>**DXGI\_FORMAT\_R8G8\_SNORM**   - presume-se que o terceiro componente seja 0</li>
</ul>

*IndexCount*\
Tipo: UINT

Número de índices em <i>IndexBuffer</i>. Deve ser 0 se <i>IndexBuffer</i> for NULL.

*VertexCount*\
Tipo: UINT

Número de vértices em <i>VertexBuffer</i>.

*IndexBuffer*\
Tipo: D3D12\_GPU\_VIRTUAL\_ADDRESS

Matriz de índices de vértices. Se for NULL, os triângulos não são indexados. Assim como em gráficos, o endereço deve estar alinhado ao tamanho de <i>IndexFormat</i>.

A memória apontada deve estar no estado [D3D12\_RESOURCE\_STATE\_NON\_PIXEL\_SHADER\_RESOURCE](/pt-BR/reference/graphics/d3d12_x/enums/d3d12_resource_states). Observe que, se um aplicativo quiser compartilhar entradas de buffer de índice entre o assembler de entrada de gráficos e a entrada de build da estrutura de aceleração de raytracing, ele sempre poderá colocar um recurso em uma combinação de estados de leitura simultaneamente, por exemplo, **D3D12\_RESOURCE\_STATE\_INDEX\_BUFFER** | **D3D12\_RESOURCE\_STATE\_NON\_PIXEL\_SHADER\_RESOURCE**.

*VertexBuffer*\
Tipo: D3D12\_GPU\_VIRTUAL\_ADDRESS\_AND\_STRIDE

Matriz de vértices, incluindo um stride. O alinhamento do endereço e do stride deve ser um múltiplo do tamanho do componente, ou seja, 4 bytes para formatos com componentes de 32 bits e 2 bytes para formatos com componentes de 16 bits. Ao contrário de gráficos, não há restrição quanto ao stride, exceto que somente os 32 bits inferiores do valor são usados; o campo é UINT64 apenas para que os campos vizinhos fiquem alinhados de forma limpa/óbvia em todos os lugares. Espera-se que a posição de cada vértice esteja no endereço inicial do intervalo de stride, e qualquer espaço excedente é ignorado pelos builds de estrutura de aceleração. Esse espaço excedente pode conter outros dados do aplicativo, como atributos de vértice, que o aplicativo é responsável por buscar manualmente nos sombreadores, estejam eles intercalados em buffers de vértice ou em outro lugar.

A memória apontada deve estar no estado [D3D12\_RESOURCE\_STATE\_NON\_PIXEL\_SHADER\_RESOURCE](/pt-BR/reference/graphics/d3d12_x/enums/d3d12_resource_states). Observe que, se um aplicativo quiser compartilhar entradas de buffer de vértice entre o assembler de entrada de gráficos e a entrada de build da estrutura de aceleração de raytracing, ele sempre poderá colocar um recurso em uma combinação de estados de leitura simultaneamente, por exemplo, **D3D12\_RESOURCE\_STATE\_VERTEX\_AND\_CONSTANT\_BUFFER** | **D3D12\_RESOURCE\_STATE\_NON\_PIXEL\_SHADER\_RESOURCE**

## Requisitos

**Cabeçalho:** d3d12\_xs.h\
**Biblioteca:** d3d12\_xs.lib\
**Plataformas com suporte**: consoles XBOX Series


## Related topics

- [D3D12_RAYTRACING_GEOMETRY_DESC (consoles XBOX Series)](/pt-BR/reference/graphics/d3d12/structs/d3d12_raytracing_geometry_desc_public.md)
- [D3D12_RAYTRACING_INSTANCE_FLAGS (consoles XBOX Series)](/pt-BR/reference/graphics/d3d12/enums/d3d12_raytracing_instance_flags_public.md)
- [GetRaytracingAccelerationStructurePrebuildInfo](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device5/methods/id3d12device5_getraytracingaccelerationstructureprebuildinfo_public.md)
- [D3D12_RAYTRACING_GEOMETRY_TYPE (consoles XBOX Series)](/pt-BR/reference/graphics/d3d12/enums/d3d12_raytracing_geometry_type_public.md)
- [D3D12_RAYTRACING_GEOMETRY_AABBS_DESC (consoles XBOX Series)](/pt-BR/reference/graphics/d3d12/structs/d3d12_raytracing_geometry_aabbs_desc_public.md)
