Udostępnij przez


Filtrowanie tekstur (Direct3D 9)

Gdy Direct3D renderuje prymityw, mapuje prymityw 3D na ekran 2D. Jeśli prymityw ma teksturę, Direct3D musi użyć tej tekstury, aby utworzyć kolor dla każdego piksela na renderowanym obrazie 2D prymitywu. Dla każdego piksela na obrazie pierwotnym na ekranie musi uzyskać wartość koloru z tekstury. Ten proces jest nazywany filtrowaniem tekstur.

Po wykonaniu operacji filtrowania tekstury używana tekstura jest zwykle powiększana lub minimalizowana. Innymi słowy, jest mapowany na obraz pierwotny, który jest większy lub mniejszy niż sam. Powiększenie tekstury może spowodować mapowanie wielu pikseli na jeden texel. Wynik może mieć ciężki wygląd. Minifikacja tekstury często oznacza, że pojedynczy piksel jest mapowany na wiele teksseli. Wynikowy obraz może być rozmyty lub aliasowany. Aby rozwiązać te problemy, należy wykonać połączenie kolorów texel, aby uzyskać kolor dla piksela.

Direct3D upraszcza złożony proces filtrowania tekstur. Zapewnia ona trzy typy filtrowania tekstur — filtrowanie liniowe, filtrowanie anisotropowe i filtrowanie mipmap. Jeśli nie wybierzesz filtrowania tekstur, funkcja Direct3D używa techniki nazywanej próbkowaniem najbliższego punktu.

Każdy typ filtrowania tekstur ma zalety i wady. Na przykład filtrowanie tekstur liniowych może generować postrzępione krawędzie lub fragmentowany wygląd na końcowym obrazie. Jest to jednak metoda filtrowania tekstury o niskim zapotrzebowaniu na zasoby obliczeniowe. Filtrowanie za pomocą map mipmap zwykle daje najlepsze wyniki, zwłaszcza w połączeniu z filtrowaniem anisotropowym. Jednak wymaga to najwięcej pamięci technik, które obsługuje Direct3D.

Aplikacje korzystające ze wskaźników interfejsu tekstury powinny ustawić bieżącą metodę filtrowania tekstur, wywołując metodę IDirect3DDevice9::SetSamplerState. Ustaw wartość pierwszego parametru na liczbę indeksu całkowitego (0–7) tekstury, dla której wybierasz metodę filtrowania tekstury. Przekaż D3DSAMP_MAGFILTER, D3DSAMP_MINFILTER lub D3DSAMP_MIPFILTER jako drugi parametr, aby ustawić filtr powiększenia, pomniejszenia lub mapowania mip. Przekaż element członkowski wyliczonego typu D3DTEXTUREFILTERTYPE jako wartość w trzecim parametrze.

W tej sekcji przedstawiono metody filtrowania tekstur obsługiwane przez funkcję Direct3D. Jest ona zorganizowana w następujące tematy.

Notatka

Chociaż stany renderowania związane z filtrowaniem tekstur, obecne w D3DRENDERSTATETYPE typie wyliczeniowym, są zastępowane przez stany etapów przetwarzania tekstur, IDirect3DDevice9::SetRenderState, w przeciwieństwie do wersji IDirect3DDevice2, nie powoduje błędu, o ile spróbujesz je użyć. Raczej system mapuje efekty tych stanów renderowania na pierwszy etap kaskady wielotekstur, etap 0. Aplikacje nie powinny mieszać starszych stanów renderowania z odpowiadającymi im stanami etapu tekstury, ponieważ mogą wystąpić nieprzewidywalne wyniki.

 

tekstury Direct3D