Systemy wirtualnej rzeczywistości Podstawy XNA

Transkrypt

Systemy wirtualnej rzeczywistości Podstawy XNA
Uniwersytet Zielonogórski
Instytut Sterowania i Systemów Informatycznych
Systemy wirtualnej rzeczywistości
Laboratorium
Podstawy XNA
Wstęp:
Niniejsza instrukcja stanowi wstęp do programowania 3-wymiarowych środowisk czasu
rzeczywistego. W trakcie kilku kolejnych laboratoriów zostanie napisana aplikacja 3D
zawierająca wybrane podstawowe techniki tworzenia gier komputerowych i środowisk
rzeczywistości wirtualnych (m.in. podstawy renderingu 3D w czasie rzeczywistym,
sterowanie i wykrywanie kolizji).
Aplikacja będzie prostym symulatorem czołgu widzianego z perspektywy trzeciej osoby.
Użytkownik będzie miał możliwość kontrolowania zachowania czołgu (jazda w przód i w tył,
obrót korpusu oraz obrót wieżyczki). Czołg będzie poruszał się po ograniczonym płaskim
terenie. Dodatkowo w scenie rozmieszczone będą przeszkody w postaci skrzyń blokujących
przejazd. Wszystkie modele i tekstury dołączone są do instrukcji.
Niniejsza instrukcja jest jedynie wstępem do programowania aplikacji 3D czasu
rzeczywistego i wiele aspektów przedstawia w bardzo uproszczony sposób. Niektóre
powszechnie znane i dostępne w oddzielnych publikacjach zagadnienia zostały opisane
fragmentarycznie lub pominięte. Będą one zaznaczone w tekście i zaleca się ich głębsze
poznanie.
W pierwszej części przedstawione zostanie środowisko Visual Studio C# 2008 Express Edition
wraz z XNA Game Studio 3.0. Pokazane zostaną mechanizmy wczytywania zawartości
(tekstury, modele, itp.) i generowania prostej grafiki 2D.
1. Nowy projekt i podstawy XNA
Aby rozpocząć pracę nad aplikacją należy stworzyć nowy projekt (File->New Project). Jako
szablon wybieramy Windows Game (3.0) i nadajemy mu odpowiednią nazwę (np. Tank).
Stworzony w ten sposób projekt zawiera podstawowe mechanizmy, takie jak główna pętla,
tworzenie okna, ustawianie urządzenia renderującego, itp.. Poniżej znajduje się krótkie
omówienie najważniejszych metod klasy Game:
1
protected override void Initialize()
{
// TODO: Add your initialization logic here
base.Initialize();
}
Metoda Initialize wywoływana jest po konstruktorze klasy Game ale przed LoadContent.
Służy do inicjowania niegraficznych elementów gry. Zwykle umieszcza się tu kod związany z
inicjalizacją logiki gry.
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
}
W tej metodzie umieszcza się ładowanie tekstur, modeli, itp..
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
base.Update(gameTime);
}
Metoda Update służy do aktualizacji stanu gry – obsługa kontrolerów (myszy, klawiatury,
pada...), sztuczna inteligencja, kolizje, itp..
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
base.Draw(gameTime);
}
Metoda Draw służy do rysowania na ekranie. Tutaj umieszcza się kod związany z
renderingiem obiektów, wyświetlaniem obrazów, czcionek, itp.. Metody Update i Draw
wywoływane są z różną częstotliwością w zależności od wartości parametru IsFixedTimeStep.
2
2. Wczytanie obrazu z pliku i wyświetlenie go na ekranie
XNA dysponuje wygodnym mechanizmem
ładowania treści (tj. obrazów, modeli,
dźwięków, itd.). Domyślnie zawiera importery
do większości najpopularniejszych typów
plików, m.in. BMP, JPG, FBX, X, itd.. Naszym
pierwszym celem będzie wczytanie obrazu z
pliku i wyświetlenie go na ekranie. Ten obraz
posłuży nam później jako tekstura terenu, po
którym poruszał się będzie czołg.
Pierwszym krokiem jest dodanie pliku do
projektu. Do katalogu Content naszego
projektu kopiujemy plik trawa.tga dołączony
do niniejszej instrukcji. Następnie dodajemy go
do projektu poprzez polecenie Add->Existing
Item... (rys. 1).
Rys. 1 - Dodawanie zawartości
Żeby móc wczytać obraz lub inne dane musimy najpierw zadeklarować obiekt, w którym
będziemy go przechowywać. Odpowiednim dla nas typem będzie Texture2D. A zatem w
klasie głównej naszej gry deklarujemy obiekt o nazwie trawa:
Texture2D trawa;
Następnie umieszczamy w metodzie LoadContent polecenie ładowania:
trawa = Content.Load<Texture2D>("trawa");
Kolejnym krokiem będzie wyświetlenie obrazu na ekranie. Z pomocą przychodzi obiekt
SpriteBatch, który umożliwia rysowanie grupy sprite’ów przy tych samych parametrach
rysowania. Przechodzimy do metody Draw naszej gry. Zaczynamy od wywołania metody
Begin obiektu SpriteBatch, która rozpoczyna proces rysowania. Ustawia ona parametry
urządzenia. Jako parametr wejściowy można podać własne ustawienia mieszania,
sortowania, itd.. My pozostaniemy przy ustawieniach domyślnych i wywołamy metodę Begin
bez żadnych parametrów. Następnie wyrysowujemy potrzebne elementy. W naszym
przypadku jest to jeden obrazek. Na końcu deklarujemy koniec rysowania poprzez
wywołanie metody End. Rozpoczynać i kończyć rysowanie można wiele razy w jednej klatce
ale zaleca się grupowanie rysowania dla danych ustawień.
spriteBatch.Begin();
spriteBatch.Draw(trawa, new Vector2(0.0f, 0.0f), Color.White);
spriteBatch.End();
3
Po skompilowaniu i uruchomieniu powinniśmy uzyskać obraz jak na rys. 2.
Rys. 2 - Wyrysowanie obrazu 2D
4

Podobne dokumenty