Friday, December 11, 2009

Nowe rzeczy

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 :]

Thursday, November 5, 2009

Samochody :]

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 :]



Sunday, November 1, 2009

Postępy

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 skomplikowany a tutaj takie zaskoczenie.

Monday, October 19, 2009

Postępy

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.

Thursday, October 15, 2009

Studia

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 normal mapingu i prostej parallaxy. Nie ma co już szukać już miejsca wśród twórców nowoczesnych gier. Gry na aktualnym poziomie to ogromna ilość technik które rozwijały się bardzo prężnie w kilku ostatnich latach.

Okazało się, że samych technik wywodzących się z parallaxy jest kilkanaście. A jest przecież jeszcze relief mapping którego odmian też jest dość sporo a o różnego typu cieniach nie wspomnę.

Dlatego aktualnie dość sporo czasu poświęcam na zgłębianie dokumentacji związanej z powyższą tematyką. Dzisiaj zacząłem też wykonywać zadanie na zajęcia z PGK. Mam zamiar zrobić prosty symulator motoru, niestety póki co dość sporo czasu zajęło mi tworzenie grafiki do niego więc z samej symulacji nie za dużo póki co jest do pokazania. A to taki screen jak to wygląda na chwilę obecną. Postaram się w miarę regularnych odstępach czasu wrzucać kolejne fazy prac.

Sunday, September 20, 2009

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

Monday, May 25, 2009

Ciężki błąd

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 ładowania textury) powodowało że gra zaczynała działać normalnie. No więc poprawiłem dla pewności cały system animacji ale również to nie pomogło.  W końcu trochę zrezygnowany napisałem podgląd załadowanych tekstur aby przejrzeć wszystkie textury okazało się że jedna z textur na kompie gdzie jest błąd wygląda inaczej niż na pozostałych. 

Ogólnie podsumowując błędem okazało się rozszeżenie OpenGL'a większość textur ładuję z formatu dds który podaje mi format jaki mają mieć textury. Pozostałe (PNG,TGA itp.) ładowałem do open GL'a: GL_ARB_texture_compression  przy pomocy tego rozszeżenia.  Jak się okazało mimo, iż rozszeżenie takie było dostępne to musiało być obsługiwane inaczen niż na reszcie komputerów. 

No i na poszukiwanie takiego małego błędu zeszło mi ostatnio naprawdę dużo czasu . :]

Sunday, April 12, 2009

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(){ printf("A"); }
zamienić na:        
virtual ~a(){ printf("A"); }
Warto o tym wiedzieć przy programowaniu gdyż u mnie sprawiało to dość sporo problemów przy pisaniu klas zarządzających obiektami :]



Friday, March 27, 2009

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.

Tuesday, January 27, 2009

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,1010,0110,1110} a więc mamy tutaj wszystkie permutacje pierwszych 3 miejsc dla {0,1}. 

Korzystajac z tego przyjmuje, że bierwszy bit (bX) odpowiada za X , drógi bit (bY) za Y a trzeci (bZ) za Z apisujemy funkcje:

if (bX == 0 ) minX else maxX;
if (bY == 0 ) minY else maxY;
if (bZ == 0 ) minZ else maxZ;

Prosto krótko i jednocześnie wygodnie. U mnie kod wykorzystujący ten trik wygląda tak:

inline CVector3f &getPoint(IN unsigned int a_uiIndex)
{
return CVector3f((a_uiIndex&1 > 0)?max.getX():min.getX(),
(a_uiIndex&2 > 0)?max.getY():min.getY(),
(a_uiIndex&4 > 0)?max.getZ():min.getZ());
}

Sunday, January 25, 2009

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ą :


Saturday, January 17, 2009

Zmiany w silniku i Fizyki Cd.

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 oferowanych przez bulleta.  A niestety okazuje się, że nie jest to takie proste jak by się wydawało i pewnie jeszcze w trakcie pisania dość sporo się zmieni. 

Kolejną nowinką jest to, że projekt dorabia się powoli porządnego UML'a oraz dokumentacji. Najpierw będą to moduły zajmujące się grafiką3D i fizyką a potem będę starał się uzupełniać braki w pozostałych projektach.