SlideShare a Scribd company logo
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Aplikacje Direct3D
           KATALOG KSI¥¯EK
                                         Autor: Robert Krupiñski
                      KATALOG ONLINE     ISBN: 83-7197-877-4
                                         Format: B5, stron: 180
       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Dziêki Direct3D mo¿esz tworzyæ nowoczesne gry, symulacje czy programy
                                         multimedialne. Jest on podstawowym standardem programowania grafiki
                                         trójwymiarowej w systemach operacyjnych zgodnych z Windows. Akceleracja
         CENNIK I INFORMACJE             sprzêtowa, oferowana przez wiêkszo æ wspó³czesnych kart graficznych oraz bogaty
                                         zbiór narzêdzi dostêpnych w wersji 8.1 umo¿liwia programowanie zaskakuj¹cej
                   ZAMÓW INFORMACJE      i efektownej grafiki 3D. Direct3D dostarcza programi cie gotowych interfejsów,
                     O NOWO CIACH        uwalniaj¹c go jednocze nie od konieczno ci zaznajamiania siê ze wewnêtrznymi
                                         funkcjami sprzêtu.
                       ZAMÓW CENNIK      Blisko 100 przyk³adowych projektów prezentuj¹cych wiele praktycznych zastosowañ
                                         Direct3D wprowadzi Ciê w wiat programowania grafiki 3D.
                                         W ksi¹¿ce omówiono m.in.:
                 CZYTELNIA                 •   Podstawy programowania w Direct3D
          FRAGMENTY KSI¥¯EK ONLINE         •   Bufory werteksów
                                           •   Zarz¹dzanie z³o¿onymi obiektami (obiekt Mesh)
                                           •   Przekszta³cenia przestrzeni
                                           •    wiat³o i materia³, prze roczysto æ
                                           •   Operowanie teksturami
                                           •   Zarz¹dzanie obiektami le¿¹cymi na jednej p³aszczy nie
                                           •   Pisanie kodu niezale¿nego od rodzaju karty graficznej
                                         Autor zak³ada, ¿e Czytelnik potrafi pos³ugiwaæ siê pakietem Visual C++ i posiada
                                         umiejêtno æ programowania w tym jêzyku, korzysta z klas MFC, a tak¿e jest
                                         zaznajomiony z pojêciami dotycz¹cymi grafiki komputerowej. Je li spe³niasz te warunki
                                         i chcesz kreowaæ w³asne, trójwymiarowe wiaty na ekranie komputera, z pewno ci¹
                                         pomo¿e Ci w tym ta ksi¹¿ka.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
 Wprowadzenie ..............................................................................................................7
 Rozdział 1. Aplikacje bazowe ....................................................................................11
     Szkielet podstawowy .............................................................................................................................11
     Kreator DirectX AppWizard .................................................................................................................14

 Rozdział 2. Bufory werteksów ...................................................................................17
     Prymitywy .............................................................................................................................................17
     FVF........................................................................................................................................................25
     Bufory indeksów....................................................................................................................................30
     Dynamiczna zmiana zawartości buforów..............................................................................................32
     Łączenie buforów ..................................................................................................................................34

 Rozdział 3. Obiekt Mesh ............................................................................................37
     Obiekty podstawowe .............................................................................................................................37
     Klasy pomocnicze..................................................................................................................................40
     Teselacja ................................................................................................................................................41
     Pliki .x....................................................................................................................................................44

 Rozdział 4. Przekształcenia przestrzeni ...................................................................47
     Okno widoku .........................................................................................................................................47
     Macierz świata .......................................................................................................................................48
     Macierz widoku .....................................................................................................................................50
     Macierz rzutowania ...............................................................................................................................53
     Kwaterniony ..........................................................................................................................................54

 Rozdział 5. Światło i materiał ....................................................................................59
     Ustawienia kolorów...............................................................................................................................59
     Światło kierunkowe ...............................................................................................................................63
     Światło punktowe ..................................................................................................................................64
     Światło źródłowe ...................................................................................................................................65
     Wiele źródeł światła ..............................................................................................................................66
     Materiał..................................................................................................................................................68

 Rozdział 6. Blending werteksów................................................................................71
     Tweening ...............................................................................................................................................71
     Macierze deformujące ...........................................................................................................................76
4             Aplikacje Direct3D


    Rozdział 7. Alpha Blending .......................................................................................83
    Rozdział 8. Bufor szablonu ........................................................................................89
    Rozdział 9. Tekst.........................................................................................................93
    Rozdział 10. Tekstury.................................................................................................97
        Tekstury płaskie.....................................................................................................................................97
        Tekstury otoczenia...............................................................................................................................100
        Dwa etapy łączenia tekstur ..................................................................................................................106
        Tekstura wichrująca i tekstura obiektu ................................................................................................109
        Tekstura wichrująca i tekstura otoczenia.............................................................................................114
        Tekstura obiektu, wichrująca i otoczenia ............................................................................................116
        Tekstury przestrzenne..........................................................................................................................117
        Dot3 .....................................................................................................................................................119
        Mapy wektorów normalnych i wektorów wichrujących .....................................................................122

    Rozdział 11. Potoki ...................................................................................................125
        VertexShader .......................................................................................................................................125
        PixelShader..........................................................................................................................................136
        Program uruchomieniowy ...................................................................................................................141

    Rozdział 12. Z-bufor.................................................................................................143
    Rozdział 13. Efekty...................................................................................................145
    Rozdział 14. Płaszczyzny tnące................................................................................153
    Rozdział 15. Mgła .....................................................................................................155
    Rozdział 16. Sprajty .................................................................................................159
    Rozdział 17. Punkty..................................................................................................163
    Rozdział 18. Wygaszacz ekranu ..............................................................................167
    Rozdział 19. Interakcja ............................................................................................171
    Zawartość CD-ROM-u.............................................................................................177
    Skorowidz..................................................................................................................181
Rozdział 10.
Tekstury
     Tekstury zwiększają realizm renderowanych scen, nadają im specyficzny charakter. Je-
     śli zachowamy ustawienia konfiguracyjne sceny, a zmienimy teksturę, to mo emy uzy-
     skać ciekawy efekt, np. sceneria zmieni się z polarnej w pustynną. Dynamiczne zmie-
     nianie tekstur, ró ne sposoby ich łączenia, wyświetlanie kolejnych klatek tekstur na
     powierzchni obiektów, a nawet zaburzania współrzędnych tekstur — to zabiegi, które
     pozwalają wprowadzać coraz to nowe rozwiązania, efekty.

     W przykładach przedstawimy ró ne rodzaje tekstur obsługiwanych przez DirectX oraz
     sposób ich stosowania.


Tekstury płaskie
     Definicje struktur FVF dla obiektów zawierających teksturę zostały omówione w rozdziale
     „Bufory werteksów” na przykładzie projektu z katalogu PrimitivesFVFPositionTexCoord.
     Teraz poka emy, w jaki sposób przygotować teksturę do wyświetlenia.

     W deklaracji klasy %/[#RR podajemy wskaźnik do interfejsu obsługującego teksturę:
       RTKXCVG
           .2+4'%66':674' OAR6GZVWTG

     W konstruktorze inicjalizujemy to pole wartością 07... Teksturę mo na załadować z pliku
     na kilka sposobów. My przedstawimy dwa z nich:
       KH
 (#+.'
 :%TGCVG6GZVWTG(TQO(KNG
OARFFGXKEG VGZDOR  OAR6GZVWTG  
               TGVWTP 'A(#+.

       KH
 (#+.'
 7VKNA%TGCVG6GZVWTG
OARFFGXKEG  VGZDOR  OAR6GZVWTG  
               TGVWTP 'A(#+.

     W slocie 0 ustawiamy teksturę jako aktywną, wykorzystywaną do renderingu:
       OARFFGXKEG 5GV6GZVWTG
 OAR6GZVWTG

     Obiekty, które posiadają współrzędne u i v, będą wykorzystywały tę teksturę. Na koniec
     nale y pamiętać o zwolnieniu zasobów tekstury:
       5#('A4'.'#5'
OAR6GZVWTG
98        Aplikacje Direct3D


          Kolejnym krokiem będzie dynamiczna zmiana współrzędnych u i v tekstury. Projekt z kata-
          logu TextureTexRotate (rysunki 10.1a i 10.1b) implementuje obrót współrzędnych tekstury
          wokół osi Z:
            :/#64+: OCV
            :/CVTKZ4QVCVKQP
 OCVUKPH
OAH6KOG

Rysunek 10.1a.
Obrót współrzędnych
tekstury wokół osi Z




Rysunek 10.1b.
Obrót współrzędnych
tekstury wokół osi Z




          Macierz obrotu wokół osi Z jest umieszczana w zmiennej OCV.

          Macierz obrotów wykorzystujemy do zmiany współrzędnych tekstury. W metodzie (TCOG
          /QXG blokujemy bufory werteksów i uaktualniamy pozycje u i v tekstury:
            :8'%614 X
            '(8'46':
R8GTVKEGU
Rozdział 10.   Tekstury           99


             KH
57%%'''
 OAR8$ .QEM
UKGQH
'(8'46': 
$;6'
R8GTVKEGU    
             ]
                 R8GTVKEGU=?WX
:8GE6TCPUHQTO%QQTF
 X OAX OCV

                 R8GTVKEGU=?WX
:8GE6TCPUHQTO%QQTF
 X OAX OCV

                 R8GTVKEGU=?WX
:8GE6TCPUHQTO%QQTF
 X OAX OCV

                 R8GTVKEGU=?WX
:8GE6TCPUHQTO%QQTF
 X OAX OCV
             _
             OAR8$ 7PNQEM


          Funkcja :8GE6TCPUHQTO%QQTF przekształca wektor dwuelementowy, określony w dru-
          gim argumencie, przez macierz OCV.

          W przykładzie z katalogu TextureTexTranslate wykorzystaliśmy inną macierz prze-
          kształcenia współrzędnych. Jest to macierz translacji:
             :/CVTKZ6TCPUNCVKQP
 OCVH
UKPH
H
OAH6KOG H
EQUH
H
OAH6KOGH

          Rysunki 10.2a i 10.2b przedstawiają teksturę przemieszczaną na powierzchni obiektu.

Rysunek 10.2a.
Przemieszczanie
tekstury na powierzchni
obiektu




          W projekcie TextureTexAnim wykorzystaliśmy sekwencyjną zmianę tekstury. Kolejna
          tekstura jest wyświetlana z częstością trzydziestu klatek na sekundę, co sprawia wra enie
          animacji tekstury na powierzchni obiektu. Dodatkowo tekstura jest przemieszczana. De-
          finiujemy tablicę tekstur:
             RTKXCVG
                 .2+4'%66':674' OAR6GZVWTGU=07/A6':674'5?

          W tablicy tej będą przechowywane kolejne klatki tekstury. Inicjalizujemy wartością 07..
          wszystkie tekstury:
             HQT
KPV KK07/A6':674'5K


                 OAR6GZVWTGU=K?07..
100       Aplikacje Direct3D


Rysunek 10.2b.
Przemieszczanie
tekstury na powierzchni
obiektu




          Pamiętamy o zwolnieniu zasobów zajmowanych przez tekstury:
             HQT
KPV KK07/A6':674'5K


                 5#('A4'.'#5'
 OAR6GZVWTGU=K? 

          Ładujemy wszystkie tekstury z plików do tablicy:
             KH
 (#+.'
 :%TGCVG6GZVWTG(TQO(KNG
 OARFFGXKEG VGZDOR  OAR6GZVWTGU=?   
                 TGVWTP 'A(#+.

             

             KH
 (#+.'
 :%TGCVG6GZVWTG(TQO(KNG
 OARFFGXKEG VGZDOR  OAR6GZVWTGU=?   
                 TGVWTP 'A(#+.

          Zanim rozpoczniemy renderowanie, wybieramy teksturę, która ma być wykorzystana
          i umieszczamy ją w slocie 0:
             OARFFGXKEG 5GV6GZVWTG
  OAR6GZVWTGU=OAP#EVKXG6GZVWTG? 

          Rysunek 10.3a przedstawia sekwencję animacji, którą uzyskaliśmy. Rysunek 10.3b poka-
          zuje pierwszą bitmapę, a rysunek 10.3c — piątą z sekwencji dziesięciu klatek.

          W analizowanych przykładach tekstury zostały umieszczone na czworokątach, lecz nic
          nie stoi na przeszkodzie, by animować tekstury na powierzchni zło onych obiektów
          trójwymiarowych.


Tekstury otoczenia
          Współrzędne tekstury mogą być wygenerowane automatycznie, nie jest konieczne po-
          dawanie ich wartości w strukturach werteksów. Powstaje wtedy efekt odbijania się tek-
          stury na obiekcie, nazywany mapowaniem otoczenia (Environment Mapping).

          W podanych przykładach poka emy sposób wykorzystania mapowania.
Rozdział 10.    Tekstury         101


Rysunek 10.3a.
Wynik wyświetlania
sekwencji tekstur
na powierzchni obiektu




Rysunek 10.3b.
Pierwsza klatka
animowanej tekstury




Rysunek 10.3c.
Piąta klatka
animowanej tekstury




          Przykład (z katalogu TextureEnvMapping1) mapowania otoczenia został przedstawio-
          ny na rysunku 10.4a. Teksturę otoczenia pokazuje rysunek 10.4b.

          Aby otrzymać taki efekt, nale y wprowadzić w kodzie:
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A6':674'64#05(14/(.#)5 66((A%1706 
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A6':%114+0':
            655A6%+A%#/'4#52#%'014/#. 

          Flaga 655A6':%114+0': informuje urządzenie o sposobie generowania współrzęd-
          nych tekstury (wybrane 655A6%+A%#/'4#52#%'014/#.), zaś flaga 655A6':674'
          64#05(14/(.#)5 informuje o liczbie współrzędnych tekstury, przekazywanych do urządze-
          nia renderującego. W tym przypadku są to dwie współrzędne u i v (66((A%1706). Usta-
          wienia te wykonano dla poziomu 0 (pierwszy argument powy szych funkcji). Dodatkowo
          ustawiamy macierz przekształcenia współrzędnych tekstury:
102       Aplikacje Direct3D


Rysunek 10.4a.
Tekstura powstała
w wyniku mapowania
otoczenia (generowanie
współrzędnych tekstury
— flaga D3DTSS_TCI_
CAMERASPACENORMAL).
Do urządzenia
przekazywane są dwie
współrzędne tekstury




Rysunek 10.4b.
Tekstura otoczenia




            :/#64+: OCV
            OCVA  H OCVA  H OCVA  H OCVA      H
            OCVA  H OCVA H OCVA  H OCVA      H
            OCVA  H OCVA  H OCVA  H OCVA      H
            OCVA  H OCVA  H OCVA  H OCVA      H
            OARFFGXKEG 5GV6TCPUHQTO
 65A6':674' OCV 

          Zmieniając dynamicznie wartości tej macierzy, mo na tak e uzyskać efekt przemieszcza-
          nia się tekstury na powierzchni obiektu (np. odbijanie się otoczenia w szybie poruszającego
          się samochodu). Flaga 65A6':674' oznacza, e ustawiana jest macierz przekształ-
          cająca teksturę dla poziomu 0.
Rozdział 10.    Tekstury         103


          Do urządzenia mo na przekazać trzy współrzędne, wartość dwóch pierwszych zostanie
          obliczona przez podzielenie ich przez wartość trzeciej współrzędnej. W efekcie końco-
          wym uzyskamy tylko dwie współrzędne do pobierania koloru z tekstury dwuwymiaro-
          wej. W tym przypadku ustawienia wyglądają tak:
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A6':674'64#05(14/(.#)5 66((A%1706
            ^66((A241,'%6'

          Jest to jedyna ró nica w porównaniu do poprzedniego projektu. Efekt tego typu mapo-
          wania przedstawia rysunek 10.5a (projekt z katalogu TextureEnvMapping1p). Na ry-
          sunku 10.5b przedstawiono teksturę otoczenia. Mapowanie, w którym zastosowano flagi
          66((A241,'%6', pomaga wyeliminować błędy, jakie powstają na powierzchni obiektów
          w kierunku osi Z (tekstura nie jest nało ona, lecz rozciągnięta).

Rysunek 10.5a.
Mapowanie tekstury
otoczenia na obiekt
(generowanie
współrzędnych tekstury
— flaga D3DTSS_TCI_
CAMERASPACENORMAL).
Do urządzenia
przekazywane są trzy
współrzędne tekstury




Rysunek 10.5b.
Tekstura otoczenia
104       Aplikacje Direct3D


          Jeśli zastosujemy flagę 655A6%+A%#/'4#52#%'215+6+10, to otrzymamy inny tryb gene-
          rowania współrzędnych tekstury. Ustawiamy wtedy:
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A6':674'64#05(14/(.#)5 66((A%1706 
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A6':%114+0':
            655A6%+A%#/'4#52#%'215+6+10 

          W tym przypadku będą równie wykorzystane tylko dwie współrzędne tekstury. Wynik ma-
          powania oraz teksturę otoczenia przedstawiają kolejno rysunek 10.6a i b (projekt z ka-
          talogu TextureEnvMapping2).

Rysunek 10.6a.
Mapowanie tekstury
otoczenia na obiekt
(generowanie
współrzędnych tekstury
— flaga D3DTSS_TCI_
CAMERASPACEPOSITION).
Do urządzenia
przekazywane są dwie
współrzędne tekstury




Rysunek 10.6a.
Tekstura otoczenia




          Ten sam zabieg mapowania, ale dla flagi 66((A241,'%6' przedstawia rysunek 10.7
          (projekt z katalogu TextureEnvMapping2p).

          Tryb generowania współrzędnych tekstury 655A6%+A%#/'4#52#%'4'(.'%6+108'%614 sto-
          sujemy w przypadku tekstur typu sześciennego. Ustawienia są wtedy następujące:
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A6':674'64#05(14/(.#)5 66((A%1706 
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A6':%114+0': 655A6%+A
            %#/'4#52#%'4'(.'%6+108'%614
Rozdział 10.   Tekstury         105


Rysunek 10.7.
Mapowanie tekstury
otoczenia na obiekt
(generowanie
współrzędnych tekstury
— flaga D3DTSS_TCI_
CAMERASPACEPOSITION).
Do urządzenia
przekazywane są trzy
współrzędne tekstury




         W tym przypadku generowane są trzy współrzędne, które są przekazywane do urządzenia
         w celu indeksowania tekstury. Sposób generowania wektora odbicia, który właśnie słu y
         do indeksowanie tekstury, mo e być modyfikowany za pomocą flagi 45A.1%#.8+'9'4,
         która przyjmuje wartości typu $11..

         Projekt (TextureEnvMapCube) przedstawia zastosowanie mapowania sześciennego.
         Tekstura ma postać sześcianu, na którego ka dą ścianę mo na nało yć inną płaską tek-
         sturę otoczenia.

         Definiujemy teksturę sześcienną:
           RTKXCVG
               .2+4'%6%7$'6':674' OAR6GZVWTG%WDG

         Inicjalizujemy ją wartością 07.. w konstruktorze:
           OAR6GZVWTG%WDG07..

         Ładujemy z pliku .dds przygotowaną wcześniej teksturę sześcienną:
           KH
 (#+.'
 :%TGCVG%WDG6GZVWTG(TQO(KNG
OARFFGXKEG VGZFFU  OAR6GZVWTG%WDG  
               TGVWTP 'A(#+.

         Tekstura została tak przygotowana, aby ka da ściana była innego koloru. Efekt nało enia
         jej na obiekt jest więc widoczny (rysunek 10.8).

         Tekstury .dds mo na wykonać w programie DxTex.exe z pakietu SDK 8.1. Ustawiamy tę
         teksturę jako aktywną w slocie 0:
           OARFFGXKEG 5GV6GZVWTG
 OAR6GZVWTG%WDG

         I dopiero teraz mo na wykonać rendering obiektu. Na koniec nale y zwolnić zasoby
         tekstury.
           5#('A4'.'#5'
OAR6GZVWTG%WDG
106       Aplikacje Direct3D


Rysunek 10.8.
Mapowanie tekstury
otoczenia na obiekt
(generowanie
współrzędnych tekstury
— flaga D3DTSS_TCI_
CAMERASPACERE-
FLECTIONVECTOR).
Do urządzenia
przekazywane są trzy
współrzędne tekstury




          Przed rozpoczęciem działania aplikacja musi się upewnić, czy urządzenie obsługuje ten
          rodzaj tekstur:
            KH
   
 R%CRU 6GZVWTG%CRU   26':674'%#25A%7$'/#2  
                TGVWTP 'A(#+.

          W bardziej skomplikowanym przykładzie mo na na teksturę otoczenia renderować obiekty
          zdefiniowanej sceny, a następnie wykorzystać tak przygotowaną teksturę do rysowania
          obiektów zapisywanych w buforze obrazu. Otrzymamy efekt wzajemnego odbijania się
          obiektów na swoich powierzchniach.


Dwa etapy łączenia tekstur
          Jeden werteks mo e posiadać informacje o współrzędnych dla ośmiu tekstur. W tym pod-
          rozdziale przedstawimy sposób łączenia tekstur w dwóch etapach (dla dwóch tekstur).
          Ka dy werteks będzie zawierał współrzędne dla dwóch tekstur WX i WX:
            UVTWEV '(8'46':
            ]
                (.1#6 Z [ 
                :8'%614 WX
                :8'%614 WX
            _

          Definicja FVF dla takiej struktury przybiera postać:
             FGHKPG (8(A'(8'46': 
(8(A:;^(8(A6':^(8(A6':%1145+'
^ (8(A
            6':%1145+'


          Makro (8(A6':%1145+'
Z oznacza, e tekstura o indeksie x ma dwa parametry u i v.

          Tekstury ładujemy z plików i ustawiamy w odpowiednich slotach 0 i 1:
            OARFFGXKEG 5GV6GZVWTG
  OAR6GZVWTGU=OAP#EVKXG6GZVWTG? 
            OARFFGXKEG 5GV6GZVWTG
  OAR6GZVWTG
Rozdział 10.      Tekstury            107


Tekstura w slocie zerowym będzie się zmieniała, dlatego wybieramy z tablicy jedną z tek-
stur (będą wyświetlane sekwencyjnie — animacja). Teraz wprowadzamy informacje na
temat tego, co będzie się działo z teksturą w danym slocie. Dla etapu 0:
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A6':%114+0':  
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A%1.14#4) 6#A6':674' 
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A%1.1412 612A5'.'%6#4)
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A%1.14#4) 6#A+((75'
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A#.2*#12 612A+5#$.'

Flaga 655A6':%114+0': ustawia indeks informujący, które współrzędne tekstury są
przeznaczone dla tej tekstury w strukturze werteksa (indeks 0 to WX). Flaga 655A%1.1412
oznacza rodzaj operacji dla kolorów rgb, a flaga 655A#.2*#12 — operację dla kanału
alfa. Flagi 655A%1.14#4) i 655A%1.14#4) oznaczają odpowiednio argumenty dla
określonej operacji rgb. Operacja 612A5'.'%6#4) to wybór argumentu pierwszego
6#A6':674', który oznacza teksturę. Argument drugi 6#A+((75', oznaczający ko-
lor, jest ignorowany. Dla kanału alfa operacja jest wyłączona 612A+5#$.'. Wynikowe
wartości są przekazywane do kolejnego slotu.

W drugim etapie jako pierwszy argument wybieramy teksturę ze slotu 1 (6#A6':674')
oraz jako drugi argument wynik poprzedniej operacji (6#A%744'06) ze slotu 0:
  6':674'12 OAG6GZ1R
  OAG6GZ1R612A/17.#6'

  

  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A6':%114+0':  
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A%1.14#4) 6#A6':674' 
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A%1.1412 OAG6GZ1R
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A%1.14#4) 6#A%744'06 
  OARFFGXKEG   5GV6GZVWTG5VCIG5VCVG
      655A#.2*#12 612A+5#$.'

Parametr wyliczeniowy OAG6GZ1R jest jedną z dostępnych operacji łączenia tekstur:

 Operacja               Testowana flaga D3DTEXOPCAPS             Opis
 612A+5#$.'         6':12%#25A+5#$.'                     wyłączenie
 612A5'.'%6#4)      6':12%#25A5'.'%6#4)                  wybór pierwszego argumentu
 612A5'.'%6#4)      6':12%#25A5'.'%6#4)                  wybór drugiego argumentu
 612A/17.#6'        6':12%#25A/17.#6'                     Arg1 ⋅ Arg 2
 612A/17.#6':      6':12%#25A/17.#6':                  ( Arg1 ⋅ Arg2 ) ⋅ 2
 612A/17.#6':      6':12%#25A/17.#6':                  ( Arg1 ⋅ Arg2 ) ⋅ 4
 612A#             6':12%#25A#                          Arg1 + Arg 2
 612A#5+)0'       6':12%#25A#5+)0'                    Arg1 + Arg 2 − 0.5
 612A#5+)0':     6':12%#25A#5+)0':                 ( Arg1 + Arg 2 − 0.5) ⋅ 2
 612A57$64#%6        6':12%#25A57$64#%6                     Arg1 − Arg 2
 612A#5/116*       6':12%#25A#5/116*                    Arg1 + Arg 2 ⋅ (1 − Arg1 )
108      Aplikacje Direct3D


         Typ wyliczeniowy 6':674'12 obejmuje znacznie większą liczbę operacji. W tabeli zo-
         stały podane tylko te, które zostały wykorzystane w opisywanej implementacji.

         W trzecim etapie nie będziemy wykonywali adnych operacji, więc wywołujemy funkcje:
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A%1.1412   612A+5#$.' 
            OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG
  655A#.2*#12   612A+5#$.' 

         Sprawdzamy, czy urządzenie wykonuje określoną operację:
            KH
OAFF%CRU6GZVWTG1R%CRU 6':12%#25A/17.#6':
                R$ 'PCDNG9KPFQY
647'
            GNUG
                R$ 'PCDNG9KPFQY
(#.5'

         Nale y tak e sprawdzić, czy są dostępne dwa sloty:
            KH
R%CRU /CZ6GZVWTG$NGPF5VCIGU
                D%CRU#EEGRVCDNG(#.5'

         Przykład z katalogu TextureTexOp to aplikacja MFC, która pozwala przetestować wy-
         brane sposoby łączenia tekstur (rysunek 10.9a). Rysunek 10.9b pokazuje pierwszą tek-
         sturę z sekwencji dziesięciu tekstur, a rysunek 10.9c — piątą.

Rysunek 10.9a.
Aplikacja MFC
— różne sposoby
łączenia tekstur




Rysunek 10.9b.
Pierwsza klatka
animowanej tekstury
Rozdział 10.     Tekstury         109


Rysunek 10.9c.
Piąta klatka
animowanej tekstury




          Ró ne tekstury mo na wykorzystać do symulowania oświetlania obiektów światłem mo-
          nochromatycznym lub wielobarwnym.


Tekstura wichrująca i tekstura obiektu
          W tym podrozdziale przedstawimy zastosowanie tekstury wichrującej w slocie 0 oraz tek-
          stury obiektu w slocie 1. Tekstura wichrująca (Bump Texture) imituje nierówności po-
          wierzchni obiektów. W zale ności od formatu tekstura wichrująca mo e nie tylko mo-
          dyfikować współrzędne tekstury obiektu, ale i regulować jasność pikseli.

          Przykład z katalogu TextureTexBumpTranslate pokazuje, jak oddziałuje tekstura wi-
          chrująca na teksturę obiektu (rysunek 10.10a). Dla porównania tekstura obiektu została
          przedstawiona na rysunku 10.10b. Na statycznych obrazach widać wyraźnie efekt, kiedy
          obserwuje się wie ę i dach (na lewo od wie y). Podczas dynamicznego działania progra-
          mu jest to łatwiejsze do zauwa enia.

Rysunek 10.10a.
Tekstura obiektu
modyfikowana przez
teksturę wichrującą




          Tekstura wichrująca jest przemieszczana w poziomie, co daje efekt falowania powierzchni
          obiektu. Oto operacje, które nale y wykonać, jeśli chcemy zastosować teksturę wichrującą.
110       Aplikacje Direct3D


Rysunek 10.10b.
Tekstura obiektu




          Najpierw sprawdzamy, czy urządzenie obsługuje BumpMapping za pomocą flagi
          6':12%#25A$7/2'08/#2 oraz czy obsługuje określony format tekstury wichrującej
          (/6A87:
            KH
 
 R%CRU 6GZVWTG1R%CRU   6':12%#25A$7/2'08/#2 
                TGVWTP 'A(#+.

            KH
(#+.'
 OAR %JGEMGXKEG(QTOCV
 R%CRU #FCRVGT1TFKPCN
            R%CRU GXKEG6[RG (QTOCV 46;2'A6':674'(/6A87   
                    TGVWTP 'A(#+.

          Ładujemy teksturę obiektu i umieszczamy ją w slocie 1. Załadowana tekstura wichrująca
          jest przekształcana, zapisywana w formacie V8U8 i umieszczana w slocie 0:
            KH
 (#+.'
 :%TGCVG6GZVWTG(TQO(KNG
OARFFGXKEG VGZDOR  OAR6GZVWTG
                TGVWTP 'A(#+.

            OARFFGXKEG 5GV6GZVWTG
 OAR6GZVWTG

            KH
 (#+.'
 .QCF$WOR6GZVWTG(TQO(KNG
 VGZDOR  OAR6GZVWTG$WOR
                TGVWTP 'A(#+.

            OARFFGXKEG 5GV6GZVWTG
 OAR6GZVWTG$WOR

          Tak wygląda kod funkcji, za pomocą której zamienia się format bitmapy z A8R8G8B8
          na V8U8:
Rozdział 10.   Tekstury         111


*4'57.6 %/[#RR.QCF$WOR6GZVWTG(TQO(KNG
6%*#4
UVT6GZVWTG.2+4'%66':674'

More Related Content

What's hot

DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistym
Wydawnictwo Helion
 
Java. Tworzenie gier
Java. Tworzenie gierJava. Tworzenie gier
Java. Tworzenie gier
Wydawnictwo Helion
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
Wydawnictwo Helion
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
Wydawnictwo Helion
 
3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
Wydawnictwo Helion
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
Wydawnictwo Helion
 
Flash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowaneFlash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowane
Wydawnictwo Helion
 
OpenGL. Księga eksperta. Wydanie III
OpenGL. Księga eksperta. Wydanie IIIOpenGL. Księga eksperta. Wydanie III
OpenGL. Księga eksperta. Wydanie III
Wydawnictwo Helion
 
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznikAdobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Wydawnictwo Helion
 
GIMP. Praktyczne projekty
GIMP. Praktyczne projektyGIMP. Praktyczne projekty
GIMP. Praktyczne projekty
Wydawnictwo Helion
 
Photoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. BibliaPhotoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. Biblia
Wydawnictwo Helion
 
C++. Sztuka programowania
C++. Sztuka programowaniaC++. Sztuka programowania
C++. Sztuka programowania
Wydawnictwo Helion
 
Modelowanie 3 d w programie autocad zbigniew krzysiak wnit
Modelowanie 3 d w programie autocad   zbigniew krzysiak wnitModelowanie 3 d w programie autocad   zbigniew krzysiak wnit
Modelowanie 3 d w programie autocad zbigniew krzysiak wnitWKL49
 
Lekcje Matematyki Z Kalkulatorem Graficznym
Lekcje Matematyki Z Kalkulatorem GraficznymLekcje Matematyki Z Kalkulatorem Graficznym
Lekcje Matematyki Z Kalkulatorem Graficznymguest51f3e84
 
Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Wydawnictwo Helion
 
Po prostu 3ds max 5
Po prostu 3ds max 5Po prostu 3ds max 5
Po prostu 3ds max 5
Wydawnictwo Helion
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wydawnictwo Helion
 
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatceFlash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Wydawnictwo Helion
 
C++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputeroweC++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputerowe
Wydawnictwo Helion
 
Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polska
Wydawnictwo Helion
 

What's hot (20)

DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistym
 
Java. Tworzenie gier
Java. Tworzenie gierJava. Tworzenie gier
Java. Tworzenie gier
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
 
3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
 
Flash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowaneFlash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowane
 
OpenGL. Księga eksperta. Wydanie III
OpenGL. Księga eksperta. Wydanie IIIOpenGL. Księga eksperta. Wydanie III
OpenGL. Księga eksperta. Wydanie III
 
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznikAdobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
 
GIMP. Praktyczne projekty
GIMP. Praktyczne projektyGIMP. Praktyczne projekty
GIMP. Praktyczne projekty
 
Photoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. BibliaPhotoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. Biblia
 
C++. Sztuka programowania
C++. Sztuka programowaniaC++. Sztuka programowania
C++. Sztuka programowania
 
Modelowanie 3 d w programie autocad zbigniew krzysiak wnit
Modelowanie 3 d w programie autocad   zbigniew krzysiak wnitModelowanie 3 d w programie autocad   zbigniew krzysiak wnit
Modelowanie 3 d w programie autocad zbigniew krzysiak wnit
 
Lekcje Matematyki Z Kalkulatorem Graficznym
Lekcje Matematyki Z Kalkulatorem GraficznymLekcje Matematyki Z Kalkulatorem Graficznym
Lekcje Matematyki Z Kalkulatorem Graficznym
 
Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2
 
Po prostu 3ds max 5
Po prostu 3ds max 5Po prostu 3ds max 5
Po prostu 3ds max 5
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
 
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatceFlash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
 
C++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputeroweC++ Builder. Symulacje komputerowe
C++ Builder. Symulacje komputerowe
 
Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polska
 

Viewers also liked

Rewitalizacja vs recykling (Krzysztof Kalitko)
Rewitalizacja vs recykling (Krzysztof Kalitko)Rewitalizacja vs recykling (Krzysztof Kalitko)
Rewitalizacja vs recykling (Krzysztof Kalitko)
Fundacja Aeris Futuro
 
Hupp 11
Hupp 11Hupp 11
Hupp 11
p_andora
 
Praktyczny pomocnik-procesowy
Praktyczny pomocnik-procesowyPraktyczny pomocnik-procesowy
Praktyczny pomocnik-procesowyPrzemysław Wolny
 
Obywatel w post-cywilnym-calosc (1)
Obywatel w post-cywilnym-calosc (1)Obywatel w post-cywilnym-calosc (1)
Obywatel w post-cywilnym-calosc (1)
Dawid Bodziony
 
Rodzaje i zadania sieci wodociągowych
Rodzaje i zadania sieci wodociągowychRodzaje i zadania sieci wodociągowych
Rodzaje i zadania sieci wodociągowych
Szymon Konkol - Publikacje Cyfrowe
 
Testing Standards List
Testing Standards ListTesting Standards List
Testing Standards List
Professional Testing
 
Encuesta sobre consumo de sustancias
Encuesta sobre consumo de sustanciasEncuesta sobre consumo de sustancias
Encuesta sobre consumo de sustancias
Juan Luis Hueso
 
5. urządzenia przeciwpożarowe
5. urządzenia przeciwpożarowe5. urządzenia przeciwpożarowe
5. urządzenia przeciwpożaroweAktywBHP
 

Viewers also liked (10)

K. makuch informatyzacja ochrony zdrowia w perspektywie do roku 2020
K. makuch informatyzacja ochrony zdrowia w perspektywie do roku 2020K. makuch informatyzacja ochrony zdrowia w perspektywie do roku 2020
K. makuch informatyzacja ochrony zdrowia w perspektywie do roku 2020
 
Rewitalizacja vs recykling (Krzysztof Kalitko)
Rewitalizacja vs recykling (Krzysztof Kalitko)Rewitalizacja vs recykling (Krzysztof Kalitko)
Rewitalizacja vs recykling (Krzysztof Kalitko)
 
Hupp 11
Hupp 11Hupp 11
Hupp 11
 
Praktyczny pomocnik-procesowy
Praktyczny pomocnik-procesowyPraktyczny pomocnik-procesowy
Praktyczny pomocnik-procesowy
 
Obywatel w post-cywilnym-calosc (1)
Obywatel w post-cywilnym-calosc (1)Obywatel w post-cywilnym-calosc (1)
Obywatel w post-cywilnym-calosc (1)
 
Rodzaje i zadania sieci wodociągowych
Rodzaje i zadania sieci wodociągowychRodzaje i zadania sieci wodociągowych
Rodzaje i zadania sieci wodociągowych
 
Testing Standards List
Testing Standards ListTesting Standards List
Testing Standards List
 
Prezentacja BHP2
Prezentacja BHP2Prezentacja BHP2
Prezentacja BHP2
 
Encuesta sobre consumo de sustancias
Encuesta sobre consumo de sustanciasEncuesta sobre consumo de sustancias
Encuesta sobre consumo de sustancias
 
5. urządzenia przeciwpożarowe
5. urządzenia przeciwpożarowe5. urządzenia przeciwpożarowe
5. urządzenia przeciwpożarowe
 

Similar to Aplikacje Direct3D

ABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie IIABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie II
Wydawnictwo Helion
 
OpenGL. Programowanie gier
OpenGL. Programowanie gierOpenGL. Programowanie gier
OpenGL. Programowanie gier
Wydawnictwo Helion
 
AutoCAD 2004
AutoCAD 2004AutoCAD 2004
AutoCAD 2004
Wydawnictwo Helion
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Wydawnictwo Helion
 
AutoCAD 2005
AutoCAD 2005AutoCAD 2005
AutoCAD 2005
Wydawnictwo Helion
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
Wydawnictwo Helion
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
Wydawnictwo Helion
 
Visual C# .NET. Encyklopedia
Visual C# .NET. EncyklopediaVisual C# .NET. Encyklopedia
Visual C# .NET. Encyklopedia
Wydawnictwo Helion
 
AutoCAD 2004 PL
AutoCAD 2004 PLAutoCAD 2004 PL
AutoCAD 2004 PL
Wydawnictwo Helion
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice
Wydawnictwo Helion
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
Wydawnictwo Helion
 
ABC komputera. Wydanie V
ABC komputera. Wydanie VABC komputera. Wydanie V
ABC komputera. Wydanie V
Wydawnictwo Helion
 
CorelDraw X3 PL. Kurs
CorelDraw X3 PL. KursCorelDraw X3 PL. Kurs
CorelDraw X3 PL. Kurs
Wydawnictwo Helion
 
Solid Edge 17. Podstawy
Solid Edge 17. PodstawySolid Edge 17. Podstawy
Solid Edge 17. Podstawy
Wydawnictwo Helion
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
Wydawnictwo Helion
 
Adobe Illustrator CS2/CS2 PL. Oficjalny podręcznik
Adobe Illustrator CS2/CS2 PL. Oficjalny podręcznikAdobe Illustrator CS2/CS2 PL. Oficjalny podręcznik
Adobe Illustrator CS2/CS2 PL. Oficjalny podręcznik
Wydawnictwo Helion
 
C++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie IIC++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie II
Wydawnictwo Helion
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
Wydawnictwo Helion
 
C++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychC++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznych
Wydawnictwo Helion
 
J2ME. Praktyczne projekty
J2ME. Praktyczne projektyJ2ME. Praktyczne projekty
J2ME. Praktyczne projekty
Wydawnictwo Helion
 

Similar to Aplikacje Direct3D (20)

ABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie IIABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie II
 
OpenGL. Programowanie gier
OpenGL. Programowanie gierOpenGL. Programowanie gier
OpenGL. Programowanie gier
 
AutoCAD 2004
AutoCAD 2004AutoCAD 2004
AutoCAD 2004
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
 
AutoCAD 2005
AutoCAD 2005AutoCAD 2005
AutoCAD 2005
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
 
Visual C# .NET. Encyklopedia
Visual C# .NET. EncyklopediaVisual C# .NET. Encyklopedia
Visual C# .NET. Encyklopedia
 
AutoCAD 2004 PL
AutoCAD 2004 PLAutoCAD 2004 PL
AutoCAD 2004 PL
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
 
ABC komputera. Wydanie V
ABC komputera. Wydanie VABC komputera. Wydanie V
ABC komputera. Wydanie V
 
CorelDraw X3 PL. Kurs
CorelDraw X3 PL. KursCorelDraw X3 PL. Kurs
CorelDraw X3 PL. Kurs
 
Solid Edge 17. Podstawy
Solid Edge 17. PodstawySolid Edge 17. Podstawy
Solid Edge 17. Podstawy
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
 
Adobe Illustrator CS2/CS2 PL. Oficjalny podręcznik
Adobe Illustrator CS2/CS2 PL. Oficjalny podręcznikAdobe Illustrator CS2/CS2 PL. Oficjalny podręcznik
Adobe Illustrator CS2/CS2 PL. Oficjalny podręcznik
 
C++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie IIC++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie II
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
 
C++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychC++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznych
 
J2ME. Praktyczne projekty
J2ME. Praktyczne projektyJ2ME. Praktyczne projekty
J2ME. Praktyczne projekty
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
Wydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
Wydawnictwo Helion
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
Wydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Wydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Wydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Wydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Wydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
Wydawnictwo Helion
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
Wydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
Wydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
Wydawnictwo Helion
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
Wydawnictwo Helion
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
Wydawnictwo Helion
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
Wydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Aplikacje Direct3D

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Aplikacje Direct3D KATALOG KSI¥¯EK Autor: Robert Krupiñski KATALOG ONLINE ISBN: 83-7197-877-4 Format: B5, stron: 180 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA Dziêki Direct3D mo¿esz tworzyæ nowoczesne gry, symulacje czy programy multimedialne. Jest on podstawowym standardem programowania grafiki trójwymiarowej w systemach operacyjnych zgodnych z Windows. Akceleracja CENNIK I INFORMACJE sprzêtowa, oferowana przez wiêkszo æ wspó³czesnych kart graficznych oraz bogaty zbiór narzêdzi dostêpnych w wersji 8.1 umo¿liwia programowanie zaskakuj¹cej ZAMÓW INFORMACJE i efektownej grafiki 3D. Direct3D dostarcza programi cie gotowych interfejsów, O NOWO CIACH uwalniaj¹c go jednocze nie od konieczno ci zaznajamiania siê ze wewnêtrznymi funkcjami sprzêtu. ZAMÓW CENNIK Blisko 100 przyk³adowych projektów prezentuj¹cych wiele praktycznych zastosowañ Direct3D wprowadzi Ciê w wiat programowania grafiki 3D. W ksi¹¿ce omówiono m.in.: CZYTELNIA • Podstawy programowania w Direct3D FRAGMENTY KSI¥¯EK ONLINE • Bufory werteksów • Zarz¹dzanie z³o¿onymi obiektami (obiekt Mesh) • Przekszta³cenia przestrzeni • wiat³o i materia³, prze roczysto æ • Operowanie teksturami • Zarz¹dzanie obiektami le¿¹cymi na jednej p³aszczy nie • Pisanie kodu niezale¿nego od rodzaju karty graficznej Autor zak³ada, ¿e Czytelnik potrafi pos³ugiwaæ siê pakietem Visual C++ i posiada umiejêtno æ programowania w tym jêzyku, korzysta z klas MFC, a tak¿e jest zaznajomiony z pojêciami dotycz¹cymi grafiki komputerowej. Je li spe³niasz te warunki i chcesz kreowaæ w³asne, trójwymiarowe wiaty na ekranie komputera, z pewno ci¹ pomo¿e Ci w tym ta ksi¹¿ka. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wprowadzenie ..............................................................................................................7 Rozdział 1. Aplikacje bazowe ....................................................................................11 Szkielet podstawowy .............................................................................................................................11 Kreator DirectX AppWizard .................................................................................................................14 Rozdział 2. Bufory werteksów ...................................................................................17 Prymitywy .............................................................................................................................................17 FVF........................................................................................................................................................25 Bufory indeksów....................................................................................................................................30 Dynamiczna zmiana zawartości buforów..............................................................................................32 Łączenie buforów ..................................................................................................................................34 Rozdział 3. Obiekt Mesh ............................................................................................37 Obiekty podstawowe .............................................................................................................................37 Klasy pomocnicze..................................................................................................................................40 Teselacja ................................................................................................................................................41 Pliki .x....................................................................................................................................................44 Rozdział 4. Przekształcenia przestrzeni ...................................................................47 Okno widoku .........................................................................................................................................47 Macierz świata .......................................................................................................................................48 Macierz widoku .....................................................................................................................................50 Macierz rzutowania ...............................................................................................................................53 Kwaterniony ..........................................................................................................................................54 Rozdział 5. Światło i materiał ....................................................................................59 Ustawienia kolorów...............................................................................................................................59 Światło kierunkowe ...............................................................................................................................63 Światło punktowe ..................................................................................................................................64 Światło źródłowe ...................................................................................................................................65 Wiele źródeł światła ..............................................................................................................................66 Materiał..................................................................................................................................................68 Rozdział 6. Blending werteksów................................................................................71 Tweening ...............................................................................................................................................71 Macierze deformujące ...........................................................................................................................76
  • 3. 4 Aplikacje Direct3D Rozdział 7. Alpha Blending .......................................................................................83 Rozdział 8. Bufor szablonu ........................................................................................89 Rozdział 9. Tekst.........................................................................................................93 Rozdział 10. Tekstury.................................................................................................97 Tekstury płaskie.....................................................................................................................................97 Tekstury otoczenia...............................................................................................................................100 Dwa etapy łączenia tekstur ..................................................................................................................106 Tekstura wichrująca i tekstura obiektu ................................................................................................109 Tekstura wichrująca i tekstura otoczenia.............................................................................................114 Tekstura obiektu, wichrująca i otoczenia ............................................................................................116 Tekstury przestrzenne..........................................................................................................................117 Dot3 .....................................................................................................................................................119 Mapy wektorów normalnych i wektorów wichrujących .....................................................................122 Rozdział 11. Potoki ...................................................................................................125 VertexShader .......................................................................................................................................125 PixelShader..........................................................................................................................................136 Program uruchomieniowy ...................................................................................................................141 Rozdział 12. Z-bufor.................................................................................................143 Rozdział 13. Efekty...................................................................................................145 Rozdział 14. Płaszczyzny tnące................................................................................153 Rozdział 15. Mgła .....................................................................................................155 Rozdział 16. Sprajty .................................................................................................159 Rozdział 17. Punkty..................................................................................................163 Rozdział 18. Wygaszacz ekranu ..............................................................................167 Rozdział 19. Interakcja ............................................................................................171 Zawartość CD-ROM-u.............................................................................................177 Skorowidz..................................................................................................................181
  • 4. Rozdział 10. Tekstury Tekstury zwiększają realizm renderowanych scen, nadają im specyficzny charakter. Je- śli zachowamy ustawienia konfiguracyjne sceny, a zmienimy teksturę, to mo emy uzy- skać ciekawy efekt, np. sceneria zmieni się z polarnej w pustynną. Dynamiczne zmie- nianie tekstur, ró ne sposoby ich łączenia, wyświetlanie kolejnych klatek tekstur na powierzchni obiektów, a nawet zaburzania współrzędnych tekstur — to zabiegi, które pozwalają wprowadzać coraz to nowe rozwiązania, efekty. W przykładach przedstawimy ró ne rodzaje tekstur obsługiwanych przez DirectX oraz sposób ich stosowania. Tekstury płaskie Definicje struktur FVF dla obiektów zawierających teksturę zostały omówione w rozdziale „Bufory werteksów” na przykładzie projektu z katalogu PrimitivesFVFPositionTexCoord. Teraz poka emy, w jaki sposób przygotować teksturę do wyświetlenia. W deklaracji klasy %/[#RR podajemy wskaźnik do interfejsu obsługującego teksturę: RTKXCVG .2+4'%66':674' OAR6GZVWTG W konstruktorze inicjalizujemy to pole wartością 07... Teksturę mo na załadować z pliku na kilka sposobów. My przedstawimy dwa z nich: KH (#+.' :%TGCVG6GZVWTG(TQO(KNG OARFFGXKEG VGZDOR OAR6GZVWTG TGVWTP 'A(#+. KH (#+.' 7VKNA%TGCVG6GZVWTG OARFFGXKEG VGZDOR OAR6GZVWTG TGVWTP 'A(#+. W slocie 0 ustawiamy teksturę jako aktywną, wykorzystywaną do renderingu: OARFFGXKEG 5GV6GZVWTG OAR6GZVWTG Obiekty, które posiadają współrzędne u i v, będą wykorzystywały tę teksturę. Na koniec nale y pamiętać o zwolnieniu zasobów tekstury: 5#('A4'.'#5' OAR6GZVWTG
  • 5. 98 Aplikacje Direct3D Kolejnym krokiem będzie dynamiczna zmiana współrzędnych u i v tekstury. Projekt z kata- logu TextureTexRotate (rysunki 10.1a i 10.1b) implementuje obrót współrzędnych tekstury wokół osi Z: :/#64+: OCV :/CVTKZ4QVCVKQP OCVUKPH OAH6KOG Rysunek 10.1a. Obrót współrzędnych tekstury wokół osi Z Rysunek 10.1b. Obrót współrzędnych tekstury wokół osi Z Macierz obrotu wokół osi Z jest umieszczana w zmiennej OCV. Macierz obrotów wykorzystujemy do zmiany współrzędnych tekstury. W metodzie (TCOG /QXG blokujemy bufory werteksów i uaktualniamy pozycje u i v tekstury: :8'%614 X '(8'46':
  • 7. Rozdział 10. Tekstury 99 KH 57%%''' OAR8$ .QEM
  • 9.
  • 10. R8GTVKEGU ] R8GTVKEGU=?WX
  • 11. :8GE6TCPUHQTO%QQTF X OAX OCV R8GTVKEGU=?WX
  • 12. :8GE6TCPUHQTO%QQTF X OAX OCV R8GTVKEGU=?WX
  • 13. :8GE6TCPUHQTO%QQTF X OAX OCV R8GTVKEGU=?WX
  • 14. :8GE6TCPUHQTO%QQTF X OAX OCV _ OAR8$ 7PNQEM Funkcja :8GE6TCPUHQTO%QQTF przekształca wektor dwuelementowy, określony w dru- gim argumencie, przez macierz OCV. W przykładzie z katalogu TextureTexTranslate wykorzystaliśmy inną macierz prze- kształcenia współrzędnych. Jest to macierz translacji: :/CVTKZ6TCPUNCVKQP OCVH
  • 18. OAH6KOGH Rysunki 10.2a i 10.2b przedstawiają teksturę przemieszczaną na powierzchni obiektu. Rysunek 10.2a. Przemieszczanie tekstury na powierzchni obiektu W projekcie TextureTexAnim wykorzystaliśmy sekwencyjną zmianę tekstury. Kolejna tekstura jest wyświetlana z częstością trzydziestu klatek na sekundę, co sprawia wra enie animacji tekstury na powierzchni obiektu. Dodatkowo tekstura jest przemieszczana. De- finiujemy tablicę tekstur: RTKXCVG .2+4'%66':674' OAR6GZVWTGU=07/A6':674'5? W tablicy tej będą przechowywane kolejne klatki tekstury. Inicjalizujemy wartością 07.. wszystkie tekstury: HQT KPV KK07/A6':674'5K OAR6GZVWTGU=K?07..
  • 19. 100 Aplikacje Direct3D Rysunek 10.2b. Przemieszczanie tekstury na powierzchni obiektu Pamiętamy o zwolnieniu zasobów zajmowanych przez tekstury: HQT KPV KK07/A6':674'5K 5#('A4'.'#5' OAR6GZVWTGU=K? Ładujemy wszystkie tekstury z plików do tablicy: KH (#+.' :%TGCVG6GZVWTG(TQO(KNG OARFFGXKEG VGZDOR OAR6GZVWTGU=? TGVWTP 'A(#+. KH (#+.' :%TGCVG6GZVWTG(TQO(KNG OARFFGXKEG VGZDOR OAR6GZVWTGU=? TGVWTP 'A(#+. Zanim rozpoczniemy renderowanie, wybieramy teksturę, która ma być wykorzystana i umieszczamy ją w slocie 0: OARFFGXKEG 5GV6GZVWTG OAR6GZVWTGU=OAP#EVKXG6GZVWTG? Rysunek 10.3a przedstawia sekwencję animacji, którą uzyskaliśmy. Rysunek 10.3b poka- zuje pierwszą bitmapę, a rysunek 10.3c — piątą z sekwencji dziesięciu klatek. W analizowanych przykładach tekstury zostały umieszczone na czworokątach, lecz nic nie stoi na przeszkodzie, by animować tekstury na powierzchni zło onych obiektów trójwymiarowych. Tekstury otoczenia Współrzędne tekstury mogą być wygenerowane automatycznie, nie jest konieczne po- dawanie ich wartości w strukturach werteksów. Powstaje wtedy efekt odbijania się tek- stury na obiekcie, nazywany mapowaniem otoczenia (Environment Mapping). W podanych przykładach poka emy sposób wykorzystania mapowania.
  • 20. Rozdział 10. Tekstury 101 Rysunek 10.3a. Wynik wyświetlania sekwencji tekstur na powierzchni obiektu Rysunek 10.3b. Pierwsza klatka animowanej tekstury Rysunek 10.3c. Piąta klatka animowanej tekstury Przykład (z katalogu TextureEnvMapping1) mapowania otoczenia został przedstawio- ny na rysunku 10.4a. Teksturę otoczenia pokazuje rysunek 10.4b. Aby otrzymać taki efekt, nale y wprowadzić w kodzie: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': 655A6%+A%#/'4#52#%'014/#. Flaga 655A6':%114+0': informuje urządzenie o sposobie generowania współrzęd- nych tekstury (wybrane 655A6%+A%#/'4#52#%'014/#.), zaś flaga 655A6':674' 64#05(14/(.#)5 informuje o liczbie współrzędnych tekstury, przekazywanych do urządze- nia renderującego. W tym przypadku są to dwie współrzędne u i v (66((A%1706). Usta- wienia te wykonano dla poziomu 0 (pierwszy argument powy szych funkcji). Dodatkowo ustawiamy macierz przekształcenia współrzędnych tekstury:
  • 21. 102 Aplikacje Direct3D Rysunek 10.4a. Tekstura powstała w wyniku mapowania otoczenia (generowanie współrzędnych tekstury — flaga D3DTSS_TCI_ CAMERASPACENORMAL). Do urządzenia przekazywane są dwie współrzędne tekstury Rysunek 10.4b. Tekstura otoczenia :/#64+: OCV OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OCVA H OARFFGXKEG 5GV6TCPUHQTO 65A6':674' OCV Zmieniając dynamicznie wartości tej macierzy, mo na tak e uzyskać efekt przemieszcza- nia się tekstury na powierzchni obiektu (np. odbijanie się otoczenia w szybie poruszającego się samochodu). Flaga 65A6':674' oznacza, e ustawiana jest macierz przekształ- cająca teksturę dla poziomu 0.
  • 22. Rozdział 10. Tekstury 103 Do urządzenia mo na przekazać trzy współrzędne, wartość dwóch pierwszych zostanie obliczona przez podzielenie ich przez wartość trzeciej współrzędnej. W efekcie końco- wym uzyskamy tylko dwie współrzędne do pobierania koloru z tekstury dwuwymiaro- wej. W tym przypadku ustawienia wyglądają tak: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706 ^66((A241,'%6' Jest to jedyna ró nica w porównaniu do poprzedniego projektu. Efekt tego typu mapo- wania przedstawia rysunek 10.5a (projekt z katalogu TextureEnvMapping1p). Na ry- sunku 10.5b przedstawiono teksturę otoczenia. Mapowanie, w którym zastosowano flagi 66((A241,'%6', pomaga wyeliminować błędy, jakie powstają na powierzchni obiektów w kierunku osi Z (tekstura nie jest nało ona, lecz rozciągnięta). Rysunek 10.5a. Mapowanie tekstury otoczenia na obiekt (generowanie współrzędnych tekstury — flaga D3DTSS_TCI_ CAMERASPACENORMAL). Do urządzenia przekazywane są trzy współrzędne tekstury Rysunek 10.5b. Tekstura otoczenia
  • 23. 104 Aplikacje Direct3D Jeśli zastosujemy flagę 655A6%+A%#/'4#52#%'215+6+10, to otrzymamy inny tryb gene- rowania współrzędnych tekstury. Ustawiamy wtedy: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': 655A6%+A%#/'4#52#%'215+6+10 W tym przypadku będą równie wykorzystane tylko dwie współrzędne tekstury. Wynik ma- powania oraz teksturę otoczenia przedstawiają kolejno rysunek 10.6a i b (projekt z ka- talogu TextureEnvMapping2). Rysunek 10.6a. Mapowanie tekstury otoczenia na obiekt (generowanie współrzędnych tekstury — flaga D3DTSS_TCI_ CAMERASPACEPOSITION). Do urządzenia przekazywane są dwie współrzędne tekstury Rysunek 10.6a. Tekstura otoczenia Ten sam zabieg mapowania, ale dla flagi 66((A241,'%6' przedstawia rysunek 10.7 (projekt z katalogu TextureEnvMapping2p). Tryb generowania współrzędnych tekstury 655A6%+A%#/'4#52#%'4'(.'%6+108'%614 sto- sujemy w przypadku tekstur typu sześciennego. Ustawienia są wtedy następujące: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': 655A6%+A %#/'4#52#%'4'(.'%6+108'%614
  • 24. Rozdział 10. Tekstury 105 Rysunek 10.7. Mapowanie tekstury otoczenia na obiekt (generowanie współrzędnych tekstury — flaga D3DTSS_TCI_ CAMERASPACEPOSITION). Do urządzenia przekazywane są trzy współrzędne tekstury W tym przypadku generowane są trzy współrzędne, które są przekazywane do urządzenia w celu indeksowania tekstury. Sposób generowania wektora odbicia, który właśnie słu y do indeksowanie tekstury, mo e być modyfikowany za pomocą flagi 45A.1%#.8+'9'4, która przyjmuje wartości typu $11.. Projekt (TextureEnvMapCube) przedstawia zastosowanie mapowania sześciennego. Tekstura ma postać sześcianu, na którego ka dą ścianę mo na nało yć inną płaską tek- sturę otoczenia. Definiujemy teksturę sześcienną: RTKXCVG .2+4'%6%7$'6':674' OAR6GZVWTG%WDG Inicjalizujemy ją wartością 07.. w konstruktorze: OAR6GZVWTG%WDG07.. Ładujemy z pliku .dds przygotowaną wcześniej teksturę sześcienną: KH (#+.' :%TGCVG%WDG6GZVWTG(TQO(KNG OARFFGXKEG VGZFFU OAR6GZVWTG%WDG TGVWTP 'A(#+. Tekstura została tak przygotowana, aby ka da ściana była innego koloru. Efekt nało enia jej na obiekt jest więc widoczny (rysunek 10.8). Tekstury .dds mo na wykonać w programie DxTex.exe z pakietu SDK 8.1. Ustawiamy tę teksturę jako aktywną w slocie 0: OARFFGXKEG 5GV6GZVWTG OAR6GZVWTG%WDG I dopiero teraz mo na wykonać rendering obiektu. Na koniec nale y zwolnić zasoby tekstury. 5#('A4'.'#5' OAR6GZVWTG%WDG
  • 25. 106 Aplikacje Direct3D Rysunek 10.8. Mapowanie tekstury otoczenia na obiekt (generowanie współrzędnych tekstury — flaga D3DTSS_TCI_ CAMERASPACERE- FLECTIONVECTOR). Do urządzenia przekazywane są trzy współrzędne tekstury Przed rozpoczęciem działania aplikacja musi się upewnić, czy urządzenie obsługuje ten rodzaj tekstur: KH R%CRU 6GZVWTG%CRU 26':674'%#25A%7$'/#2 TGVWTP 'A(#+. W bardziej skomplikowanym przykładzie mo na na teksturę otoczenia renderować obiekty zdefiniowanej sceny, a następnie wykorzystać tak przygotowaną teksturę do rysowania obiektów zapisywanych w buforze obrazu. Otrzymamy efekt wzajemnego odbijania się obiektów na swoich powierzchniach. Dwa etapy łączenia tekstur Jeden werteks mo e posiadać informacje o współrzędnych dla ośmiu tekstur. W tym pod- rozdziale przedstawimy sposób łączenia tekstur w dwóch etapach (dla dwóch tekstur). Ka dy werteks będzie zawierał współrzędne dla dwóch tekstur WX i WX: UVTWEV '(8'46': ] (.1#6 Z [ :8'%614 WX :8'%614 WX _ Definicja FVF dla takiej struktury przybiera postać: FGHKPG (8(A'(8'46': (8(A:;^(8(A6':^(8(A6':%1145+' ^ (8(A 6':%1145+' Makro (8(A6':%1145+' Z oznacza, e tekstura o indeksie x ma dwa parametry u i v. Tekstury ładujemy z plików i ustawiamy w odpowiednich slotach 0 i 1: OARFFGXKEG 5GV6GZVWTG OAR6GZVWTGU=OAP#EVKXG6GZVWTG? OARFFGXKEG 5GV6GZVWTG OAR6GZVWTG
  • 26. Rozdział 10. Tekstury 107 Tekstura w slocie zerowym będzie się zmieniała, dlatego wybieramy z tablicy jedną z tek- stur (będą wyświetlane sekwencyjnie — animacja). Teraz wprowadzamy informacje na temat tego, co będzie się działo z teksturą w danym slocie. Dla etapu 0: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 612A5'.'%6#4) OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A+((75' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A+5#$.' Flaga 655A6':%114+0': ustawia indeks informujący, które współrzędne tekstury są przeznaczone dla tej tekstury w strukturze werteksa (indeks 0 to WX). Flaga 655A%1.1412 oznacza rodzaj operacji dla kolorów rgb, a flaga 655A#.2*#12 — operację dla kanału alfa. Flagi 655A%1.14#4) i 655A%1.14#4) oznaczają odpowiednio argumenty dla określonej operacji rgb. Operacja 612A5'.'%6#4) to wybór argumentu pierwszego 6#A6':674', który oznacza teksturę. Argument drugi 6#A+((75', oznaczający ko- lor, jest ignorowany. Dla kanału alfa operacja jest wyłączona 612A+5#$.'. Wynikowe wartości są przekazywane do kolejnego slotu. W drugim etapie jako pierwszy argument wybieramy teksturę ze slotu 1 (6#A6':674') oraz jako drugi argument wynik poprzedniej operacji (6#A%744'06) ze slotu 0: 6':674'12 OAG6GZ1R OAG6GZ1R612A/17.#6' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 OAG6GZ1R OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A%744'06 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A+5#$.' Parametr wyliczeniowy OAG6GZ1R jest jedną z dostępnych operacji łączenia tekstur: Operacja Testowana flaga D3DTEXOPCAPS Opis 612A+5#$.' 6':12%#25A+5#$.' wyłączenie 612A5'.'%6#4) 6':12%#25A5'.'%6#4) wybór pierwszego argumentu 612A5'.'%6#4) 6':12%#25A5'.'%6#4) wybór drugiego argumentu 612A/17.#6' 6':12%#25A/17.#6' Arg1 ⋅ Arg 2 612A/17.#6': 6':12%#25A/17.#6': ( Arg1 ⋅ Arg2 ) ⋅ 2 612A/17.#6': 6':12%#25A/17.#6': ( Arg1 ⋅ Arg2 ) ⋅ 4 612A# 6':12%#25A# Arg1 + Arg 2 612A#5+)0' 6':12%#25A#5+)0' Arg1 + Arg 2 − 0.5 612A#5+)0': 6':12%#25A#5+)0': ( Arg1 + Arg 2 − 0.5) ⋅ 2 612A57$64#%6 6':12%#25A57$64#%6 Arg1 − Arg 2 612A#5/116* 6':12%#25A#5/116* Arg1 + Arg 2 ⋅ (1 − Arg1 )
  • 27. 108 Aplikacje Direct3D Typ wyliczeniowy 6':674'12 obejmuje znacznie większą liczbę operacji. W tabeli zo- stały podane tylko te, które zostały wykorzystane w opisywanej implementacji. W trzecim etapie nie będziemy wykonywali adnych operacji, więc wywołujemy funkcje: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 612A+5#$.' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A+5#$.' Sprawdzamy, czy urządzenie wykonuje określoną operację: KH OAFF%CRU6GZVWTG1R%CRU 6':12%#25A/17.#6': R$ 'PCDNG9KPFQY 647' GNUG R$ 'PCDNG9KPFQY (#.5' Nale y tak e sprawdzić, czy są dostępne dwa sloty: KH R%CRU /CZ6GZVWTG$NGPF5VCIGU D%CRU#EEGRVCDNG(#.5' Przykład z katalogu TextureTexOp to aplikacja MFC, która pozwala przetestować wy- brane sposoby łączenia tekstur (rysunek 10.9a). Rysunek 10.9b pokazuje pierwszą tek- sturę z sekwencji dziesięciu tekstur, a rysunek 10.9c — piątą. Rysunek 10.9a. Aplikacja MFC — różne sposoby łączenia tekstur Rysunek 10.9b. Pierwsza klatka animowanej tekstury
  • 28. Rozdział 10. Tekstury 109 Rysunek 10.9c. Piąta klatka animowanej tekstury Ró ne tekstury mo na wykorzystać do symulowania oświetlania obiektów światłem mo- nochromatycznym lub wielobarwnym. Tekstura wichrująca i tekstura obiektu W tym podrozdziale przedstawimy zastosowanie tekstury wichrującej w slocie 0 oraz tek- stury obiektu w slocie 1. Tekstura wichrująca (Bump Texture) imituje nierówności po- wierzchni obiektów. W zale ności od formatu tekstura wichrująca mo e nie tylko mo- dyfikować współrzędne tekstury obiektu, ale i regulować jasność pikseli. Przykład z katalogu TextureTexBumpTranslate pokazuje, jak oddziałuje tekstura wi- chrująca na teksturę obiektu (rysunek 10.10a). Dla porównania tekstura obiektu została przedstawiona na rysunku 10.10b. Na statycznych obrazach widać wyraźnie efekt, kiedy obserwuje się wie ę i dach (na lewo od wie y). Podczas dynamicznego działania progra- mu jest to łatwiejsze do zauwa enia. Rysunek 10.10a. Tekstura obiektu modyfikowana przez teksturę wichrującą Tekstura wichrująca jest przemieszczana w poziomie, co daje efekt falowania powierzchni obiektu. Oto operacje, które nale y wykonać, jeśli chcemy zastosować teksturę wichrującą.
  • 29. 110 Aplikacje Direct3D Rysunek 10.10b. Tekstura obiektu Najpierw sprawdzamy, czy urządzenie obsługuje BumpMapping za pomocą flagi 6':12%#25A$7/2'08/#2 oraz czy obsługuje określony format tekstury wichrującej (/6A87: KH R%CRU 6GZVWTG1R%CRU 6':12%#25A$7/2'08/#2 TGVWTP 'A(#+. KH (#+.' OAR %JGEMGXKEG(QTOCV R%CRU #FCRVGT1TFKPCN R%CRU GXKEG6[RG (QTOCV 46;2'A6':674'(/6A87 TGVWTP 'A(#+. Ładujemy teksturę obiektu i umieszczamy ją w slocie 1. Załadowana tekstura wichrująca jest przekształcana, zapisywana w formacie V8U8 i umieszczana w slocie 0: KH (#+.' :%TGCVG6GZVWTG(TQO(KNG OARFFGXKEG VGZDOR OAR6GZVWTG TGVWTP 'A(#+. OARFFGXKEG 5GV6GZVWTG OAR6GZVWTG KH (#+.' .QCF$WOR6GZVWTG(TQO(KNG VGZDOR OAR6GZVWTG$WOR TGVWTP 'A(#+. OARFFGXKEG 5GV6GZVWTG OAR6GZVWTG$WOR Tak wygląda kod funkcji, za pomocą której zamienia się format bitmapy z A8R8G8B8 na V8U8:
  • 30. Rozdział 10. Tekstury 111 *4'57.6 %/[#RR.QCF$WOR6GZVWTG(TQO(KNG 6%*#4
  • 32. RR6GZVWTG ] .2+4'%66':674' R6GZVWTG KH (#+.' :%TGCVG6GZVWTG(TQO(KNG OARFFGXKEG UVT6GZVWTG R6GZVWTG ] 5#('A4'.'#5' R6GZVWTG TGVWTP 'A(#+. _ 574(#%'A'5% RGUE KH (#+.' R6GZVWTG )GV.GXGNGUE RGUE ] 5#('A4'.'#5' R6GZVWTG TGVWTP 'A(#+. _ KH (#+.' OARFFGXKEG %TGCVG6GZVWTG RGUE9KFVJ RGUE*GKIJV (/6A87 211.A/#0#)' RR6GZVWTG ] 5#('A4'.'#5' R6GZVWTG TGVWTP 'A(#+. _ .1%-'A4'%6 NQEMTGEV R6GZVWTG .QEM4GEV NQEMTGEV 914 FY5TE2KVEJ 914NQEMTGEV2KVEJ $;6'
  • 35. RR6GZVWTG .QEM4GEV NQEMTGEV 914 FYGUV2KVEJ 914NQEMTGEV2KVEJ $;6'
  • 37. NQEMTGEVR$KVU HQT 914 [ [RGUE*GKIJV [ ] HQT 914 Z ZRGUE9KFVJ Z ]
  • 39. Z
  • 41. Z XI
  • 43. Z
  • 45. Z WT _ RGUV$KVU FYGUV2KVEJ R5TE$KVU FY5TE2KVEJ _ R6GZVWTG 7PNQEM4GEV
  • 46. RR6GZVWTG 7PNQEM4GEV 5#('A4'.'#5' R6GZVWTG TGVWTP 5A1- _
  • 47. 112 Aplikacje Direct3D Bajty odpowiadające kolorom są umieszczane w pamięci w następującej kolejności: B, G, R, A, B1, G1, R1, A1, B2, G2, R2, A2... Podobnie umieszczane są bajty odpowiadające parametrom wichrującym: dU, dV, dU1, dV1, dU2, dV2...Wartości dU i dV z przedziału 〈−128,127〉 odpowiadają parametrom wichrującym z przedziału od –1 do 1. Parametr dU odnosi się do kierunku X, zaś parametr dV do kierunku Y. Funkcja )GV.GXGNGUE zwraca w strukturze 574(#%'A'5% parametry tekstury wejściowej. Wykorzystujemy wysokość i szerokość tekstury załadowanej z pliku do utworzenia tekstury o tych samych wymiarach (%TGCVG6GZVWTG). Obydwie tekstury blokujemy funkcją .QEM4GEV, aby mo na było prze- pisać dane. Odpowiednio przepisujemy kolor czerwony do dU i kolor zielony do dV. Po zakończeniu operacji blokady są zwalniane (7PNQEM4GEV). Ustawiamy parametry macierzy 2×2 przekształcającej wartości dU i dV: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A$7/2'08/#6 (.1#6VQ9 H OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A$7/2'08/#6 (.1#6VQ9 H OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A$7/2'08/#6 (.1#6VQ9 H OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A$7/2'08/#6 (.1#6VQ9 H Nowe współrzędne tekstury obliczane są według wzorów: dU ′ = dU ⋅ M 00 + dV ⋅ M 10 dV ′ = dU ⋅ M 01 + dV ⋅ M 11 gdzie M00, M01, M10, M11 są parametrami ustawionej poprzednio macierzy 2×2. Stosujemy operacje tekstury wichrującej dla slotu 0: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 612A$7/2'08/#2 Na koniec mo na wykonać rendering. Rysunek 10.11 przedstawia teksturę wichrującą zastosowaną w przykładzie. Rysunek 10.11. Przykładowa tekstura wichrująca (format V8U8) Przykład z katalogu TextureTexBumpLTranslate dotyczy sposobu wykorzystania tek- stury wichrującej z luminancją o formacie L6V5U5 (rysunek 10.12). Sprawdzamy, czy urządzenie obsługuje BumpMapping z luminancją (flaga 612A $7/2'08/#2.7/+0#0%') oraz czy obsługuje określony format tekstury wichrującej (/6A .87:
  • 48. Rozdział 10. Tekstury 113 Rysunek 10.12. Zastosowanie tekstury wichrującej z luminancją KH R%CRU 6GZVWTG1R%CRU 612A$7/2'08/#2.7/+0#0%' TGVWTP 'A(#+. KH (#+.' OAR %JGEMGXKEG(QTOCV R%CRU #FCRVGT1TFKPCN R%CRU GXKEG6[RG (QTOCV 46;2'A6':674'(/6A.87 TGVWTP 'A(#+. Dane dla tekstury wichrującej ładujemy z pliku za pomocą przygotowanej wcześniej funkcji .QCF$WOR6GZVWTG(TQO(KNG. W kolorze czerwonym jest przechowywana wartość dU, w kolorze zielonym — dV, a w niebieskim — wartość luminancji. Dane te są zapisywane za pomocą 16 bitów, tak e 6 bitów jest przeznaczonych dla luminancji, 5 bitów — dla dU i 5 bitów — dla dV. Nale y pamiętać, e w komputerach PC bity są uło enie według zasady Little-Endian (tzn. młodszy bajt znajduje się przed starszym). Część kodu odpowiedzial- nego za pakowanie bitów w funkcji .QCF$WOR6GZVWTG(TQO(KNG wygląda w ten sposób: FGHKPG 2#%-$+65 NFXFW 914 N ZH^ FX ZH^ FW ZH FW
  • 50. Z T FX
  • 52. Z I NWOKP
  • 54. ZD
  • 55. 914
  • 57. Z2#%-$+65 NWOKPFXFW Pozostała część kodu funkcji .QCF$WOR6GZVWTG(TQO(KNG jest taka sama jak w funkcji oma- wianej przy okazji projektu TextureTexBumpTranslate. Wartości luminancji odpowiadają poziomom 0 – 255. Teksturę wichrującą z luminancją przedstawia rysunek 10.13. Zanim przeprowadzimy renderowanie obiektu, tekstura wichrująca z luminancją wymaga dwóch dodatkowych parametrów: współczynnika skalowania (flaga 655A$7/2'08.5%#.') i offsetu (flaga 655A$7/2'08.1((5'6) dla luminancji:
  • 58. 114 Aplikacje Direct3D Rysunek 10.13. Przykładowa tekstura wichrująca z luminancją (format L6V5U5) OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A$7/2'08.5%#.' (.1#6VQ9 H OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A$7/2'08.1((5'6 (.1#6VQ9 H Natę enie piksela w tym przypadku jest obliczane według wzoru: L′ = L ⋅ S L + OL gdzie: L’ — luminancja wyjściowa, L — luminancja pobrana z tekstury wichrującej, SL — współczynnik skalujący, OL — offset. W slocie 0 nale y jeszcze zaznaczyć, e wykorzystywana jest tekstura z luminancją: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 612A$7/2'08/#2.7/+0#0%' i mo na wykonać rendering. Tekstura wichrująca i tekstura otoczenia Przykłady z poprzedniego podrozdziału zmodyfikujemy w ten sposób, e zamiast tek- stury obiektu będzie stosowana tekstura otoczenia. W slocie 0 pozostaje tekstura wi- chrująca, a w slocie 1 znajdzie się tekstura otoczenia. Nale y ustawić urządzenie, aby generowało automatycznie współrzędne dla tekstury o indeksie 1: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706^ 66((A241,'%6' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': 655A6%+A %#/'4#52#%'014/#. ^ Struktura FVF zawiera teraz tylko jedną parę współrzędnych (dla tekstury wichrującej). Przykład z katalogu TextureEnvMappingBump1p pokazuje wynik działania tekstury wi- chrującej i otoczenia (rysunek 10.14).
  • 59. Rozdział 10. Tekstury 115 Rysunek 10.14. Połączenie tekstury wichrującej i tekstury otoczenia (generowanie współrzędnych tekstury otoczenia — flaga D3DTSS_TCI_CAMERAS PACENORMAL). Do urządzenia przekazywane są trzy współrzędne tekstury otoczenia Przykład z katalogu TextureEnvMappingBump2 dotyczy następujących parametrów tek- stury otoczenia (rysunek 10.15): OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': 655A6%+A%#/'4#52#%'215+6+10 ^ Rysunek 10.15. Połączenie tekstury wichrującej i tekstury otoczenia (generowanie współrzędnych tekstury otoczenia — flaga D3DTSS_TCI_CAMERAS PACEPOSITION). Do urządzenia przekazywane są dwie współrzędne tekstury otoczenia zaś przykład z katalogu TextureEnvMappingBump2p dotyczy parametrów (rysunek 10.16): OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706^ 66((A241,'%6' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': 655A6%+A %#/'4#52#%'215+6+10 ^
  • 60. 116 Aplikacje Direct3D Rysunek 10.16. Połączenie tekstury wichrującej i tekstury otoczenia (generowanie współrzędnych tekstury otoczenia — flaga D3DTSS_TCI_CAMERAS PACEPOSITION). Do urządzenia przekazywane są trzy współrzędne tekstury otoczenia Tekstura obiektu, wichrująca i otoczenia Łączenie trzech tekstur wymaga trzech slotów. Sprawdzamy, czy są one dostępne: KH R%CRU /CZ6GZVWTG$NGPF5VCIGU TGVWTP 'A(#+. W slocie 0 umieszczamy teksturę obiektu, w slocie 1 — teksturę wichrującą, a w slocie 2 — teksturę otoczenia. Wprowadzamy następujące ustawienia we wszystkich trzech slotach: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 612A/17.#6' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A+((75' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A5'.'%6#4) OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*##4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 612A$7/2'08/#2 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A%744'06 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A5'.'%6#4) OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*##4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 OAG6GZ1R OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A%744'06 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A+5#$.' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':674'64#05(14/(.#)5 66((A%1706^ 66((A241,'%6' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': 655A6%+A %#/'4#52#%'215+6+10 ^
  • 61. Rozdział 10. Tekstury 117 W slocie 2 wprowadziliśmy zmienną OAG6GZ1R, aby mo na było zmieniać operację łącze- nia tekstur. Projekt z katalogu TextureTexEnvMapBump, przedstawiony na rysunku 10.17, umo liwia podglądanie łączenia trzech tekstur. U ytkownik mo e wybrać jedną z dziewię- ciu tekstur (trzy mo liwości dla tekstury obiektu, trzy dla tekstury otoczenia i trzy dla tek- stury wichrowania). Przełączniki trybu łączenia tekstur zmieniają operacje w slocie 2. Rysunek 10.17. Aplikacja MFC pozwala wybrać dowolną teksturę otoczenia, wichrującą, obiektu oraz sposób łączenia tekstur Tekstury przestrzenne Teksturę przestrzenna (Volume Map) tworzymy przez dodanie trzeciej współrzędnej do pła- skiej tekstury. Otrzymamy wtedy prostopadłościan o określonej szerokości, wysokości i głębokości. Elementem jednostkowym takiej figury jest teksel. Tekstury przestrzenne znajdują zastosowanie w medycynie, są wykorzystywane do przedstawiania kolejnych przekrojów, np. głowy. Taki obraz przestrzenny mo na oglądać pod dowolnym kątem. W przykładzie z katalogu TextureTexVolume bryłę przestrzenną tekstury wypełniamy ko- lorami i będziemy ją wyświetlali, zmieniając trzecią współrzędną tekstury. Sprawdzamy, czy urządzenie obsługuje tekstury przestrzenne: KH R%CRU 6GZVWTG%CRU 26':674'%#25A81.7/'/#2 TGVWTP 'A(#+. Struktura werteksa z trzema współrzędnymi tekstury W, X i Y wygląda w ten sposób: UVTWEV '(8'46': ] (.1#6 Z [ (.1#6 WXY _ Deklaracja FVF ma postać: FGHKPG (8(A'(8'46': (8(A:;^(8(A6':^(8(A6':%1145+'
  • 62. 118 Aplikacje Direct3D Deklarujemy wskaźnik do struktury tekstury przestrzennej: RTKXCVG .2+4'%681.7/'6':674' OAR6GZVWTG i inicjalizujemy w konstruktorze wartością 07... Na końcu działania aplikacji zwalniamy zasoby interfejsu tekstury: 5#('A4'.'#5' OAR6GZVWTG Korzystając z funkcji %TGCVG8QNWOG6GZVWTG, tworzymy teksturę przestrzenną: KH (#+.' OARFFGXKEG %TGCVG8QNWOG6GZVWTG (/6A#4)$ 211.A/#0#)' OAR6GZVWTG TGVWTP 'A(#+. Funkcja ta utworzy teksturę o wymiarach 16×16×16 i formacie (/6A#4)$. Wypeł- niamy teksturę, korzystając z wywołania funkcji: KH (#+.' :(KNN8QNWOG6GZVWTG OAR6GZVWTG (KNN/[6GZVWTG8QNWOG07.. TGVWTP 'A(#+. Drugim argumentem jest zdefiniowana wcześniej przez programistę funkcja wypełniająca teksturę. Oto przykład implementacji takiej funkcji: 81+ (KNN/[6GZVWTG8QNWOG :8'%614
  • 65. R6GZGN5KG .281+ RCVC ] R1WV ZR6GZ%QQTF Z R1WV [R6GZ%QQTF [ R1WV R6GZ%QQTF _ Funkcja ta w pierwszym parametrze zawiera strukturę tekstury rgba do wypełnienia, o współrzędnej tekstury określonej w drugim parametrze. Trzeci parametr to wielkość teksela, czwarty to wartość, którą przekazał programista w trzecim parametrze wywołania funkcji :(KNN8QNWOG6GZVWTG. W tym przypadku będzie to 07... Przykład przepisuje pozycje w teksturze do wartości kolorów. Ustawiamy teksturę w slocie 0. W metodzie (TCOG/QXG zmieniamy współrzędną w, w efek- cie wyświetlane będą kolejne przekroje tekstury na czworokącie: '(8'46':
  • 66. R8GTVKEGU KH 57%%''' OAR8$ .QEM
  • 68.
  • 69. R8GTVKEGU ] HQT KPV K K K R8GTVKEGU=K?Y OAH6KOG OAR8$ 7PNQEM _ Wynik działania programu przedstawia rysunek 10.18. W projekcie z katalogu TextureTexVolume1 zastosowaliśmy rotację współrzędnych tek- stury, tak e na czworokącie wyświetlane są ró ne przekroje tekstury przestrzennej. Kod pokazuje, jak zmieniają się współrzędne tekstury:
  • 70. Rozdział 10. Tekstury 119 Rysunek 10.18. Na powierzchni obiektu wyświetlana jest tekstura o wymiarach 16×16×16, ze zmienną współrzędną w :/#64+: OCV4QVOCV :37#6'40+10 S :8'%614 X1WV :/CVTKZ4QVCVKQP;CY2KVEJ4QNN OCV4QVOAH6KOG
  • 71. HOAH6KOGH :/CVTKZ#HHKPG6TCPUHQTOCVKQP OCVH :8'%614 HHH :3WCVGTPKQP4QVCVKQP/CVTKZ S OCV4QV :8'%614 H HH :8'%614 X '(8'46':
  • 72. R8GTVKEGU KH 57%%''' OAR8$ .QEM
  • 74.
  • 75. R8GTVKEGU ] R8GTVKEGU=?WXY
  • 76. :8GE6TCPUHQTO%QQTF X OAX OCV R8GTVKEGU=?WXY
  • 77. :8GE6TCPUHQTO%QQTF X OAX OCV R8GTVKEGU=?WXY
  • 78. :8GE6TCPUHQTO%QQTF X OAX OCV R8GTVKEGU=?WXY
  • 79. :8GE6TCPUHQTO%QQTF X OAX OCV _ Funkcja :8GE6TCPUHQTO%QQTF przekształca wektor trzyelementowy, określony w dru- gim argumencie, przez uprzednio przygotowaną macierz OCV. Rysunek 10.19 przedstawia wynik działania programu. Dot3 Natę enie oświetlenia Lambertowskiego danego punktu obliczamy przez iloczyn skalarny wektora normalnego i wektora w kierunku światła. Je eli dana powierzchnia ma teksturę, która zamiast wartości rgb ma współrzędne xyz wektora normalnego powierzchni i znamy pozycję światła (x, y, z), to mo emy obliczyć mapę oświetlenia powierzchni. Przykład TextureTexDot3 pokazuje, jak to zrobić. Ładujemy teksturę zawierającą wektory nor- malne (rysunek 10.20a) i zwykłą teksturę (rysunek 10.20b), dla której zostały utworzone wektory normalne.
  • 80. 120 Aplikacje Direct3D Rysunek 10.19. Na powierzchni obiektu wyświetlana jest tekstura o wymiarach 16×16×16, ze zmiennymi współrzędnymi u, v i w Rysunek 10.20a. Tekstura zawierająca wektory normalne Sprawdzamy, czy urządzenie obsługuje operacje 6':12%#25A162417%6: KH R%CRU 6GZVWTG1R%CRU 6':12%#25A162417%6 TGVWTP 'A(#+. W slocie 1 umieszczamy teksturę obiektu, która będzie łączona z teksturą wynikową oświe- tlenia ze slotu 0: OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 612A162417%6 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6(#%614 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A+5#$.' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A6':%114+0': OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A6':674' OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.1412 OAG6GZ1R OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A%1.14#4) 6#A%744'06 OARFFGXKEG 5GV6GZVWTG5VCIG5VCVG 655A#.2*#12 612A+5#$.'
  • 81. Rozdział 10. Tekstury 121 Rysunek 10.20b. Tekstura źródłowa dla tekstury z wektorami normalnymi W slocie 0 została umieszczona tekstura z wektorami normalnymi oraz zastosowana ope- racja 612A162417%6. Flaga 6#A6(#%614 oznacza, e drugim argumentem jest wektor wskazujący kierunek świecenia światła. Zanim rozpoczniemy renderowanie, ustawiamy jeszcze ten współczynnik (flaga 45A6':674'(#%614): 914 T 914 H
  • 82. X.KIJVZ H 914 I 914 H
  • 83. X.KIJV[ H 914 D 914 H
  • 84. X.KIJV H 914 FY(CEVQT T. I. D OARFFGXKEG 5GV4GPFGT5VCVG 45A6':674'(#%614 FY(CEVQT Współczynnik ten jest zmienny w czasie, co oznacza przemieszczanie się światła. Wynik działania programu przedstawia rysunek 10.21. U ytkownik mo e dobrać za pomocą jed- nego z przełączników z okna dialogowego operację łączenia mapy oświetlenia z tekstu- rą obiektu. Rysunek 10.21. Wykorzystanie tekstury z wektorami normalnymi
  • 85. 122 Aplikacje Direct3D Mapy wektorów normalnych i wektorów wichrujących Teraz zajmiemy się sposobem generowania tekstur z wektorami normalnymi (NormalMap) oraz tekstur z wektorami wichrującymi (BumpMap). Wykorzystanie tekstur z wektorami normalnymi zostało omówione w części dotyczącej map z oświetleniem, zaś tekstur z wek- torami wichrującymi — podczas analizy zagadnień związanych z teksturami wichrującymi. Tekstury z wektorami normalnymi i wektorami wichrującymi będą generowane na podsta- wie zwykłej tekstury. W pierwszym etapie nale y znaleźć gradient w kierunku X i w kie- runku Y w bitmapie. Teoria przetwarzania obrazów oferuje wiele masek do obliczania gra- dientu (rysunki 10.22a, b i c). Rysunek 10.22a. X Y Maski Prewitta − 1 0 1 − 1 − 1 − 1 − 1 0 1 0 0 0     − 1 0 1   1 1 1   Rysunek 10.22b. X Y Maski Sobela  − 1 0 1 − 1 − 2 − 1 − 2 0 2 0 0 0      − 1 0 1   1  2 1  Rysunek 10.22c. X Y Maski gradientu − 1 1 1 − 1 − 1 − 1 − 1 − 2 1  1 −2 1      − 1 1 1   1  1 1  W projekcie TextureGenDotN wykorzystamy maskę Sobela. Stosując maskę dla kierun- ku X i Y, otrzymamy dwa wektory [1,0,dX] i [0,1,dY]. Obliczamy ich iloczyn wektorowy: [1,0, dX ]× [0,1, dY ] = [− dX ,−dY ,1] Otrzymany wektor jest gradientem dla danego punktu w obrazie. Jego składowe x i y wykorzystujemy jako dane dla wektora wichrującego, zaś trzy składowe jako wektor nor- malny. Dane te nale y odpowiednio spakować do składowych r i g dla tekstury wichru- jącej (signed char) oraz do składowych r, g i b dla tekstury z wektorami normalnymi (BYTE). Fragment kodu przedstawia przygotowanie tekstury wichrującej: HQT 914 [ [RGUE*GKIJV [ ] HQT 914 Z ZRGUE9KFVJ Z ] OCUM; [ RGUE*GKIJV OCUM: Z RGUE9KFVJ
  • 86. Rozdział 10. Tekstury 123 T HNQCV
  • 95. ITG[H
  • 96. T H
  • 97. I H
  • 98. D OCUM; [ RGUE*GKIJV OCUM: Z RGUE9KFVJ T HNQCV
  • 107. ITG[H
  • 108. T H
  • 109. I H
  • 110. D F:ITG[ H
  • 112. ITG[ITG[ F;ITG[ H
  • 114. ITG[ITG[ :8'%614 XGE F:HF;HH :8GE0QTOCNKG XGE XGE
  • 116. [ Z
  • 117. EJCT H
  • 118. XGEZT
  • 120. [ Z
  • 121. EJCT H
  • 122. XGE[I
  • 124. [ Z
  • 125. D
  • 127. [ Z
  • 128. C _ _ Dla ka dego punktu w obrazie, który pokrywa maska, obliczamy luminancję (zmienne ITG[::). Zastosowano zawijanie tekstury na krawędziach. Składowe wektora są skalowa- ne, wartość skalowania wynosi 127, następnie zapisywane do odpowiednich bajtów tek- stury wichrującej. W tym kodzie widać ró nicę w porównaniu do kodu wykorzystanego do obliczenia tekstury z wektorami normalnymi. Zastosowana została ta sama maska jak do obliczania gradientu:
  • 130. [ Z
  • 132. HT
  • 134. [ Z
  • 136. HI
  • 138. [ Z
  • 140. HD
  • 142. [ Z
  • 143. C Kody te wykorzystaliśmy w projekcie TextureGenDotN. U ytkownik mo e załadować tek- stury z pliku za pomocą komendy LoadTexture. Na podstawie tej tekstury tworzone są dwie tekstury, korzystające z zaprezentowanych wy ej kodów (scena 3. i 4.) (rysunek 10.23). Scena 2. przedstawia teksturę z wektorami normalnymi, obliczoną za pomocą funkcji Direct3D :%QORWVG0QTOCN/CR. Wywołanie tej funkcji jest następujące: KH (#+.' :%QORWVG0QTOCN/CR OAR6GZVWTG0QTOCNOAR6GZVWTG07.. :A%*#00'.A.7/+0#0%' H TGVWTP
  • 144. 124 Aplikacje Direct3D Rysunek 10.23. Aplikacja MFC generuje na podstawie tekstury załadowanej z pliku tekstury z wektorami normalnymi oraz teksturę wichrującą Wszystkie trzy obliczone tekstury mo na zachować w plikach, aby wykorzystać je we wła- snych programach. Wybieramy jedną z komend menu: SaveDuDvMap (zapisuje teksturę wichrującą), SaveNormalMap (zapisuje teksturę z wektorami normalnymi utworzoną komendą Direct3D :%QORWVG0QTOCN/CR) lub SaveNormalMapOwn (zapisuje teksturę z wektorami normalnymi utworzoną według własnego algorytmu).