Jelčić Tomislav, Vrević Armin

Direct3D za Windows Phone

Image 01

Direct3D je podskup Directx platforme zaslužan za obradu 3D grafike na Windows sustavima. U daljnjem tijeku rada biti će objašnjen rad Direct3D-a kroz primjere na Windows Phone-u.

Windows Phone je mobilni operacijski sustav koji značajan rast ostvaruje od svoje verzije 7. Trenutna verzija operacijskog sustava je 8.1, s tim da je na 13.2.2015. izašao "tehnical preview" Windows 10 operacijskog sustava za mobilne uređaje. Kako je Windows Phone OS član Windows skupine operacijskih sustava, na njemu je moguće izrađivati DirectX aplikacije.

Ispod se nalaze korisni linkovi za izučavanje DirectX-a te Windows Phone OS-a

Predlošci aplikacija

Za kreiranje Windows Phone aplikacija sa Direct3D, postoje 3 načina kreiranja projekta. To su: XAML sa Direct3D, Direct3D sa XAML te Direct3D aplikacija

XAML sa Direct3D predložak se koristi u slučaju potrebe renderiranja 3D grafike unutar XAML korisničkog sučelja. S ove strane XAML daje element Drawing surface. To je kontrola na kojoj se prikazuje 3D grafika, te se ponaša kao i bilo koja druga kontrola. Ovakav tip daje najlošije performanse aplikacije.

Direct3D sa XAML predložak se koristi u onom slučaju kada oko nativne Direct3D aplikacije postoji slabi sloj XAML omotača. Ovakav tip se koristi kada se želi da igra posjeduje Live Tile ili neku drugu funkcionalnost posebnu za Windows Phone operacijski sustav.

Direct3D je predložak koji ne podržava pomoć XAML-a da kreira korisničko sučelje. Nudi najbolje performanse, a cijeli kod se piše u C++ -u. Svi objekti se iscrtavaju izravno na pozadinu ekrana uređaja. Isto tako se kontrolira životni ciklus aplikacije, kao i događaji.

Struktura koda aplikacije

Dvije najvažnije datoteke su Renderer.cpp u kojem se vrši samo iscrtavanje objekata, te promjena stanja objekata prema vremenu. Druga bitna datoteka je NazivProjekta.cpp, u kojoj se definiraju svi događaji za aplikaciju (dodir, pomicanje i slično), ali i definicije metoda koje su nužne za Windows Phone aplikacije (suspendiranje, zatvaranje), kako ne bi došlo do curenja u memoriji.

Pch.h Sadrži već iskompajlirane datoteke zaglavlja.

Direct3DBase.cpp Pomoćna klasa u kojoj se nalaze mogućnosti promjene orijentacije ekrana, te metode koje brinu o životnom ciklusu organizacije..

Assets Mapa u kojoj se nalaze sve fotografije, audio i video zapisi koji se koriste u aplikaciji.

External dependencies Dodatne datoteke zaglavlja.

Više o svemu navedenom otkrijte u primjeru aplikacije.

Osnova su 2 klase

- IFrameworkView implementacija

Služi kao provider za jedan view u aplikaciji

Implementirane metode:

Initialize – Dodaje event handlere na metode stanja aplikacije(activated,resuming,suspending)
Load
Run – Pokreće view i delegira renderiranje Direct3D objektu
SetWindow – Dodaje event handlere na metode stanja viewa(Pointeri,visibility..)
Uninitialize
OnVisibilityChanged, OnWindowClosed, OnPointerPressed, OnPointerMoved, OnPointerReleased
OnSuspending – Delocira resurse
OnResuming

- Direct3D base implementacija

Postavlja i renderira objekte
Uključuje potrebne DirectX toolkit klase

Implementirane metode:

CreateDeviceResources – Učitava teksture, kreira potrebne matrice i sl.
CreateWindowSizeDependentResources
Render
Update
Teksture trebaju biti u .dds (Direct Draw Surface) formatu kako bi se uspješno učitale. Biblioteka iz DirectX toolkita za učitavanje tekstura je DDSTextureLoader.h

Primjer koda

Za učitavanje 2d bitmape potrebno je uključiti biblioteku SpriteBatch.h

Prikaz 2d bitmape sa teksturom



Rotacija bitmape (potrebna globalna varijabla rotation)



Skaliranje (potrebna globalna varijabla scale)





Moguć odabir više predefiniranih primitiva, a i definiranje vlastitog





Moguć odabir više predefiniranih primitiva, a i definiranje vlastitog

---

Daleko više komplicirano nego uporaba OpenGL-a sa laboratorijskih vježbi

Visoka krivulja učenja