Compartir a través de


Topologías primitivas

Direct3D 10 y versiones posteriores admiten varios tipos primitivos (o topologías) representados por el tipo enumerado D3D_PRIMITIVE_TOPOLOGY. Estos tipos definen cómo la canalización interpreta y representa los vértices.

Tipos primitivos básicos

Se admiten los siguientes tipos primitivos básicos:

Para ver una visualización de cada tipo primitivo, vea el diagrama más adelante en este tema en Dirección del viento y Posiciones de vértices iniciales.

La fase del ensamblador de entrada lee datos de búferes de vértices e índices, ensambla los datos en estos primitivos y, a continuación, envía los datos a las fases de canalización restantes. (Puede usar el método ID3D11DeviceContext::IASetPrimitiveTopology para especificar el tipo primitivo para la fase de ensamblador de entrada).

Adyacencia primitiva

Todos los tipos primitivos direct3D 10 y superiores (excepto la lista de puntos) están disponibles en dos versiones: un tipo primitivo con adyacencia y un tipo primitivo sin adyacencia. Los primitivos con adyacencia contienen algunos de los vértices circundantes, mientras que los primitivos sin adyacencia contienen solo los vértices del primitivo de destino. Por ejemplo, el primitivo de lista de líneas (representado por el valor de D3D_PRIMITIVE_TOPOLOGY_LINELIST) tiene un primitivo de lista de líneas correspondiente que incluye adyacencia (representado por el valor de D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ).

Los primitivos adyacentes están diseñados para proporcionar más información sobre la geometría y solo son visibles a través de un sombreador de geometría. La adyacencia es útil para sombreadores de geometría que usan la detección de siluetas, extrusión de volumen de sombras, etc.

Por ejemplo, supongamos que desea dibujar una lista de triángulos con adyacencia. Una lista de triángulos que contiene 36 vértices (con adyacencia) producirá 6 primitivos completados. Los primitivos con adyacencia (excepto franjas de línea) contienen exactamente el doble de vértices que el primitivo equivalente sin adyacencia, donde cada vértice adicional es un vértice adyacente.

Dirección del viento y posiciones de vértices iniciales

Como se muestra en la ilustración siguiente, un vértice inicial es el primer vértice no adyacente en un primitivo. Un tipo primitivo puede tener varios vértices iniciales definidos, siempre y cuando cada uno se use para un primitivo diferente. Para una franja de triángulos con adyacencia, los vértices iniciales son 0, 2, 4, 6, etc. Para una franja de líneas con adyacencia, los vértices iniciales son 1, 2, 3, etc. Un primitivo adyacente, por otro lado, no tiene ningún vértice inicial.

En la ilustración siguiente se muestra el orden de vértices para todos los tipos primitivos que el ensamblador de entrada puede producir.

diagrama de ordenación de vértices para tipos primitivos

Los símbolos de la ilustración anterior se describen en la tabla siguiente.

Símbolo Nombre Descripción
símbolo de un vértice Vértice Un punto en el espacio 3D.
símbolo para la dirección del desvanado Dirección del viento Orden de vértices al ensamblar un primitivo. Puede ser en sentido contrario a las agujas del reloj o en sentido contrario a las agujas del reloj; para especificar esto, llame a ID3D11Device1::CreateRasterizerState1.
símbolo de de vértices iniciales Vértice inicial Primer vértice no adyacente en un primitivo que contiene datos por constante.

 

Generación de varias franjas

Puede generar varias tiras a través del corte de tiras. Puede realizar un corte seccionado llamando explícitamente a la RestartStrip función HLSL o insertando un valor de índice especial en el búfer de índices. Este valor es –1, que es 0xffffffff para índices de 32 bits o 0xffff para índices de 16 bits. Un índice de –1 indica un "corte" explícito o "reinicio" de la franja actual. El índice anterior completa la primitiva o franja anterior y el siguiente índice inicia una nueva primitiva o franja. Para obtener más información sobre cómo generar varias franjas, consulta Geometry-Shader Stage.

Nota

Necesita nivel de característica hardware 10.0 o superior porque no todo el hardware de 10level9 implementa esta funcionalidad.

 

Introducción a la fase de Input-Assembler

fases de canalización (Direct3D 10)