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 se interpretan y representan los vértices por la canalización.
- Tipos primitivos básicos
- Adyacencia primitiva
- Dirección del viento y posiciones del vértice inicial
- Generación de varias franjas
- Temas relacionados
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értice inicial.
La fase de 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 del 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 D3D_PRIMITIVE_TOPOLOGY_LINELIST ) tiene un primitivo de lista de líneas correspondiente que incluye adyacencia (representada 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 las 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 del vértice inicial
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 que 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. Por otro lado, un primitivo adyacente 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.
Los símbolos de la ilustración anterior se describen en la tabla siguiente.
Símbolo | NOMBRE | Descripción |
---|---|---|
Vértice | Un punto en el espacio 3D. | |
Dirección del desvanado | Orden de vértice al ensamblar un primitivo. Puede ser en sentido contrario a las agujas del reloj o en sentido contrario a las agujas del reloj; para especificarlo, llame a ID3D11Device1::CreateRasterizerState1. | |
Vértice inicial | Primer vértice no adyacente de 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 de franjas llamando explícitamente a la función HLSL RestartStrip 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 hardware de nivel de característica 10.0 o superior porque no todo el hardware de 10level9 implementa esta funcionalidad.
Temas relacionados