Udostępnij za pośrednictwem


          

Tworzenie aplikacji RIA w Silverlight 5 - Tworzenie grafiki 3D  Udostępnij na: Facebook

Autor: Tomasz Kowalczyk

Opublikowano: 2012-08-22

Zapraszam do zapoznania się z kolejnym artykułem przedstawiającym możliwości Silverlight, zaimplementowane w najnowszej wersji, oznaczonej cyfrą 5. W tym artykule zostanie opisana technologia XNA, której można używać już z poziomu Silverlight dzięki XNA 3D API.

Po przeczytaniu tego artykułu dowiesz się:

  • co to jest XNA,
  • jak utworzyć projekt Silverlight, bazujący na XNA 3D API,
  • jak korzystać z XNA z poziomu Silverlight.

Wprowadzenie

Microsoft XNA jest to zbiór narzędzi, wykorzystujących środowisko kodu zarządzanego, dzięki którym programista może wytwarzać np. komputerowe gry wideo. W tym momencie może pojawić się pytanie, w jakim celu dodano XNA do najnowszego Silverlight, którego najpopularniejszym scenariuszem użycia są aplikacje typu LOB (Line of Bussines). Odpowiedź na to pytanie jest dość prosta i nasuwa się sama po chwili zastanowienia. Programiści i osoby odpowiedzialne za wytwarzanie oprogramowania biznesowego dostrzegli po prostu duży potencjał grafiki 3D oraz możliwości jej wykorzystania w aplikacjach skierowanych np. do sektora medycznego, logistycznego czy też finansowego. Wychodząc naprzeciw oczekiwaniom swoich klientów (programistów), Microsoft postanowił zaimplementować obsługę 3D w najnowszym wydaniu Silverlight.

Implementacja

Aby móc w łatwy sposób skorzystać z możliwości, jakie daje XNA 3D API w środowisku Silverlight 5, zaleca się zainstalowanie Silverlight 5 Toolkit. Jest to zbiór dodatkowych, darmowych komponentów, które w dużej mierze ułatwiają korzystanie z Silverlight i wzbogacają go o nowe możliwości. Jeśli chodzi o samo XNA 3D API, to po zainstalowaniu Silverlight 5 Toolkit, programista będzie mógł korzystać z Templatów, przyspieszających proces tworzenia projektu w technologii Silverlight, w oparciu o XNA. Dodatkowo, pakiet ten zawiera ciekawe przykłady w postaci kodów źródłowych, które warto przeanalizować.

Informacja
W dalszej części artykułu, autor zakłada, że pakiet Silverlight 5 Toolkit został pobrany i zainstalowany. Jest to standardowa operacja, która nie powinna przysporzyć problemów.

 

Po zainstalowaniu Silverlight 5 Toolkit, wybierając nowy projekt w Silverlight, będzie można zauważyć dwa nowe typy, pozwalające tworzyć aplikacje w 3D -Rys. 1. Tworzenie projektu 3D.

Tworzenie projektu 3D

Rys. 1. Tworzenie projektu 3D.

Prosta aplikacja 3D w Silverlight 5

Po uruchomieniu Visual Studio 2010 należy wybrać aplikację typu „Silverlight 3D Application” z grupy Silverlight. Warto w tym momencie zwrócić uwagę na fakt, że nie ma możliwości wyboru wersji Silverlight, którą zakładany projekt będzie używał, gdyż wsparcie dla tego typu aplikacji posiada jedynie najnowsza wersja – Silverlight 5.

Informacja
Wszystkie kody źródłowe projektów, utworzonych w ramach artykułów, będą dostępne na tej stronie.

Po załadowaniu wszystkich niezbędnych komponentów przez środowisko Visual Studio 2010 widać, że projekt składa się z czterech podprojektów:

  • Silverlight3dApp – główny projekt Silverlight, w którym będzie umieszczona logika działania aplikacji,
  • Silverlight3dAppContent – projekt, którego pochodzenie zdeterminowane jest użyciem XNA. Osoby korzystające wcześniej z XNA, podczas pisania gier, uruchamianych w środowisku Windows czy też Windows Phone, będą wiedziały, że w tym projekcie przechowywana będzie tzw. statyczna zawartość, jak np. pliki *.slfx, przechowujące efekty specjalne, projekt ten zawiera referencje do Microsoft.Xna.Framework.Content.Pipeline,
  • Silverlight3dWeb – standardowa strona Web, która będzie odpowiedzialna za hostowanie bazowej aplikacji Silverlight,
  • Silverlight3dWebContent – projekt, przechowujący statyczną zawartość na potrzeby aplikacji WWW, również posiada referencje dotyczące Microsoft.Xna.Framework.Content.Pipeline.

Uruchomienie przykładu

Po krótkim wprowadzeniu teoretycznym pora sprawdzić, jak działa aplikacja 3D, uruchomiona bezpośrednio w przeglądarce po wybraniu F5. Powinno się wówczas uruchomić okno przeglądarki, przedstawiające obraz, podobny do tego, przedstawionego na Rys. 2. 3D w przeglądarce.

3D w przeglądarce

Rys. 2. 3D w przeglądarce.

Informacja
W tym momencie może pojawić się dość powszechny błąd, związany z przetwarzaniem grafiki 3D i dostępem do karty graficznej przez przeglądarkę. Jeśli pojawi się jakikolwiek komunikat i/lub nie pojawi się nic (ekran będzie pusty), warto zapoznać się z możliwymi przyczynami i szybko nanieść odpowiednie poprawki w kodzie lub zmiany w pluginie, obsługującym Silverlight.

Jak to działa?

Istotne znaczenie mają referencje do bibliotek, dodane do głównego projektu – Silverlight3dApp, pochodzące bezpośrednio z XNA, odpowiadające m.in. za obliczenia, jakich wymaga tworzenie aplikacji w 3D.  Nie znajdują się one standardowo w projekcie tworzonym w Silverlight:

  • Microsoft.Xna.Framework,
  • Microsoft.Xna.Framework.Content,
  • Microsoft.Xna.Framework.Graphics,
  • Microsoft.Xna.Framework.Graphics.Extensions,
  • Microsoft.Xna.Framework.Graphics.Shaders,
  • Microsoft.Xna.Framework.Math,
  • Microsoft.Xna.Framework.Toolkit,
  • System.Windows.Xna.

Warto również przyjrzeć się plikom, wchodzącym w skład projektu:

  • Cube.cs – w celu łatwiejszego przeglądania tego pliku został on podzielony na regiony, z których szczególną uwagą należy obdarzyć region Creation, w którym umieszczono m.in. definicję obiektu ContentManager, do którego ładowane są efekty specjalne (pliki. *.slfx), pochodzące z projektu Silverlight3dAppContent:
this.mySilverlightEffect=scene.ContentManager.Load<SilverlightEffect>("CustomEffect");
// Cache effect parameters
worldViewProjectionParameter=mySilverlightEffect.Parameters["WorldViewProjection”];
worldParameter = mySilverlightEffect.Parameters["World"];
lightPositionParameter = mySilverlightEffect.Parameters["LightPosition"];
  • Scene.cs – ten plik zawiera definicję klasy Scene, która tworzy ContentManager i rejestruje zdarzenia:
// Register for size changed to update the aspect ratio
           _drawingSurface.SizeChanged += _drawingSurface_SizeChanged;

            // Get a content manager to access content pipeline
            contentManager = new ContentManager(null)
            {
                RootDirectory = "Content"
            };
  • MainPage.xaml – ten plik jest o tyle ciekawy, iż zawiera nową kontrolkę DrawingSurface oraz zdefiniowane dla niej zdarzenie Draw, które określa, co i kiedy ma być w niej rysowane:
<Grid x:Name="LayoutRoot" Background="White">
        <!--3D drawing surface-->
        <DrawingSurface x:Name="myDrawingSurface" Draw="myDrawingSurface_Draw"/>
        <TextBlock Text="My Silverlight 3D Application" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,30" Foreground="White" FontSize="40"/>
</Grid>
Informacja
Warto również przyjrzeć się innym projektom, dostarczonym wraz z Silverlight 5 Toolkit, które zawierają bardziej zaawansowane przykłady. Standardowo znajdują się one w C:\Program Files\Microsoft SDKs\Silverlight\v5.0\Toolkit\dec11\Source

Podsumowanie

W tym artykule poznaliśmy, w jaki sposób tworzyć oprogramowanie wykorzystujące XNA 3D API do tworzenia trójwymiarowych obiektów w środowisku Silverlight 5, uruchamiane w przeglądarce internetowej.

W następnej części dowiemy się, jak korzystać z Low Latency Sound i współpracować z mediami.