Topologias primitivas

O Direct3D 10 e superior dá suporte a vários tipos primitivos (ou topologias) representados pelo tipo enumerado D3D_PRIMITIVE_TOPOLOGY . Esses tipos definem como os vértices são interpretados e renderizados pelo pipeline.

Tipos primitivos básicos

Há suporte para os seguintes tipos primitivos básicos:

Para obter uma visualização de cada tipo primitivo, consulte o diagrama mais adiante neste tópico em Direção sinuosa e Posições de vértice à esquerda.

O estágio input-assembler lê dados de buffers de vértice e índice, monta os dados nesses primitivos e envia os dados para os estágios de pipeline restantes. (Você pode usar o método ID3D11DeviceContext::IASetPrimitiveTopology para especificar o tipo primitivo para o estágio de assembler de entrada.)

Adjacência primitiva

Todos os tipos primitivos do Direct3D 10 e superior (exceto a lista de pontos) estão disponíveis em duas versões: um tipo primitivo com adjacência e um tipo primitivo sem adjacência. Primitivas com adjacência contêm alguns dos vértices ao redor, enquanto primitivas sem adjacência contêm apenas os vértices da primitiva de destino. Por exemplo, o primitivo da lista de linhas (representado pelo valor D3D_PRIMITIVE_TOPOLOGY_LINELIST ) tem um primitivo de lista de linhas correspondente que inclui adjacência (representada pelo valor D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ ).)

Primitivas adjacentes foram projetadas para fornecer mais informações sobre sua geometria e só ficam visíveis por meio de um sombreador de geometria. A adjacência é útil para sombreadores de geometria que usam a detecção de silhueta, extrusão de volume de sombra e assim por diante.

Por exemplo, suponha que você deseja desenhar uma lista de triângulos com adjacência. Uma lista de triângulos que contém 36 vértices (com adjacência) produzirá 6 primitivas concluídas. Primitivas com adjacência (exceto faixas de linha) contêm exatamente o dobro dos vértices que a primitiva equivalente sem adjacência, onde cada vértice adicional é um vértice adjacente.

Direção sinuosa e posições de vértice à esquerda

Conforme mostrado na ilustração a seguir, um vértice principal é o primeiro vértice não adjacente em uma primitiva. Um tipo primitivo poderá ter vários vértices principais definidos, desde que cada um deles seja usado para uma primitiva diferente. Para uma faixa de triângulos com adjacência, os vértices principais são 0, 2, 4, 6 e assim por diante. Para uma faixa de linha com adjacência, os vértices principais são 1, 2, 3 e assim por diante. Uma primitiva adjacente, por outro lado, não tem nenhum vértice principal.

A ilustração a seguir mostra a ordem de vértices para todos os tipos primitivos que o assembler de entrada pode produzir.

diagrama da ordem dos vértices para tipos primitivos

Os símbolos na ilustração anterior estão descritos na tabela a seguir.

Símbolo Nome Descrição
símbolo de um vértice Vértice Um ponto no espaço 3D.
símbolo da direção de rotação Direção de rotação A ordem de vértice ao montar uma primitiva. Pode ser no sentido horário ou no sentido anti-horário; especifique isso chamando ID3D11Device1::CreateRasterizerState1.
símbolo de vértice principal Vértice principal O primeiro vértice não adjacente em uma primitiva que contém dados por constante.

 

Gerando várias faixas

Você pode gerar várias faixas por meio de corte de faixa. Você pode executar um corte de faixa explicitamente chamando a função HLSL RestartStrip, ou inserindo um valor de índice especial para o buffer de índice. Esse valor é -1, que é 0xffffffff para índices de 32 bits ou 0xffff para índices de 16 bits. Um índice de – 1 indica um "corte" ou "reinício" explícito da faixa atual. O índice anterior conclui a primitiva anterior, ou a faixa, e o próximo índice inicia um novo primitivo ou faixa. Para obter mais informações sobre como gerar várias faixas, consulte Estágio geometry-shader.

Observação

Você precisa de hardware de nível de recurso 10.0 ou superior porque nem todo o hardware 10level9 implementa essa funcionalidade.

 

Introdução com o Estágio Input-Assembler

Estágios de pipeline (Direct3D 10)