Udostępnij przez


Zawijanie teksturowe

Zawijanie tekstur zmienia podstawowy sposób, w jaki Direct3D rasteryzuje teksturowane poligony, używając współrzędnych tekstur określonych dla każdego wierzchołka. Podczas rasteryzacji wielokąta system interpoluje między współrzędnymi tekstury na każdym z wierzchołków wielokąta, aby określić texele, które powinny być używane dla każdego piksela wielokąta. Zwykle system traktuje teksturę jako płaszczyznę 2D, interpolując nowe texels, biorąc najkrótszą trasę od punktu A w teksturze do punktu B. Jeśli punkt A reprezentuje pozycję u, v position (0.8, 0.1), a punkt B znajduje się na (0.1,0.1), linia interpolacji wygląda jak na poniższym diagramie.

diagram linii interpolacji między dwoma punktami

Należy pamiętać, że najkrótsza odległość między A i B na tej ilustracji przebiega mniej więcej przez środek tekstury. Włączenie zawijania współrzędnych tekstury u lub v zmienia sposób, w jaki Direct3D postrzega najkrótszą trasę między współrzędnymi tekstury w kierunku u i kierunku v. Z definicji zawijanie tekstur powoduje, że rasterizator przyjmuje najkrótszą trasę między zestawami współrzędnych tekstury, zakładając, że wartości 0.0 i 1.0 są przypadkowe. Ostatnia część jest najtrudniejsza: Można sobie wyobrazić, że włączenie zawijania tekstury w jednym kierunku powoduje, że system traktuje teksturę tak, jakby była owinięta wokół cylindra. Rozważmy na przykład poniższy diagram.

diagram tekstury i dwa punkty rozmieszczone wokół cylindra

Na powyższej ilustracji pokazano, jak zawijanie w kierunku u wpływa na to, jak system interpoluje współrzędne tekstury. Używając tych samych punktów, co w przykładzie dla normalnych lub nieopakowanych tekstur, widać, że najkrótsza trasa między punktami A i B nie biegnie już środkiem tekstury; teraz przechodzi przez granicę, gdzie 0.0 i 1.0 istnieją razem. Zawijanie w kierunku "v" jest podobne, z tą różnicą, że owija teksturę wokół cylindra leżącego na boku. Zawijanie zarówno w kierunku u, jak i w kierunku v, jest bardziej złożone. W takiej sytuacji można wyobrazić sobie teksturę jako torus lub pączek.

Najczęstszym praktycznym zastosowaniem owijania tekstur jest mapowanie środowiska. Zazwyczaj obiekt teksturowany mapą środowiskową wydaje się bardzo refleksyjny, pokazując odbity obraz otoczenia obiektu w scenie. Na potrzeby tej dyskusji obraz pokoju z czterema ścianami, każdy z nich malowany literą R, G, B, Y i odpowiednimi kolorami: czerwonym, zielonym, niebieskim i żółtym. Mapa środowiska dla takiego prostego pomieszczenia może wyglądać podobnie jak na poniższej ilustracji.

ilustracja pionowych pasków czerwonego, zielonego, niebieskiego i żółtego

Wyobraź sobie, że sufit pomieszczenia jest utrzymywany przez idealnie odbijający, czterostronny filar. Mapowanie tekstury mapy środowiska na filar jest proste; sprawianie, że filar wygląda tak, jakby odzwierciedlał litery i kolory nie jest tak proste. Na poniższym diagramie przedstawiono siatkę drucianą słupa z odpowiednimi współrzędnymi tekstury wymienionymi blisko górnych wierzchołków. Szew, w którym zawijanie przekracza krawędzie tekstury, jest pokazany kropkowaną linią.

diagram prostokąta z przecinającą kropkowaną linią

Po włączeniu zawijania w kierunku u, teksturowany filar odpowiednio pokazuje kolory i symbole z mapy środowiska, a na szwie z przodu tekstury, rasterizator prawidłowo wybiera najkrótszą trasę między współrzędnymi tekstury, zakładając, że współrzędne u 0.0 i 1.0 mają tę samą lokalizację. Teksturowany filar wygląda jak na poniższej ilustracji.

ilustracja filaru składającego się z czerwonych, zielonych, niebieskich i żółtych ćwiartek

Jeśli nie włączono zawijania tekstur, rasterizator nie interpoluje w kierunku wymaganym do wygenerowania wiarygodnego, odzwierciedlonego obrazu. Zamiast tego obszar z przodu filaru zawiera poziomo skompresowaną wersję texelsów między współrzędnymi u,175 i 0,875, gdy przechodzą przez środek tekstury. Efekt zawijania jest zepsuty.

Nie należy mylić owijania tekstur z podobnie nazwanymi trybami adresowania tekstur. Zawijanie tekstur jest wykonywane przed adresowaniem tekstur. Upewnij się, że dane opakowujące tekstury nie zawierają żadnych współrzędnych tekstur poza zakresem [0.0, 1.0], ponieważ spowoduje to wygenerowanie niezdefiniowanych wyników. Aby uzyskać więcej informacji na temat adresowania tekstur, zobacz Tryby adresowania tekstury.

zawijanie mapy przemieszczania

Mapy przemieszczeń są interpolowane przez silnik tessellacji. Ponieważ nie można ustawić tryby owijania dla silnika teselacji, nie można wykonać owijania tekstur przy użyciu map przemieszczeń. Aplikacja może używać zestawu wierzchołków, który wymusza zawijanie interpolacji w dowolnym kierunku. Aplikacja może również określić interpolację, która ma być wykonywana jako prosta interpolacja liniowa.

tekstury