Zarys projektu Zawartość Cele Założenia

Transkrypt

Zarys projektu Zawartość Cele Założenia
Autor: Bartłomiej Filipek
www.ii.uj.edu.pl/~filipek
Zarys projektu
Zawartość
Cele ............................................................................................................................................. 1
Założenia..................................................................................................................................... 1
Zarys realizacji (z wyróżnionymi wzorcami projektowymi) ....................................................... 2
Manager Tekstur, Shaderów, Modeli: .................................................................................... 3
System Sceny .......................................................................................................................... 3
Podsumowanie ........................................................................................................................... 3
Cele
Projekt ma na celu stworzenie prostej, lecz wydajnej i dobrej biblioteki która umożliwia
pisanie aplikacji korzystającej z OpenGL pod Windows w języku programowania C++.
Samo Api OpenGL’a nie dostarcza żadnych pomocniczych funkcji/obiektów do ładowania
modeli, tekstur, shaderów, czy obsługę klawiatury i myszki. Problematyczne jest też Api
Windows’a, które jest bardzo rozbudowane i z początku trudno jest w nim cokolwiek
napisad. Dodatkowo do tworzenia aplikacji korzystających OpenGL nie potrzeba ogromu
całego Win32Api, lecz jedynie fragment.
BEF ma na celu uprościd komunikacje pomiędzy OpenGL a Windows Api przez co
zdecydowanie usprawni budowanie aplikacji graficznych, a w szczególności gier.
Założenia
Oto podstawowa funkcjonalnośd, którą ma wypełniad system BEF:
 Dostarczad łatwy sposób na tworzenie i zarządzanie oknem i ustawianie wszelkich
jego parametrów – tryb graficzne, pokazywanie na pełnym ekranie lub w oknie,
inicjalizowanie systemu OpenGL, etc.
 Dostarczyd systemy do ładowanie i zarządzania teksturami. Obsługiwane formaty
takie jak JPG, BMP, TGA.
 System do obsługi shaderów (w natywnym języku dla OpenGL’a – czyli GLSL).
Ładowanie z plików, ustawianie parametrów shaderów, etc.
 Ładowanie modeli 3D (tu jeszcze się zastanawiam, może uda się zastosowad
COLLAD’e)
 System wejścia – obsługa klawiatury i myszki.
 Logger – do raportowania podczas działania całej aplikacji.
 System zarządzania Sceną 3D (na razie bardzo prosty) wraz z hierarchią obiektów
mogących byd na scenie.
 Zestaw pomocniczych klas do OpenGL’a takie jak kamery, obiekty świateł, funkcje do
renderowania prostych modeli (box’ów, kul, stożków)
 Proste GUI, na początek coś do tworzenia interfejsu do pokazywania informacji o
aplikacji, bez okienek, list, czy innych zaawansowanych kontrolek…
Zarys realizacji (z wyróżnionymi wzorcami projektowymi)
Cały system jest zbudowany w oparciu o wzorzec fasadą ponieważ do istniejących
podsystemów (dośd skomplikowanych swoją drogą) jak OpenGL czy Win32Api dodaje
bibliotekę ułatwiającą budowanie aplikacji. Fasada głównie uprości tworzenie rdzenia
aplikacji: okna oraz podstawową inicjalizację OGL’a. Sama aplikacja będzie używad głównie
poleceo OpenGL (oraz ułatwieo od BEF), raczej separując się od natywnego kodu
WindowsApi.
Aplikacja
Model fasady którą
tworzy BEF




Fasada jest
tworzona
głównie nad
Windows Api
Windows Api
 CreateThread
 CreateWindowEx
 GetMessage
 …
Aplikacja korzysta
dalej z natywnego
Api OpenGL, ale ma
ułatwienia od BEF
BEF
gTextureManager
class Thread
gMainWindow
…..




OpenGL
glBindTexture
glShaderSource
gluLookAt
…
Pojawi się także potrzeba przystosowania systemu wątków czy okien Windows (które są
napisane w zwykłym C) do obiektowej postaci. Powstanie, więc kilka adapterów, które nie
dodadzą nowej funkcjonalności lecz stworzą obiektowy interfejs dla wcześniej
wspomnianych systemów.
Adapter lub nawet dekorator pojawi się przy tworzenia obiektu Shaderów GLSL, którymi
będzie można zarządzad z poziomu kodu aplikacji (ładowanie z pliku, dostawanie się do
wewnętrznych atrybutów, niszczenie, etc).
Manager Tekstur, Shaderów, Modeli:
W systemie będą co najmniej 3 managery – do zarządzania teksturami, do shaderów oraz do
obsługi modeli 3D. Zbudowane one będą oczywiście na bazie singletonu, z tego powodu, że
mają one na celu optymalne zarządzanie danym zasobem – na przykład teksturami, gdyby
managerów było dwóch to jedna tekstura mogła by byd wczytana dwa razy, a tego właśnie
chcemy uniknąd.
Każdy z nich będzie udostępniał iterator aby móc przeglądad obiekty którymi oni dysponują.
Iteratory mogą byd używana w różnym kontekście (zwykłe przeglądanie po kolei, wstecz, czy
według jakiegoś wzorca), chcę także aby ujednolicid interfejs dla iteratorów w projekcie bo
pojawią się ona także przy temacie Sceny.
Iteratory będą tworzone przez klasy nadrzędne (jak manager tekstur) i będzie można
budowad różne ich wersje. Na tą właśnie okazję zostanie użyty wzorzec fabryki
abstrakcyjnej.
System Sceny
Wszystkie obiekty które będą brad udział w renderingu (modele3D, kamery, światła, czy
grupy takich obiektów) muszą byd zarządzane przez główny system sceny. Obiekty są
heterogeniczne, a niektóre z nich mogą zawierad całe grupy obiektów. Do reprezentacji tego
systemu najlepiej nadaje się wzorzec fasady.
Przykład hierarchii w scenie kompozyt
SceneObject
agregacja
dziedziczenie
Model3D
Light
SceneNode
Obiekty do
renderowania
Camera
Po raz kolejny zostanie także wykorzystana fabryka abstrakcyjna do budowania wyżej
wspomnianych obiektów.
Na obiektach w scenie trzeba będzie także wykonywad różne operacje – jak usuwanie
niewidocznych obiektów, przygotowywanie listy do wyświetlenia, przeglądanie, etc… tutaj
idealnie nada się do tego wzorzec wizytatora.
Podsumowanie
BEF jest prostym enginem/szkieletem dla aplikacji korzystających z OpenGL pod Windows.
Mimo wszystko jeśli zostanie on dobrze napisany umożliwi to jego dalszy rozwój w system
bardziej zaawansowanego i co za tym idzie bardziej przydatny.

Podobne dokumenty