Archive for 2008

Zmiany na lepsze?

Postanowiłem, że należałoby wreszcie zrobić porządek z biblioteką NLib oraz z silnikiem NIne. Niestety jak się okazało przy projektowaniu gry (myślę nad klonem Tetrisa w 3D), aktualny stan silnika nie pozwala na jego rozbudowę i pisanie w oparciu o niego jakiejkolwiek gry. Dlatego stwierdziłem, że lepszym pomysłem byłoby zaprojektować grę, a następnie do niej odpowiedni interfejs, mając na uwadze ponowne użycie kodu do tworzenia innych gier.

Na początek zająłem się biblioteką NLib. Zamierzam kompletnie uniezależnić się od wyjątków, ponieważ uważam, że są one dobre do zwykłych programów, w których występuje wiele sytuacji wyjątkowych. W grze są niepotrzebne, gdyż jeżeli nastąpi sytuacja wyjątkowa, to grę i tak należy zamknąć, a poza tym podobno obsługa wyjątków spowalnia kod. Zamiast tego błędami będzie sie zajmował Logger, do którego będą trafiać wszystkie komunikaty (nawet te najmniej ważne), dzięki temu będzie wiadomo co i kiedy poszło nie tak. Dlatego będzie wymagany do używania jakiegokolwiek modułu z biblioteki.
Ważną zmianą jest też wprowadzenie obsługi Unicode. Niestety standardowe strumienie zapisujące do plików, nie zapisują ich w tym kodowaniu, dlatego zacząłem pisać własny strumień oparty na funkcjach WinApi. Z początku będzie obsługiwał tylko Little Endian, ale myślę nad dodaniem obsługi plików zapisanych jako Big Endian i ANSI (w trybie Unicode projektu). Z tego strumienia będzie korzystał również Logger. Oczywiście Unicode będzie obsługiwany tylko wtedy, gdy w ustawieniach projektu kodowanie będzie w tym trybie. W trybie ANSI, strumień będzie zapisywał tylko w ANSI.

Uważam, że należy iść z duchem czasu, a nie pozostawać w epoce kamienia łupanego :D.

Problemy z plikami afxres.h oraz winres.h w Visual C++ EE 2008

Mała porada dla tych, którzy chcą otworzyć stare projekty, które zawierają pliki *.rc.
Przy próbie kompilacji takich projektów, może wyskoczyć błąd, który oznajmia, że nie mamy plików podanych w tytule.

Rozwiązanie jest proste, wystarczy nazwę tego pliku podmienić na windows.h. Dzięki temu można korzystać z zasobów ładowanych do pliku *.exe. (Sprawdzałem tylko na prostym projekcie z książki Programowanie w DirectX Masona McCuskey’a).

W Visualu C++ EE, zablokowana jest możliwość otwierania plików *.rc, jednak nie tak do końca, albowiem wystarczy kliknąć na takim pliku prawym przyciskiem myszy, a następnie wybrać Open with… i w oknie wybrać Source Code (Text) Editor. Według mnie zawsze jest to jakieś rozwiązanie.
EDIT: wystarczy kliknąć na takim pliku prawym przyciskiem myszy i opcję View Code. Thx Tarains.

Spotkałem się również z takim problemem, jak brak zdefiniowanej stałej IDC_STATIC (używanej do tworzenia szablonów okien dialogowych).
Kod błędu:
error RC2104 : undefined keyword or key name: IDC_STATIC

W takim przypadku należy do pliku resources.h dodać następujący kod:

#ifdef IDC_STATIC
#undef IDC_STATIC
#endif
#define IDC_STATIC (-1)

Clever

Fotka clever
Od jakiegoś czasu stacja komercyjna TVN emituje program o znaczącej nazwie “Clever – widzisz i wiesz”. Muszę przyznać, że jest on całkiem fajny. Prowadzący doświadczenia “profesor” Halama wyjaśnia zjawiska bardzo przystępnie (może trochę jak do dzieci) i są to ciekawostki warte uwagi. Wszystkie doświadczenia są dobrze zaprezentowane, z drobną dawką humoru. Myślę, że mogę polecić go każdemu :).

O wydajności

Reg spłodził ostatnio ciekawy artykuł o wydajności wczytywania tekstur. Bazuje on na teście, który on sam przeprowadził, co ciekawe, przy którym restartował kompa n-razy. Muszę przyznać, że inicjatywa, choć pracochłonna, na pewno się opłaciła, ponieważ po przeczytaniu artykułu, nie muszę się martwić o to, jak zoptymalizować wczytywanie tego typu plików. Mogę od razu powiedzieć, że najlepszym według mnie formatem będzie DDS z mipmapami generowanymi po załadowaniu (nie wczytywane z pliku) + własny VFS z kompresją danych. Wbrew podsumowaniu Rega nie zastosuję formatu JPEG, ponieważ nie lubię stratnej kompresji :).

Link do artykułu

PS. Więcej takich inicjatyw :).

Geek syndrome

Ostatnio na kanale wywiązała się ciekawa dyskusja na temat dziwnej choroby jaką jest Zespół Aspergera. Postanowiłem się przyjrzeć temu dziwnemu schorzeniu i natychmiast zauważyłem, że niektóre objawy idealnie pasują do mnie.

Oto kilka z nich:
– lubię kolekcjonować różne rzeczy (chociaż na to już się trochę uodporniłem),
– lekka aspołeczność, ale to raczej z przyzwyczajenia, ponieważ jestem jedynakiem,
– informatyka :),
– używam skrótów myślowych i ciężko jest mnie zrozumieć.

Pomimo tego, że kilka z objawów się zgadza, nie czuję, że jest ze mną źle, a przynajmniej mogę poszczycić się doborowym towarzystwem (Einstein, Newton). Niestety wadą tego jest, że nie zwalnia matury z polskiego ;).

Co nowego?

Czas ferii jak wiadomo powinien być czasem wolnym, przeznaczonym na odpoczynek, ale jak wiadomo takich durnych pomysłów nigdy się nie realizuje, więc i ja tego nie zrobiłem.
Początek ferii zaczął się paradoksem, otóż trzeba było przygotować prezentację na historię (oczywiście nic za darmo :) ). Na szczęście cel udało się zrealizować szybko, choć przy 38 stopniach gorączki było to nie lada wyczynem, ponieważ przygotowywałem ją wraz z kilkoma kolegami.
Następnym punktem programu ferii było drugie podejście do egzaminu praktycznego na prawo jazdy, które zakończyło się wynikiem pozytywnym. Wszystkich z Myszkowa i okolic proszę uprzejmie informuje, że od lutego należy się bardziej rozglądać na drodze :D.
Koniec ferii to wypad do Białki Tatrzańskiej na narty, pogoda była dobra (idealna to -6 C), zabawa przednia, polecam.

Oczywiście czas ferii nie zleciał mi tylko na tym, co wymieniłem wyżej. Już przed feriami zacząłem się interesować shaderami. Zainwestowałem w książkę “Język Cg”, ale stwierdziłem jednak, że potrzebuję nie tylko wiedzy o samych shaderach, ale również o sposobie ich implementacji, dlatego postanowiłem przeczytać cały dział Programming Guide z pomocy DXSDK. Zadanie długie, ale myślę, że się opłaci.

Oto pierwszy przykład użycia przeze mnie efektów DirectX (na podstawie sampla BasicHLSL).

Pobierz