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.
Urządzenia Direct3D mogą przekształcać współrzędne tekstury dla wierzchołków, stosując macierz 4x4. System stosuje przekształcenia do współrzędnych tekstury w taki sam sposób jak geometria. Dowolne przekształcenia (skalowanie, rotacja, tłumaczenie, projekcja, ścinanie lub dowolna kombinacja tych) można wykonać za pomocą macierzy 4x4.
Nuta
Funkcja Direct3D nie modyfikuje przekształconych i oświetlonych wierzchołków. W związku z tym aplikacja używająca przekształconych i oświetlonych wierzchołków nie może używać direct3D do przekształcania współrzędnych tekstury wierzchołków.
Urządzenia, które obsługują przyspieszoną sprzętowo transformację i operacje oświetlenia (T&L HAL Device) przyspieszają również przekształcanie współrzędnych tekstury. Gdy przyspieszanie sprzętowe przekształceń nie jest dostępne, optymalizacje specyficzne dla platformy w potoku geometrii Direct3D mają zastosowanie do przekształceń współrzędnych tekstury.
Przekształcenia współrzędnych tekstury są przydatne do tworzenia efektów specjalnych, jednocześnie unikając konieczności bezpośredniego modyfikowania współrzędnych tekstury geometrii. Możesz użyć prostych macierzy tłumaczenia lub rotacji, aby animować tekstury na obiekcie lub przekształcić współrzędne tekstury, które są generowane automatycznie przez Direct3D, aby uprościć i być może przyspieszyć zaawansowane efekty, takie jak przewidywane tekstury i dynamiczne mapowanie światła. Ponadto można użyć przekształceń współrzędnych tekstury, aby użyć pojedynczego zestawu współrzędnych tekstury do wielu celów, na wielu etapach tekstury.
Ustawianie i pobieranie przekształceń współrzędnych tekstury
Podobnie jak macierze używane przez aplikację do geometrii, ustawiasz i pobierasz przekształcenia współrzędnych tekstury, wywołując metody IDirect3DDevice9::SetTransform i IDirect3DDevice9::GetTransform metod. Metody te akceptują D3DTS_TEXTURE0 przez D3DTS_TEXTURE7 składowych D3DTRANSFORMSTATETYPE wyliczonego typu w celu zidentyfikowania macierzy przekształceń dla etapów tekstury odpowiednio od 0 do 7.
Poniższy kod ustawia macierz do zastosowania do współrzędnych tekstury dla etapu tekstury 0.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );
// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );
Włączanie przekształceń współrzędnych tekstury
Stan etapu tekstury D3DTSS_TEXTURETRANSFORMFLAGS steruje zastosowaniem przekształceń współrzędnych tekstury. Wartości tego stanu etapu tekstury są definiowane przez typ D3DTEXTURETRANSFORMFLAGS wyliczony.
Przekształcenia współrzędnych tekstury są wyłączone, gdy D3DTSS_TEXTURETRANSFORMFLAGS jest ustawiona na D3DTTFF_DISABLE (wartość domyślna). Zakładając, że przekształcenia współrzędnych tekstury zostały włączone dla etapu 0, poniższy kod je wyłącza.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_DISABLE );
Inne wartości zdefiniowane w D3DTEXTURETRANSFORMFLAGS służą do włączania przekształceń współrzędnych tekstury i kontrolowania liczby wynikowych elementów współrzędnych tekstury przekazywanych do rasterizatora. Na przykład weź następujący kod.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2 );
Wartość D3DTTFF_COUNT2 nakazuje systemowi zastosowanie macierzy przekształcenia dla etapu tekstury 0, a następnie przekazanie pierwszych dwóch elementów zmodyfikowanych współrzędnych tekstury do rasterizatora.
Flaga przekształcania tekstury D3DTTFF_PROJECTED wskazuje współrzędne przewidywanej tekstury. Po określeniu tej flagi rasterizator dzieli elementy przekazywane przez ostatni element. Weź na przykład następujący kod.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );
Ten przykład informuje system o przekazaniu trzech elementów współrzędnych tekstury do rasterizatora. Rasteryzator dzieli dwa pierwsze elementy przez trzeci, tworząc współrzędne tekstury 2D potrzebne do rozwiązania tekstury.
Tematy pokrewne