sobota, 19 września 2009

Praca magisterska - Mission accomplished !

Skończyłem pisać pracę magisterską. Leży sobie teraz obok mnie kilka wydrukowanych egzemplarzy i czeka na oddanie do katedry. Tytuł "System interaktywnej wizualizacji dynamicznych scen 3D dla potrzeb symulacji komputerowej" w skrócie "silnik graficzny". Praca ma 104 strony w wersji dla uczelni, 115 ma mój egzemplarz. Samo przygotowanie treści i obrazków zajęło mi około 2-3 tygodni, ale do tego jeszcze doszły poprawki zasugerowane przez promotora i narzeczoną (filolog, uwierzcie czepia się strasznie), co zaowocowało przedłużeniem prac do miesiąca. Praca pisana w LaTeXu, jako edytora użyłem eclipse galileo z pluginem texclipse, "kompilator" to miktex bodajże w wersji 2.7.

Projekt silniczka wyszedł tak sobie. Nie jestem zadowolony. Nie udało mi się zrobić wszystkiego co chciałem. Przede wszystkim nawaliło ładowanie plików md5, w efekcie nawet nie wiem, czy rozwiązanie animacji szkieletowej jest ok. Nie zrobiłem normal mappingu. Nie ma przeźroczystości. Za to udało mi się zrobić:
* deferred shading,
* shadow mapping,
* instancing,
* vertex blending,
* height mapping,
* dość mocno odseparowałem klienta od API, więc teoretycznie silnik jest wieloplatformowy :),
* GUI.

To może wydawać się nie wiele, ale ogrom pracy poszedł w uzyskanie przenośności. Poza tym, to był mój pierwszy prawdziwy projekt z grafiki 3d. Startując miałem średnie pojęcie o tym jak funkcjonuje DirectX. W sumie 31 tysięcy niepustych linii kodu (ogólnie jest 37 tysięcy), 17 shaderów, 1200 godzin pracy. Generalnie uznaję ten projekt za sukces, ale światła dziennego to on nie ujrzy ;)

Wnioski odnośnie LaTeXa dla potomnych:
* Eclipse Galileo ma funkcję sprawdzania poprawności kodu. Trzeba tylko dostarczyć mu słownik. Instrukcja choćby tutaj: http://www.jakubiak.eu/2008/06/eclipse-i-sownik-jzyka-polskiego.html. UWAGA! Sam nie korzystałem z takiego rozwiązania. Plugin Texclipse potrafi wykorzystać słownik Aspell do sprawdzania poprawności pisowni. Niestety pomimo chęci nie udało mi się znaleźć wspólnego kodowania plików dla eclipse'a i aspella. Pewnie jakoś się da, ale ... OpenOffcie całkiem nieźle poradził sobie z korekcją wszystkich literówek i to bezpośrednio na plikach tex (choć najpierw zawsze robiłem backup) ;)

* Gdyby ktoś potrzebował zamienić LaTeXa w coś innego niż PDF, to można skorzystać z polecenia oolatex, które stworzy plik ODT. Program znajduje się w paczce miktexa. Jeżeli nie działa to trzeba go poprawnie skonfigurować, np zainstalować javę i podać poprawne ścieżki w pliku konfiguracyjnym tex4ht. Ponadto będzie potrzebna paczka miktex-zip. Mi się udało, jak pokombinujecie to też wam się uda. Ale od razu powiem, że nie ma się co napalać. Formatowanie wychodzi zmasakrowane. Nie działają linki. Nie ma obrazków, choć na to pewnie da się coś poradzić. Za to jest poprawna treść, błędy pojawiły się tylko dla polskich znaczków w tytułach rozdziałów.

* Do zapisu matmy najlepiej korzystać z paczki amsmath. Potrafi sporo. W zasadzie udało mi się zapisać wszystko co chciałem z numerowaniem takim jak chciałem. Środowiska: equation, gather i cases. Polecenia \nonumber \numberwithin{equation}{section}.

* Przy 100 stronach już widać, że otwarcie dokumentu w OpenOffice trochę trwa. Możliwość rozbicia pracy na kilka plików w LaTeXu jest cudowna. Polecenie \input{}.

* Do listignów użyłem paczki listings. W zasadzie potrafi wszystko, ale nie udało mi się poradzić z jedną sprawą. Górna linia ramki wypadała dokładnie przez środek opisu. Gdyby ktoś chciał zmienić tytuł rozdziału z "Listings" na coś bardziej swojskiego dla polecenia \lstlistoflistings, to ja to zrobiłem tak:
\newpage
\section*{Spis listingów}
\addcontentsline{toc}{section}{Spis listingów}
\markboth{SPIS LISTINGÓW}{}
\newcommand\stdsection{}
\newcommand\stdaddtocontents{}
\let\stdsection\section
\let\stdaddtocontents\addtocontents
\def\section*#1{}
\renewcommand\addtocontents[3]{}
\lstlistoflistings
\let\section\stdsection
\let\addtocontents\stdaddtocontents

* Jest paczuszka nomencl do robienia nomenklatury. Niestety u mnie polecenie mające na celu wypisanie listy symboli nie zadziałało. Ostatecznie posłużyłem się wygenerowanym plikiem NLO z zestawieniem wszystkich symboli. Do wypisania użyłem środowiska tabular z zafiksowanymi szerokościami kolumn. \begin{tabular}{p{3cm}p{12.5cm}}.

* LaTeX nie usuwa sierotek, to jest wyrazów jedno literowych na końcu linii. Może dlatego, że w angielskim nie ma takich wyrazów ? Tak czy siak pomaga polecenie \nolinebreak zaraz po sierotce.

* Odradzam modyfikowanie przerw pomiędzy paragrafami \parskip. Mam wrażenie, że wartość ta jest używana nie tylko przy okazji nowego akapitu. Znacznie lepszy efekt wizualny da użycie wcięć \parindent. Nie warto też walczyć z brakiem wcięcia w pierwszym akapicie. W gruncie rzeczy tak jest lepiej.

* Nic tak nie poprawia czytelności jak wyraźna przerwa między A i B. Żeby zrobić pustą stronę bądź linię należy posłużyć się takim zapisem:
\newpage/line
\mbox{}
\newpage/line