Posts

Showing posts from 2009

Nowe rzeczy

Image
Trochę nowości na froncie :] Doszło oświetlenie na shaderach, OCTree w końcu porządnie mi działa również VBO. Więc ogólnie dużo zmian zaszło :] Kolejna zmiana to silnik w którym doszedł teren. Póki co nic nadzwyczajnego ale robiłem go na szybko na potrzeby zaliczenia na przedmiot. Po drodze dodałem trochę rzeczy bardziej technicznych np. arcball ale o tym napiszę w późniejszym poście :]

Samochody :]

Image
Jako, że dzisiaj miałem PGK zrobiłem kolejny krok w produkcji projektu który zapoczątkowałem na nim. No więc zgodnie z wcześniejszymi założeniami dokonana została podmiana motoru na samochód. Po niewielkiej walce z parametrami fizyki samochodu uzyskałem przyzwoite rezultaty. Screeny poniżej :] postaram się też w niedalekiej przyszłości zamieścić jakiś filmik pokazujący jak to wygląda. Udało mi się również załatwić trochę spraw z uczelnia więc postaram się odmrozić projekty którymi się zajmuje :]

Postępy

Image
No więc minął kolejny okres czasu i trochę nowości. Udało mi się oddać zadanie na PGK poniżej widać jak wyglądała oddana wersja. Będę się starał wykończyć grę, zamienię motor na samochód, dopracuje grafikę, dodam gui i inne tego typu sprawy. Zmiana pojazdu jest niestety wymuszona gdyż jak zacząłem pisać fizykę motoru okazało się, że trochę mnie ona przerasta. Jest mnóstwo rzeczy o których się nie myśli gdy się zaczyna brać za takie rzeczy a potem jest jeszcze gorzej. Dlaczego samochód ? Bo fizyka samochodu jest dużo prostsza wiec będę mógł ją dopracować lepiej i ogólnie skupić się na innych aspektach tworzenia gry niż na tym aby pojazd nie wywracał mi się na zakręcie. Plusem tego, że zacząłem zajmować się najpierw bardziej skomplikowanym modelem fizyki jest to, że w końcu udało mi się przeanalizować klasy od pojazdów bulleta. Okazało się, że koła działają na zasadzie pojedynczego promienia na koło idącego w kierunku tego koła. Zawsze myślałem, że mechanizm ten jest dużo bardziej skompl

Postępy

Image
No więc niestety ostatnio trochę miałem mało czasu, więc prace nad projektem na PGK trochę spowolniły. Jednak mimo to udało mi się trochę je posunąć do przodu. Wprowadziłem parę zmian w silniku aby rozwinąć jego możliwości i dopasować go tak aby spełniał wymagania zadania. W ten oto sposób klasa kamery zyskała nowe funkcjonalności: kontrolę viewporta kontrolę macierzy projekcji Z powodu, że projekcję dla kamery ustawia się bardzo rzadko, rezygnowałem z funkcji Frustum i Ortho na rzecz własnych implementacji przekształceń wrzucanych do OpenGL'a poprzez LoadMatrix. Kolejną nowością jest podczepienie fizyki. Na razie obsługuję tylko grawitację ale postaram się aby w najbliższych dniach pojawiła się też początkowa obsługa motoru. No i aby nie być gołosłownym poniżej screen z aktualnego stanu prac :] widać na nim podgląd fizyki oraz użyte 2 kamery jedną do głównej sceny w trybie perspective i drugą do wyświetlania miniaturki w ortho.

Studia

Image
W tym semestrze udało mi się dostać na kurs Podstawy Grafiki Komputerowej (PGK) realizowany na Uniwerku. Okazało się, że będę miał możliwość korzystania tam z wcześniej przygotowany narzędzi dzięki czemu będę miał okazję rozwijać swój silnik na którym stoją tanki (na które niestety ostatnio nie mam zbytnio czasu jak i niestety na samo rozwijanie silnika). Dodatkowo w końcu od pewnego czasu wziąłem się za siebie jeśli chodzi o nowoczesne technologie graficzne. Były ku temu 2 okazje: jedna to Liris a druga to seminarium z programowania gier. Powiedzmy sobie szczerze, że naruszyłem puszkę pandory i nawet o tym nie wiedziałem. Ale jest to też dobra nauczka na przyszłość. Zawsze myślałem, że nie jestem tak daleko od możliwości stworzenia czegoś w 3D na poziomie graficznym odpowiadającym aktualnym standardom. Niestety byłem w błędzie i tak naprawdę nie byłem świadom nawet jak daleko cała technologia zaszła w ciągu ostatnich paru lat. Prawda jest taka, że jeśli ktoś zadowolony jest tylko z no

Nowości

Dawno nie pisałem a trochę nowości się pojawiło. No więc tak po kolei : Zmieniona została nazwa zespołu. Od tej pory nazywamy się All Digital Works. Casual został ukończony i oficjalnie rozpoczęliśmy już prace nad kolejnym projektem :] więcej informacji oraz screeny z casuala można znaleźć na naszej stronie link

Ciężki błąd

Image
No więc tym razem podziele się swoimi doświadczeniami z walki nad pewnym błędem. Poszukiwałem go już od dłuższego czasu. Efekt jego działania widać po lewej stronie na górze. Na dole pokazane jest jak powinnien wyglądać ten ekran.  Sytuacja taka zdażała się tylko na nietórych komputerach. W moim przypadku zaobserwowałem to na 2 laptopach ze zintegrowaną kartą graficzną intela oraz systemem M$  Vista. Osobiście posiadam również lapka z wymienionymi parametrami ale u mnie błąd o dziwo się nie pojawił. Pierwsze moje przypuszczenia dotyczyły naruszenia pamięci. Kiedyś miałem podobne objawy w takiej sytuacji. Wyszedłem jeden element poza tablice i u kolegi na kompie znikał jeden z paneli w grze. Jednak po przeszukaniu całego kodu, napisania managera pamięci oraz sprawdzenia go narzędziami do poszukiwania wycieków nie udało mi się odnaleźć przyczyny. Zacząłem więc testowanie poszczególnych fragmentów gry. Okazało się że wyłączenie jednej z animacji w grze (dokładniej jej rysowania lub ładowa

Trochę o dziedziczeniu

No więc każdy kto używał dłużej C++ na pewno korzystał lub korzysta z dziedziczenia ja w miarę niedawno miałem okazję doświadczyć ciekawej sytuacji, a oto jej uproszczona forma: # include " iostream .h" class a { public: a(){}        ~a(){ printf ("A"); } }; class b:public a { public: b(){} ~b(){ printf ("B"); } }; int main ( void ) { a* val = new b(); delete val ; system(" pause "); return 0; } No i tutaj powstaje pytanie czy wyświetlona zostanie wartość "BA " czy "A" ? Dla wielu będzie oczywiste, że wyrzucona zostanie "BA". Niestety jak to w życiu bywa nic nie jest takie proste jak się wydaje. Program wyrzuca "A" :] powód jest prosty: typ a nic nie wie o tym, że dziedziczy po nim b a to właśnie jego usuwamy. Więc dla deleta oczywiste jest żeby wywołać jedyny destruktor o którym wie czyli  a.  No i pytanie: jak to ominąć ? rozwiązanie okazuje się bardzo proste wystarczy linijkę:         ~a(){

Trochę o narzędziach

No więc jak to bywa tworząc silnik potrzeba stworzyć też narzędzia takie jak wszelkiej maści Edytory.W moim przypadku można podzielić go na 2 grupy narzędzi: 2D i 3D.  Narzędzia do grafiki 2D Są to własnoręcznie napisane edytory do pisane w C# lub C++. Na chwilę obecna posiadam: edytor atlasów tekstur edytor animacji edytor systemów cząsteczkowych  Planuję również wykonanie edytor GUI  edytor layerów (sceny podzielone na warstwy składające się z wielu obiektów) Narzędzia do grafiki 3D Na chwilę obecną jest to plugin do blendera napisany w Pythonie. Umożliwia on eksportowaniemodeli, materiałów oraz całych scen (w formacie XML). Jego obsługa jest intuicyjna gdyż składa się zaledwie z paru przycisków. Jednak w przyszłości mam zamiar zintegrować go z głównym oknem edycji i umożliwić wygodną edycję mechaniki gier oraz eksportowanie skomplikowanych animacji, sekwencji zdarzeń oraz całej mechaniki tak aby plugin ten stałsię w miarę uniwersalnym narzędziem do tworzenia małych gier.

Postępy

No więc projekt oddany no i zaliczony :] a więc do przodu. Niestety albo stety podczas prac nad nim zmuszony byłem naruszyć kod zajmujący się grafiką 2D która teraz nie działa w 100% poprawnie. Dlatego postanowiłem, że dla równowagi na chwilę obecną będę główną wagę przyładał właśnie to tej części silnika. W końcu jakby nie patrzeć to w niej ma on swój początek i to ona na chwilę obecna jest podstawową jego częścią (najbardziej rozbudowaną).  No ale koniec ględzenia a czas co nieco o pisaniu, ostatnio podczas gdy przeglądałem funkcje bulleta natrafiłem na ciekawy fragmencik kodu ( btBoxShape::getVertex(...) ) służący do pobierania wierzchołków sześcianu. Nic by nie było wtym dziwnego gdyby nie to, że zastosowano tam fajną sztuczkę z bitami. Wzorując się trochę na niej napisałem pobieranie wierzchołków BBox'ów w moim silniku. ogólnie zasada jest prosta mamy 8 wierzchołków ponumerowanych {0,1,..,7 } wykorzystuję fakt że zapis bitowy tych liczb to kolejno {0000,1000,0100,1100,0010,10

Filmik z Tank'ów

No więc jako, że dzisiaj muszę wysłać projekt, bo niestety czas się skończył, to załączam filmik jak projekt wygląda na chwilę obecną :

Zmiany w silniku i Fizyki Cd.

Image
Ostatni czas upłynął pod znakiem zmian i dobrych nowin. Tanki stały się moim zaliczeniem na jeden z przedmiotów na studiach a więc dzięki temu nie będę musiał się za bardzo odrywać od ich tworzenia przez najbliższy czas. Jak widać w temacie nastąpiły również pewne zmiany w moim silniku. Z powodu, że silnik się rozrusł a nie wszystkie jego elementy będą potrzebne we wszystkich projektach na nim opartych. Zdecydowałem się na rozbicie go na moduły z których każdy jest oddzielną biblioteką. Podział ten można obejrzeć poniżej.   Dodatkowo w ostatnim czasie rozwinąłem fizykę. Wcześniejsze problemy z bulletem powoli się rozwiązują a ja utwierdzam w przekonaniu, że dokonałem dobrego wyboru decydując się tą właśnie bibliotekę. Podczas pisania fizyki skupiam się głównie na elementach potrzebnych do Tanków gdyż terminy gonią:] (w końcu jakiś deadline:]) a do zrobienia jest dość sporo.  Podczas pisania staram się też o wygodę użycia fizyki, starając się przy tym nie ograniczać możliwości oferowany