Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tej sekcji pokazano, jak używać elementów pierwotnych wyższego rzędu w aplikacji.
- określanie obsługi pierwotnej Higher-Order
- łatki rysunku
- Generowanie normalnych i współrzędnych tekstury
Określanie obsługi pierwotnej Higher-Order
Do członu DevCaps struktury D3DCAPS9 można wykonać zapytanie, aby określić poziom obsługi operacji obejmujących prymitywy wyższego rzędu. W poniższej tabeli wymieniono możliwości urządzenia związane z elementami pierwotnymi wyższego rzędu w trybie Direct3D 9.
| Funkcjonalność urządzenia | Opis |
|---|---|
| D3DDEVCAPS_NPATCHES | Urządzenie obsługuje N-patches i jest oparte na zakrzywionych trójkątach PN (specjalny rodzaj sześciennych trójkątów Béziera). |
| D3DDEVCAPS_QUINTICRTPATCHES | Urządzenie obsługuje kwintyczne krzywe Beziera i B-splajny. |
| D3DDEVCAPS_RTPATCHES | Urządzenie obsługuje prostokątne i trójkątne poprawki (RT-patches). |
| D3DDEVCAPS_RTPATCHHANDLEZERO | Poprawki RT mogą być rysowane wydajnie przy użyciu uchwytu o wartości zero. |
Należy pamiętać, że D3DDEVCAPS_RTPATCHHANDLEZERO nie oznacza, że można narysować łatkę z uchwytem o wartości zero. Zawsze można narysować łatkę uchwytu zerowego, niezależnie od tego, czy ta funkcja urządzenia jest ustawiona, czy nie. Gdy ta funkcja jest ustawiona, architektura sprzętowa nie wymaga buforowania żadnych informacji, a niebuforowane poprawki (uchwyt zero) są rysowane tak samo wydajnie jak buforowane.
Rysowanie łatek
Direct3D 9 obsługuje dwa typy prymitywów wyższego rzędu, zwanych też łatami. Są one określane jako N-Patches i Rect/Tri patches. N-patches mogą być renderowane przy użyciu dowolnego wywołania renderowania trójkątów, włączając N-patches poprzez wywołanie do IDirect3DDevice9::SetNPatchMode(nSegments) z wartością nSegments większą niż 1.0. Poprawki rect/Tri muszą być renderowane przy użyciu następujących jawnych punktów wejścia.
Do rysowania obszarów możesz użyć następujących metod.
- IDirect3DDevice9::DrawRectPatch. Aby lepiej zrozumieć, w jaki sposób dane poprawek są przywołyne w buforze wierzchołka, zobacz D3DRECTPATCH_INFO.
- IDirect3DDevice9::DrawTriPatch. Aby lepiej zrozumieć, w jaki sposób dane poprawek są przywołyne w buforze wierzchołka, zobacz D3DTRIPATCH_INFO.
IDirect3DDevice9::DrawRectPatch rysuje prostokątną łatę o wysokim rzędzie określoną przez parametr pRectPatchInfo, przy użyciu aktualnie ustawionych strumieni. Parametr Handle służy do kojarzenia łatki z uchwytem, dzięki czemu przy następnym rysowaniu łatki nie trzeba ponownie określać pRectPatchInfo. Dzięki temu można wstępnie obliczyć i buforować współczynniki różnicowe do przeliczania w przód lub inne informacje, co z kolei umożliwia kolejne wywołania IDirect3DDevice9::DrawRectPatch przy użyciu tego samego uchwytu w celu wydajnego działania.
Zamierza się, że w przypadku poprawek statycznych aplikacja ustawi cieniowanie wierzchołków oraz odpowiednie strumienie, poda informacje o poprawkach za pomocą parametru pRectPatchInfo, a także określi uchwyt, aby Direct3D mógł przechwytywać i buforować informacje. Następnie aplikacja może wywołać IDirect3DDevice9::DrawRectPatch z wartością pRectPatchInfo ustawioną na NULL, aby efektywnie rysować poprawkę. Podczas rysowania buforowanego fragmentu, obecnie ustalone strumienie są ignorowane. Można jednak zastąpić buforowane elementy pNumSegs, określając nowe wartości dla elementu pNumSegs. Ponadto jest wymagane ustawienie tego samego shaderu wierzchołków podczas renderowania buforowanej łaty, jaka została ustawiona podczas przechwytywania.
W przypadku poprawek dynamicznych dane poprawek zmieniają się dla każdego renderowania poprawki, więc nie jest wydajne buforowanie informacji. Aplikacja może przekazać to do Direct3D, ustawiając uchwyt na 0. W takim przypadku funkcja Direct3D rysuje poprawkę przy użyciu aktualnie ustawionych strumieni i wartości pNumSegs i nie buforuje żadnych informacji. Ustawienie Handle na wartość 0 i pPatch na wartość NULLsą nieprawidłowe.
Poprzez ponowne określenie pRectPatchInfo dla tego samego uchwytu, aplikacja może nadpisać wcześniej zapisane informacje.
IDirect3DDevice9::DrawTriPatch jest podobny do IDirect3DDevice9::DrawRectPatch z wyjątkiem tego, że rysuje trójkątną wysokopoziomową poprawkę.
Generowanie normalnych i współrzędnych tekstury
Jeśli używasz elastycznego formatu wierzchołków (FVF) w shaderach, automatyczne generowanie normalnych wektorów i współrzędnych tekstury nie jest możliwe.
W przypadku normalnych można je bezpośrednio dostarczyć lub obliczyć je bezpośrednio w trybie Direct3D.
Współrzędne generowane dla prostokątnych łatek są spline'owymi współrzędnymi, jak pokazano na poniższych ilustracjach.
Współrzędne generowane dla trójkątnych fragmentów są oparte na barycentrycznych współrzędnych spline'ów, jak pokazano na poniższych ilustracjach.
Jeśli aplikacja musi zmienić zakres współrzędnych wygenerowanej tekstury, można to zrobić przy użyciu przekształceń tekstury.
Tematy pokrewne