poniedziałek, 14 czerwca 2010

"Tylko dwie rzeczy są nieskończone: Wszechświat ..."

Dzisiaj nie będzie ani o programowaniu, ani o fotografii. Dzisiaj chciałbym napisać o obserwacji jaką poczyniłem wczoraj, a do której wyjątkowo dobrze pasuje ten cytat:

"Tylko dwie rzeczy są nieskończone: Wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej." - Albert Einstein.

Wczoraj, to jest w niedzielę 13 czerwca 2010 roku, byłem w teatrze, gdzie byłem świadkiem dość szokującego dla mnie zachowania. Otóż obok nas siedziała dziewczyna w taki sposób, że podeszwa lewego buta znajdowała się na jej fotelu. Nie wiem jak to opisać, istotne jest to, że pobrudziła fotel na którym sama jeszcze siedziała. Dziewczyna moim zdaniem w wieku licealnym.

To, że nie wiedziała, że do teatru nie wypada przyjść w tenisówkach mnie nie zaskoczyło. To, że pobrudziła fotel też nie zrobiłoby na mnie wrażenia, wandalizm jest niestety dość codziennym zjawiskiem. To co mnie poruszyło w tej sytuacji to kompletna, bezkresna wręcz, bezmyślność naszej bohaterki.

Ludzie używajcie mózgu!

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.