Politechnika Poznańska, Instytut Informatyki, SUM-TWO 11 kwietnia 2015
Historia DirectX Gry pod DOS korzystały z własnych bibliotek graficznych. Pierwsze wersje Windows umożliwiały tworzenie grafiki tylko za pomocą GDI. GDI nie nadaje się do tworzenia szybkiej grafiki. Od Windows 3.1 Microsoft starał się zaimplementować obsługę szybkiej grafiki w Windows biblioteka WinG.
Historia DirectX DirectX zastąpił WinG dla 32-bitowych Windows DirectX dostępny jest na Windows począwszy od wersji 95 (tylko do DX8.0a). Windows NT4 miało specyficzną wersję DX3.0a. Aktualna wersja to 11.2 (tylko >=Vista) Od wersji 9 istnieje rozszerzenie dla języków zarządzanych platformy.net (porzucone) Wersje są kompatybilne wstecz.
Historia XNA zapowiedź 24 marca 2004 CP - 14 marca 2006 wersja 1.0-11 grudnia 2006 wersja 2.0-13 grudnia 2007 wersja 3.0-30 października 2008 wersja 4.0-16 września 2010
Zintegrowana platforma do wytwarzania gier oparta na platformie.net Kod tylko w C#
Narzędzia XNA Game Studio http://msdn.microsoft.com/en-us/xna/default.aspx Visual Studio 2008 Visual C# 2008 Express
Platformy Gra niezależna platformowo: Windows XP Windows Vista XBOX 360 ZUNE Projekt Mono.XNA (martwy) Windows Phone 7 od wersji 4.0
XBOX 360 Przed XNA konieczny był zakup drogiego SDK Kod między grą dla Windows i XBOX może być niemal w pełni współdzielony Trzeba brać pod uwagę rozdzielczości docelowe konsoli i inne sterowanie XBOX Live Marketplace
Nowy projekt
Pusty projekt Klasa Game
Klasa Game Podstawowe metody: Initialize LoadContent UnloadContent Update(GameTime) Draw(GameTime)
Initialize Inicjalizuje obiekty i zmienne Tworzy kontekst karty graficznej
LoadContent Wywoływana po Initialize Wywoływana gdy trzeba zaktualizować grafikę gry (np. zmiana ustawień grafiki) Używana do załadowania zasobów: obrazów, modeli, dźwięków, itp.
Update Wywoływana w ramach pętli gry Tu powinna się znaleźć obsługa logiki gry: reakcja na użytkownika obliczanie ruchu detekcja kolizji AI...
Draw Wywoływana w ramach pętli gry Tu powinna się znajdować tylko obsługa rysowania sceny i nic więcej
UnloadContent Wywoływana w momencie zakończenia gry Tutaj umieszczamy zwalnianie zasobów
Cykl życia gry
Prosta animacja 2D Klasa reprezentująca Sprite
Obrazek Dodajemy do podkatalogu Content
Zmiany w klasie Game Pola Metoda LoadContent Metoda UnloadContent Metoda Draw
Efekt
Animacja Nowe pola w klasie MySprite Nowy konstruktor Metoda Move
Animacja w klasie Game Metoda LoadContent Metoda Draw
Efekt
Detekcja kolizji Metoda w klasie MySprite Metoda Update w klasie Game
Efekt
Obsługa klawiatury Metoda Update
Obsługa wejścia Jako urządzenia wejściowe XNA obsługuje: pad XBOX klawiaturę mysz
Obsługa klawiatury Metody Keys[] GetPressedKeys() bool iskeydown(keys key) bool iskeyup(keys key)
Obsługa myszy Obiekt Mouse i struktura MouseState LeftButton MiddleButton RightButton ScrollWheelValue X, Y XButton1 XButton2
Obsługa Pad a Klasa GamePad Obsługuje do 4 padów (PlayerIndex) Kolekcja przycisków (Buttons) Obsługa joysticków (Thumbsticks) Obsługa analogowych triggerów Obsługa wibracji (SetVibration())
Warstwy domyślnie obiekty nakładają się w kolejności rysowania można to zmienić stosując wartswy warstwy są numerowane w zakresie 0-1 (float) wywołuje się inne wersje metody SpriteBatch.Draw i SpriteBatch.Begin
Framerate Domyślnie wynosi 60 fps Można sterować zmieniając odstęp między wywołaniami metody Update W zmiennej GameTime możemy sprawdzić, czy gra nie działa za wolno Gdy sprzęt nie nadąża ramki są pomijane
Tekst w 2D Tekst rysuje się podobnie jak sprite y Klasa SpriteFont Na podstawie opisu tekstu w XML XNA tworzy obrazek SpriteFont też jest zasobem
Tekst w 2D
Tekst w 2D
Tekst w 2D dodajemy pole do klasy Game w metodzie LoadContent wczytujemy zasób w metodzie Draw dodajemy obsługę rysowania
Dźwięk Do tworzenia efektów trzeba korzystać z Microsoft Cross-Platform Audio Creation Tool (XACT)
Dźwięk
Dźwięk Edycja banku dźwięków Własności dźwięku Pliki na dysku
Dodanie dźwięku dźwięk jest kolejnym zasobem dodawanym do Content
Klasy dźwiękowe AudioEngine - główna klasa odpowiedzialna za komumnikację z urządzeniem dźwiękowym WaveBank - kolekcja plików dźwiękowych SoundBank - kolekcja utworów bazujących na dźwiękach
Odtwarzanie dźwięku Obiekty dźwiękowe Metoda Initialize Odtworzenie dźwięku
Zapętlony dźwięk Pole Cue W metodzie Initialize W metodzie Update
Grafika 3D
System współrzędnych XNA domyślnie stosuje praworęczny układ współrzędnych
Kamera Ustawienia kamery określają dwie macierze View i Projection View: lokalizacja kamery kierunek kamery orientacja kamery Projection kąt widzenia zasięg, itp.
Macierz widoku Metoda Matrix.CreateLookAt Parametry typu Vector3: cameraposition cameratarget cameraupvector
Macierz projekcji Metoda Matrix.CreatePerspectiveFieldOfView Parametry: fieldofview aspectratio nearplanedistance farplanedistance
Kamera Warto kamerę zdefiniować jako dodatkowy komponent
Kamera pusty komponent
Kamera dodajemy macierze widoku i projekcji i kamerę do klasy Game
Grafika 3D podstawowym elementem w grafice 3D jest wierzchołek położony w przestrzeni 3D z wierzchołków budujemy trójkąty z trójkątów budujemy dowolne kształty wektory macierze
Rodzaje wierzchołków XNA VertexPositionColor VertexPositionTexture VertexPositionColorTexture VertexPositionNormalTexture
Rysujemy trójkąt Deklarujemy pole w klasie Game Inicjalizujemy tablicę w metodzie LoadContent
Rysujemy trójkąt Dodajemy obsługę rysowanie w metodzie Draw
Rysujemy trójkąt
Co to jest BasicEffect? W XNA renderowanie sceny 3D odbywa się zawsze z wykorzystaniem efektów HLSL Klasa BasicEffect realizuje podstawowy efekt bez potrzeby pisania kodu Efekty składają się z technik Technika składa się z wielu przebiegów
Klasa BasicEffect Najciekawsze własności: View - macierz określająca widok kamery Projection - macierz projekcji World - macierz świata LightingEnabled - czy aktywne przetwarzanie świateł AmbientLightColor - kolor otoczenia DirectionalLight$ ($=0,1,2) - źródła światła FogColor, FogStart, FogEnd - ustawienia mgły
Składanie węzłów Sposób rysowania węzłów PointList LineList LineStrip TriangleList TriangleStrip TriangleFan
Wektory 3D Przydatne metody: Distance - odległość euklidesowa Add, Substract - suma i różnica Multiply, Divide - iloczyn i iloraz Clamp - ogranicza współrzędne do określonego obszaru Lerp - interpolacja liniowa między wektorami SmoothStep - interpolacja z wagą
Operacje macierzowe Matrix.CreateRotation$ ($=X,Y,Z) Matrix.Translation Matrix.Scale Matrix.CreateLookAt Matrix.CreatePerspectiveFieldOfView Matrix.CreateOrtographic
Animacja trójkąta Dodajemy pole określające położenie świata sceny W BasicEffect ustawiamy własność World na to pole W metodzie Update obsługujemy klawiaturę
Animacja trójkąta
Obrót trójkąta Obrót wokół osi Y
Culling Domyślnie rysowane są elementy zgodnie z ruchem wskazówek zegara Jeżeli kolejność z aktualnego punktu widzenia jest odwrotna nie rysują się Ma to zapobiegać rysowaniu obiektów 3D od wewnątrz - teoretycznie niepotrzebne Culling można wyłączyć
Obroty Można obracać wokół każdej z osi z osobna CreateRotationX, CreateRotationY, CreateRotationZ wokół wszystkich CreateFromYawPitchRoll
Prostokąt definiujemy 4 wierzchołki zmieniamy wywołanie rysowania
Dodanie tekstury Dodajemy pole odpowiadające teksturze Zmieniamy wszędzie rodzaj węzłów na VertexPositionTexture Ładujemy teksturę w LoadContent Zmieniamy proces rysowania
Tekstura
Modele 3D XNA obsługuje format.x i.fbx Narzędzia do modelowania: 3D Studio Max Maya Blender (www.blender.org) Lightwave Modo XSI ModTool (www.softimage.com/products/modtool)
Modele 3D Model składa się z siatek (Mesh) Siatka może zawierać informacje o materiałach, kolorach i teksturach Siatka może też zawierać zapisany efekt do obsługi renderowania Z siatką powiązane jest przekształcenie umieszczające ją w przestrzeni
Modele 3D Model jest też rodzajem zasobu (Content) Najlepiej stworzyć osobną klasę
Rysowanie modelu
Obracanie modelu W metodzie Update dodajemy obrót i modyfikujemy metodę GetWorld
HLSL High Level Shader Language Następca API Fixed Function Pipeline Projektowany pierwotnie we współpracy z NVidia Umożliwia bezpośrednie programowanie karty graficznej W HLSL piszemy jak mają działać shader y Zapisywane w pliku o rozszerzeniu fx
Shader Służą do renderowania sceny Vertex shader - uruchamiany dla każdego wierzchołka sceny Pixel shader - uruchamiany dla każdego widocznego piksela sceny
Shader
HLSL Składnia podobna do C Składa się z: definicji typów definicji zmiennych globalnych definicji funkcji przekształceń definicji technik
HLSL - przykład Typy i zmienne globalne
HLSL - przykład Kod shaderów
HLSL - przykład Technika
Obsługa HLSL w XNA Definiujemy efekt Ładujemy efekt w LoadContent Rysujemy z użyciem efektu
Programowanie sieciowe XNA korzysta z API Games for Windows Live i XBOX Live wymagane konto w powyższych usługach
A. Reed: Learning XNA 3.0 O Reilly ISBN: 0-596-52195-2 Do zobaczenia 17 maja 速