piątek, 11 czerwca 2010

"Ciepło jest, chodźmy na spacer ..."

Tak to właśnie się zaczęło. Trzeciego czerwca rano było pochmurnie, ale ciepło. Postanowiliśmy z żoną pójść pod lotnisko i tam z aparatem polować na lądujące samoloty. Wychodząc trochę z obawą patrzyłem na pozostawiony na miejscu parasol. Na szczęście nie padało, w gruncie rzeczy słońce wyszło zza chmur jeszcze zanim doszliśmy na miejsce.

Nad lotniskiem krążyły dwa samoloty. Piloci najwyraźniej trenowali lądowanie, bo zaraz po dotknięciu ziemi maszyny podrywały się do dalszego lotu.


Po powrocie do domu zaczęło mi się kręcić w głowie, przed oczami ciemno. Długi pobyt na mocnym słońcu bez czapki skończył się udarem. Bardzo nieprzyjemne przeżycie i bardzo niebezpieczne.


W sobotę pojechaliśmy zjeść rybę w Sereczynie. Świetne miejsce i dają naprawdę smaczne ryby.

A na kolację gril w ogrodzie.

poniedziałek, 7 czerwca 2010

OpenGL i koordynaty pikseli

Aktualnie pracuję nad prościutką biblioteką do robienia graficznego interfejsu użytkownika. Potrzebna mi będzie do tworzenia kilku współpracujących ze sobą aplikacji. Jest to rozwiązanie "Immediate Mode", rysowanie odbywa się za pomocą OpenGL, natomiast świadomość urządzeń wejściowych uzyskana dzięki SDL.

No i jak to zwykle bywa natknąłem się na pewien problem. Otóż ramka rysowana wokół guzika była nie domknięta, brakowało lewego dolnego piksela.

Kod rysujacy ramkę:
glBegin(GL_LINE_LOOP);
    glVertex3f(vertexACoordX, vertexACoordY, 0.0f);
    glVertex3f(vertexBCoordX, vertexBCoordY, 0.0f);
    glVertex3f(vertexCCoordX, vertexCCoordY, 0.0f);
    glVertex3f(vertexDCoordX, vertexDCoordY, 0.0f);
glEnd();

Rozwiązanie znalazłem tutaj: link. Przy okazji wyszedł kolejny problem, faktycznie rozmiar ramki nie pokrywa się z tłem. Wychodzi na to, że trzeba sobie ręcznie poprzesuwać wierzchołki aby wszystko się ze sobą ładnie zgrało.

Wracając jednak do problemu, co jest przyczyną ? Podanie całkowitych wartości dla współrzędnych punktów sprawia, że rysujemy dokładnie pomiędzy dwoma pikselami. W celu uniknięcia tego problemu należy przesunąć współrzędne o wartość 0.5, alternatywnie możemy włączyć wygładzanie linii:

glEnable(GL_LINE_SMOOTH);

To drugie podejście owocuje niestety pogrubieniem naszej ramki.


Odkryłem też pewien zaskakujący brak w SDL, nie daje możliwości zmian położenia i rozmiaru okna. Znaczy da się to zrobić, ale wymaga samodzielnego wykonania czynności specyficznych dla danego OSu.

poniedziałek, 31 maja 2010

Majowe fotki

Trochę mi się uzbierało fotografii przez ostatni miesiąc. Wczoraj udało mi się te najfajniejsze zamieścić na Picasie. Niektórzy już nawet zdążyli je tam skomentować ;)

Najstarsze są zdjęcia ruchu ulicznego zrobione nocą. Przy ich robieniu powstała również ogromna panorama, 180 stopni, 18 x 1 zdjęć, o wymiarach ~27 tysięcy na ~4 tysiące pikseli.
Najfajniejsze wychodzą zdjęcia autobusów. Te wszystkie boczne/górne światła, wyświetlacze LED dają super efekty. Myślę o wybraniu się na jakiś punkt znajdujący się nad ruchliwą drogą (most, kładka etc.) tak aby uzyskać zdjęcia bardziej na wprost.


Kolejny album to zdjęcia zrobione w ogrodzie. Małe kociaki są urocze, zabawne, wszechobecne i koszmarnie ruchliwe. Tego dnia zrobiliśmy im dobrze ponad 200 fotek, i prawie na wszystkich są rozmazane :) Ta roślina, której zdjęcie tu podlinkowałem to Rododendron.



Dwudziestego drugiego maja późnym wieczorem niedaleko Łodzi przeszła burza. Zdjęcia robione ze statywu z automatycznym wyzwalaniem przez interwalometr (czuję się trochę mniej zdradzony :) ). Jak zauważył Wojciech Toman bardzo zaszumione. Winny jest, jak sądzę, przede wszystkim bardzo długi czas naświetlania. Drugim winowajcom jest Picasa, która nieco przesadziła z dodaniem ekspozycji, przy konwersji z raw do jpg.


Na koniec fotografie przyrody, które robiliśmy przez cały maj. Są to głównie ujęcia z Łodzi, okolice naszego mieszkania oraz park Poniatowskiego.

Fusów ciąg dalszy

Dotychczasowa wersja linuxowego demona montującego budowane przez nas urządzenie (pisałem o tym: link) w formie systemu plików była napisana w Pythonie i miała bardziej charakteru "proof of concept", zbadania czy to ma sens. Nadszedł jednak dzień w którym zapadła decyzja o przepisaniu demona w Cpp.

Oczywiście postanowiłem skorzystać z biblioteki libfuse. Pomyślana jest ona bardzo podobnie do biblioteki dokan, czy może raczej dokan jest opracowany na podobieństwo libfuse.

Wydawało mi się, że ze względu na to podobieństwo zadanie powinno być dość proste. Okazało się jednak, że biblioteka jest dość kiepsko udokumentowana. W zasadzie co by się nie chciało zrobić, to trzeba najpierw przekopać się przez kod biblioteki.

Jednym z pierwszych problemów na jakie się natknąłem było to, że uruchomienie libfuse poprzez funkcję fuse_main startuje demona i zamyka proces. W efekcie o normalnym debugowaniu możemy zapomnieć. Pod Windowsem też się nie dało, ale tam chociaż można było robić logi w konsoli. Niestety zamknięcie procesu oznacza utratę dostępu do uchwytów konsol.
Wujek google zapytany o "debug fuse" poradził mi aby użyć opcji -d. Przełącznik ten sprawia, że fuse_main nie zamyka procesu i zaczyna wypisywać logi. Daje to również dostęp do konsoli naszym funkcjom.

Drugim dość poważnym problemem jest to, że Linux po jakimś czasie głupieje. Objawia się to tym, że nasz system plików nagle przestaje działać, a naszym oczom ukazuje się niewiele mówiący komunikat o błędzie. Zdezorientowani dodajemy logowanie w podejrzanych miejscach, cofamy ostanie zmiany, zaczynamy szukać na oślep co może być przyczyną. Pół dnia później resetujemy system i wszystko działa jak należy :(


Przy okazji tego "projektu" musiałem przenieść, część kodu z Winodwsa na Linux. Jak na razie odkryłem, że obsługa socketów nie wiele różni się pod tymi systemami. Zobaczymy co będzie z portem szeregowym.

poniedziałek, 3 maja 2010

Fotografie

Reg zasugerował abym podzielił się fotkami, za pomocą Picasa Web Albums. Tadam tadam, oto zdjęcia:

Jedne z pierwszych zdjęć jakie zrobiliśmy, a także ujęcia z wizyty na lotnisku.



Nasze próby z makro w ogrodzie i nad stawem.



Pojechaliśmy do zoo.

środa, 21 kwietnia 2010

Nikon d5000

Jakiś czas temu postanowiliśmy z żoną kupić sobie cyfrową lustrzankę. Żadne z nas nie miało w tej kwestii żadnych doświadczeń, więc sprawa wcale nie była prosta. Po zapoznaniu się z opinią znajomego profesjonalnego fotografa, przewertowaniu dziesiątek recenzji oraz cenników, zdecydowaliśmy się na tytułowego Nikona d5000.

Pierwsze wrażenie: Skomplikowany. Miałem w swoim życiu parę aparatów fotograficznych, również lustrzankę ("analogową") i pierwszy raz nie wiedziałem jak wyostrzyć obiektyw. Tak wiem do czego służą te pierścienie, ale kiedy zdjęcie jest ostre?
Rozgryzienie tych wszystkich symboli i guzików trochę trwa, ale kiedy już je opanujemy ... o radości!
Drugie wrażenie: W życiu nie miałem tak szybkiego aparatu w rękach. Włącza się szybko, wyostrza się szybko, ustawia się go szybko, zdjęcia też robi szybko. Chwila nie uwagi i ma się parędziesiąt zdjęć na karcie. Jestem zachwycony.
Trzecie wrażenie: Z obiektywem Nikkor 18-105 mm, waży 1060 gram. Noszenie go na szyi nie wchodzi w grę. Wybór torby jest zadaniem trudnym i wymaga użycia linijki, miarki bądź innego sprzętu o zbliżonych właściwościach. Skończyło się na torbie na ramię marki OptiCam. Aparat z założonym obiektywem wchodzi na styk, ale dostęp do niego jest bardzo wygodny.
Podsumowanie: Aparatem cieszymy się już od półtora tygodnia i wciąż nacieszyć się nie możemy. To niesamowite ile radości sprawia mi robienie kolejnych zdjęć. To był bardzo dobry zakup.

Przykładowe fotki, oryginały mają wymiary 4288 x 2848:




EDIT
Dodałem dwa zdjęcia.

poniedziałek, 12 kwietnia 2010

IGK 2010

Miałem okazję wziąć udział w VII Ogólnopolskiej Konferencji Inżynierii Gier Komputerowych, czyli tzw. IGK 2010. Pojechaliśmy tam w cztery osoby jako delegacja katedry.

Muszę stwierdzić, że mocno się zawiodłem. Niestety przedstawione prezentacje były znacznie poniżej moich oczekiwań.
To czego mi zabrakło to "praktycznych prac". Fajnie jest się dowiedzieć, że istnieje jakaś technika/technologia/algorytm/..., ale znacznie fajniej jest od razu dowiedzieć się z jakimi problemami wiąże się implementacja, jakie są alternatywy i jak wypada wydajność oraz jakość wyników w konfrontacji z alternatywnymi rozwiązaniami.
Bez tej "praktycznej" części dostajemy coś w stylu tutoriala bądź reklamy.

Sama impreza została zorganizowana bardzo dobrze, był nawet transport z/do hotelu.

Oto lista prezentacji w których wziąłem udział:
1. "Środowisko Adobe AIR jako platforma do budowania gier"
2. "Przegląd gier i przemyślenia związane z technologią Adobe Flash"
3. "Modelowanie obiektów opartych na sile sprężystości"
4. "Interfejs jako podstawowy element rozgrywki"
5. "Implementacja sferycznej metody wizualizacji terenu przy użyciu algorytmu HRTMR"
6. "Wykorzystanie explicit multisample do poprawy jakości deferred shadingu"
7. "Tworzenie gier i aplikacji na platformie iPhone OS z wykorzystaniem UIKit, Core Animation i cocos2d"
8. "Elementy logiki rozmytej w grach komputerowych"
9. "Model zachowań obiektów w symulatorach pola walki i komputerowych grach wojennych"

Na prezentacji "Projektowanie Interfejsów Użytkownika na potrzeby aplikacji interaktywnych" byłem tylko częściowo.

Prezentacja "Postmortem AI w Call of Juarez" się nie odbyła. Szkoda, bardzo na nią liczyłem.

Moim zdaniem najlepszą prezentacją była "Implementacja sferycznej metody wizualizacji terenu przy użyciu algorytmu HRTMR".

Alternatywne opinie:
Xion
Adam Sawicki