Dela via


Visa transformering (Direct3D 9)

Det här avsnittet beskriver de grundläggande begreppen i vytransformering och innehåller information om hur du konfigurerar en matris för visningstransformering i ett Direct3D-program.

Visningstransformeringen lokaliserar visningsprogrammet i världsrymden och omvandlar hörn till kamerautrymme. I kamerautrymmet är kameran, eller tittaren, på ursprunget och tittar i positiv z-riktning. Kom ihåg att Direct3D använder ett vänsterkoordinatsystem, så z är positivt till en scen. Vymatrisen flyttar objekten i världen runt en kameras position – ursprunget till kamerautrymmet – och orienteringen.

Det finns många sätt att skapa en vymatris. I samtliga fall har kameran en logisk position och orientering i världsrymden som används som utgångspunkt för att skapa en vymatris som ska tillämpas på modellerna i en scen. Vymatrisen översätter och roterar objekt för att placera dem i kamerautrymmet, där kameran befinner sig i ursprunget. Ett sätt att skapa en vymatris är att kombinera en översättningsmatris med rotationsmatriser för varje axel. I den här metoden gäller följande allmänna matrisekvation.

ekvation för visningstransformering

I den här formeln är V den vymatris som skapas, T är en översättningsmatris som flyttar objekt i världen och Rₓ genom Rz är rotationsmatriser som roterar objekt längs x-, y- och z-axeln. Översättnings- och rotationsmatriserna baseras på kamerans logiska position och orientering i världsrymden. Så om kamerans logiska position i världen är <10 20 100>är syftet med översättningsmatrisen att flytta objekt -10 enheter längs x-axeln, -20 enheter längs y-axeln och -100 enheter längs z-axeln. Rotationsmatriserna i formeln baseras på kamerans orientering, när det gäller hur mycket axlarna i kamerautrymmet roteras ur linje med världsutrymmet. Om den tidigare nämnda kameran till exempel pekar rakt ned är dess z-axel 90 grader (pi/2 radianer) utanför justeringen med z-axeln i världsrymden, som du ser i följande bild.

bild av kamerans visningsutrymme i jämförelse med världsrymden

Rotationsmatriserna tillämpar rotationer av samma, men motsatta, storlek på modellerna i scenen. Visningsmatrisen för den här kameran innehåller en rotation på -90 grader runt x-axeln. Rotationsmatrisen kombineras med översättningsmatrisen för att skapa en vymatris som justerar positionen och orienteringen för objekten i scenen så att deras överkant är riktad mot kameran, vilket ger utseendet att kameran är ovanför modellen.

Konfigurera en vymatris

Hjälpfunktionerna D3DXMatrixLookAtLH och D3DXMatrixLookAtRH skapar en vymatris baserat på kamerans plats och en tittpunkt.

I följande exempel skapas en vymatris för vänsterhänta koordinater.

D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);

Direct3D använder världen och visar matriser för att konfigurera flera interna datastrukturer. Varje gång du anger en ny värld eller vymatris beräknar systemet om de associerade interna strukturerna. Att ange dessa matriser ofta är beräkningsmässigt tidskrävande. Du kan minimera antalet nödvändiga beräkningar genom att sammanfoga din värld och visa matriser i en matris med världsvyer som du anger som världsmatris och sedan ange visningsmatrisen till identiteten. Behåll cachelagrade kopior av en enskild värld och visa matriser som du kan ändra, sammanfoga och återställa världsmatrisen efter behov. För tydlighetens skull använder exemplen sällan den här optimeringen.

transformerar