Udostępnij przez


Topologie pierwotne

Funkcja Direct3D 10 lub nowsza obsługuje kilka typów pierwotnych (lub topologii), które są reprezentowane przez typ wyliczany D3D_PRIMITIVE_TOPOLOGY. Te typy definiują sposób interpretowania i renderowania wierzchołków przez potok.

Podstawowe typy pierwotne

Obsługiwane są następujące podstawowe typy pierwotne:

Aby uzyskać wizualizację każdego typu pierwotnego, zobacz diagram w dalszej części tego tematu w temacie Kierunek uzwojenia i Wiodące położenia wierzchołków.

Etap asemblera wejściowego odczytuje dane z wierzchołków i indeksów, tworzy dane w tych elementach pierwotnych, a następnie wysyła dane do pozostałych etapów potoku. (Można użyć metody ID3D11DeviceContext::IASetPrimitiveTopology , aby określić typ pierwotny dla etapu input-assembler).

Przyleganie pierwotne

Wszystkie typy pierwotne Direct3D 10 i wyższe (z wyjątkiem listy punktów) są dostępne w dwóch wersjach: jeden typ pierwotny z sąsiedztwem i jeden typ pierwotny bez przylegania. Prymytywy z sąsiedztwem zawierają niektóre sąsiednie wierzchołki, podczas gdy prymytywy bez sąsiedztwa zawierają tylko wierzchołki docelowego prymitywu. Na przykład element pierwotny listy wierszy (reprezentowany przez wartość D3D_PRIMITIVE_TOPOLOGY_LINELIST ) ma odpowiedni element pierwotny listy wierszy, który zawiera przyleganie (reprezentowane przez wartość D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ ).

Sąsiadujące elementy pierwotne mają zapewnić więcej informacji o geometrii i są widoczne tylko za pomocą cieniowania geometrii. Sąsiadowanie jest przydatne w przypadku shaderów geometrii, które korzystają z wykrywania sylwetki, wytłaczania objętości cieni i tak dalej.

Załóżmy na przykład, że chcesz narysować zbiór trójkątów sąsiadujących. Lista trójkątów zawierająca 36 wierzchołków (z sąsiedztwem) zwróci 6 ukończonych elementów pierwotnych. Elementy pierwotne z sąsiedztwem (z wyjątkiem pasków liniowych) zawierają dokładnie dwa razy więcej wierzchołków niż równoważny element pierwotny bez sąsiedztwa, gdzie każdy dodatkowy wierzchołek jest sąsiednim wierzchołkiem.

Kierunek uzwojenia i położenie wierzchołków wiodących

Jak pokazano na poniższej ilustracji, wierzchołek prowadzący jest pierwszym wierzchołkiem, który nie jest sąsiadujący w obiekcie pierwotnym. Typ pierwotny może mieć zdefiniowanych wiele wierzchołków wiodących, o ile każdy z nich jest używany dla innego elementu pierwotnego. W przypadku paska trójkąta z sąsiedztwem wiodące wierzchołki to 0, 2, 4, 6 itd. W przypadku paska liniowego z sąsiedztwem wiodące wierzchołki to 1, 2, 3 itd. Sąsiadujący prymityw, natomiast, nie ma wierzchołka początkowego.

Na poniższej ilustracji przedstawiono kolejność wierzchołków dla wszystkich typów pierwotnych, które może wygenerować asembler wejściowy.

diagram kolejności wierzchołków dla typów pierwotnych

Symbole na powyższej ilustracji zostały opisane w poniższej tabeli.

Symbol Nazwa Opis
symbol wierzchołka Wierzchołek Punkt w przestrzeni 3D.
Symbol kierunku nawijania Kierunek uzwojenia Kolejność wierzchołków podczas składania prymitywu. Może być zgodnie z ruchem wskazówek zegara lub w lewo; określ to, wywołując identyfikator ID3D11Device1::CreateRasterizerState1.
Symbol dla wiodącego wierzchołkasymbol for leading vertex Wierzchołek wiodący Pierwszy nieprzyległy wierzchołek w typie pierwotnym zawierającym dane stałe.

 

Generowanie wielu pasków

Można wygenerować wiele pasków przez cięcie taśm. Możesz wykonać obcięcie paska, jawnie wywołując funkcję HLSL RestartStrip lub wstawiając specjalną wartość indeksu do bufora indeksów. Ta wartość to –1, która jest 0xffffffff dla indeksów 32-bitowych lub 0xffff dla indeksów 16-bitowych. Indeks –1 wskazuje jawne "wytnij" lub "uruchom ponownie" bieżącego paska. Poprzedni indeks kończy poprzedni element pierwotny lub pasek, a następny indeks rozpoczyna nowy element pierwotny lub pasek. Aby uzyskać więcej informacji na temat generowania wielu pasków, zobacz Geometry-Shader Etap.

Uwaga / Notatka

Potrzebujesz sprzętu na poziomie funkcji 10.0 lub nowszego, ponieważ nie wszystkie 10level9 sprzęt implementuje tę funkcję.

 

wprowadzenie do etapu Input-Assembler

etapy potoku (Direct3D 10)