Compartilhar via


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 do assembler de entrada 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 input-assembler.)

Adjacência Primitiva

Todos os tipos primitivos direct3D 10 e superiores (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. Primitivos com adjacência contêm alguns dos vértices ao redor, enquanto primitivos sem adjacência contêm apenas os vértices do primitivo 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).)

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

Por exemplo, suponha que você queira desenhar uma lista de triângulos com adjacência. Uma lista de triângulos que contém 36 vértices (com adjacência) produzirá seis primitivos concluídos. Primitivos com adjacência (exceto faixas de linha) contêm exatamente o dobro de vértices que o primitivo 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 à esquerda é o primeiro vértice não adjacente em um primitivo. Um tipo primitivo pode ter vários vértices à esquerda definidos, desde que cada um seja usado para um primitivo diferente. Para uma faixa de triângulo 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. Um primitivo adjacente, por outro lado, não tem nenhum vértice à esquerda.

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

diagrama de ordenação de vértice para tipos primitivos

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

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

 

Gerando várias faixas

Você pode gerar várias faixas por meio do corte de faixa. Você pode executar um corte de faixa chamando explicitamente a função RestartStrip HLSL ou inserindo um valor de índice especial no 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 "reinicialização" explícito da faixa atual. O índice anterior conclui o primitivo ou a faixa anterior e o próximo índice inicia um novo primitivo ou tira. Para obter mais informações sobre como gerar várias faixas, consulte Geometry-Shader Stage.

Nota

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

 

introdução ao de estágio de Input-Assembler

de estágios de pipeline (Direct3D 10)