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.