Dela via


Primitiva topologier

Direct3D 10 och högre stöder flera primitiva typer (eller topologier) som representeras av den D3D_PRIMITIVE_TOPOLOGY uppräknade typen. Dessa typer definierar hur hörn tolkas och återges av pipelinen.

Grundläggande primitiva typer

Följande grundläggande primitiva typer stöds:

En visualisering av varje primitiv typ finns i diagrammet senare i det här avsnittet i Lindningsriktning och inledande hörnpositioner.

Indata-assembler-fasen läser data från hörn- och indexbuffertar, monterar data i dessa primitiver och skickar sedan data till de återstående pipelinestegen. (Du kan använda metoden ID3D11DeviceContext::IASetPrimitiveTopology för att ange den primitiva typen för indata-assembler-fasen.)

Primitiv angränsande

Alla Direct3D 10- och högre primitiva typer (förutom punktlistan) är tillgängliga i två versioner: en primitiv typ med angränsande och en primitiv typ utan angränsande. Primitiver med angränsande innehåller några av de omgivande hörnen, medan primitiver utan angränsande endast innehåller hörnen av målprioriten. Till exempel har radlistans primitiva (representeras av D3D_PRIMITIVE_TOPOLOGY_LINELIST-värdet) en motsvarande radlista primitiv som innehåller angränsande (representeras av D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ-värdet.)

Närliggande primitiver är avsedda att ge mer information om din geometri och är endast synliga genom en geometriskuggning. Angränsande är användbart för geometriskuggare som använder silhuettidentifiering, utskjutning av skuggvolymer och så vidare.

Anta till exempel att du vill rita en triangellista med angränsande. En triangellista som innehåller 36 hörn (med angränsande) ger 6 slutförda primitiver. Primitiver med angränsande (utom linjeremsor) innehåller exakt dubbelt så många hörn som motsvarande primitiva utan angränsande, där varje ytterligare hörn är ett intilliggande hörn.

Lindningsriktning och inledande hörnpositioner

Som du ser i följande bild är ett inledande hörn det första icke-intilliggande hörnet i ett primitivt hörn. En primitiv typ kan ha flera inledande hörn definierade, så länge var och en används för en annan primitiv. För en triangelremsa med angränsande hörn är de inledande hörnen 0, 2, 4, 6 och så vidare. För en linjeremsa med angränsande hörn är de inledande hörnen 1, 2, 3 och så vidare. En angränsande primitiv, å andra sidan, har inget inledande hörn.

Följande bild visar hörnordningen för alla primitiva typer som indatamonteraren kan producera.

diagram över hörnordning för primitiva typer

Symbolerna i föregående bild beskrivs i följande tabell.

Symbol Namn Beskrivning
symbol för ett hörn Hörn En punkt i 3D-blanksteg.
symbol för lindningsriktning Lindningsriktning Hörnordningen när du monterar en primitiv. Kan vara medsols eller motsols; ange detta genom att anropa ID3D11Device1::CreateRasterizerState1.
symbol för inledande hörn Inledande hörn Det första icke-intilliggande hörnet i en primitiv som innehåller data per konstant.

 

Generera flera remsor

Du kan generera flera remsor genom bandskärning. Du kan utföra en strip cut genom att uttryckligen anropa funktionen RestartStrip HLSL eller genom att infoga ett särskilt indexvärde i indexbufferten. Det här värdet är –1, vilket är 0xffffffff för 32-bitarsindex eller 0xffff för 16-bitarsindex. Ett index på –1 anger en explicit "klipp ut" eller "omstart" av den aktuella remsan. Det tidigare indexet slutför den tidigare primitiven eller remsan och nästa index startar en ny primitiv eller remsa. Mer information om hur du genererar flera remsor finns i Geometry-Shader Stage.

Not

Du behöver funktionsnivå 10.0 eller högre maskinvara eftersom inte all maskinvara på 10nivå9 implementerar den här funktionen.

 

Komma igång med Input-Assembler Stage

pipelinesteg (Direct3D 10)