czwartek, 19 lipca 2007

Blog w zawieszeniu

Póki co zawieszam działalność tego bloga na rzecz mojej strony domowej która znajduje się tutaj:

http://www.moriturius.ovh.org/

http://www.moriturius.wordpress.com/

wtorek, 17 lipca 2007

Nowa strona?

Hmm tak myślę, że teraz póki mam wakacje powinienem zająć się zrobieniem własnej strony internetowej. To by znaczyło oczywiście że AGE pójdzie na jakiś czas w odstawkę, ale po obejrzeniu strony Tarains'a i odkryciu, że serwer www.ovh.pl oferuje całkiem dobre warunki postanowiłem wreszcie zabrać się za stronę domową.

Tak więc ageNet będzie musiało troszkę poczekać :)

AGE małe niedopatrzenie

Ostatnio nie kombinowałem specjalnie przy AGE ponieważ byłem zajęty rekrutacją na studia ;)
Okazało się, że dostałem się tam gdzie chciałem więc teraz mogę już pełni poświęcić się kodzeniu.

W moim pięknym AGE odkryłem takie małe niedopatrzenie na które początkowo nie zwróciłem uwagi... Mianowicie - na początku chciałem wcisnąć tam jeszcze obsługę UDP oraz TCP/IP, jednak gdzieś mi to umknęło. Odkryłem to jednak dopiero jak zacząłem pisać gierkę o której pisałem w poprzednim poscie :D

Dzisiaj postaram się rozpocząć prace nad zagubionym modułem ageNet ;)

wtorek, 10 lipca 2007

AGE: Faza testów

Teraz moje wspaniałe AGE wbiegło wręcz w fazę testów, która po prostu polega na tym, że spróbuję napisać sobie gierkę ;)

Podczas pisania postaram się wyłapać wszystkie niewygody używania tej biblioteki i od razu je poprawiać, żeby AGE stało się lepsze :P

AGE Accelerated

Po pierwsze - rozważania z poprzedniego posta zakończyłem. Zdecydowałem się narazie na używanie ID3DXSprite i zupełne olanie rysowania prostokątów :)

Teraz do rzeczy. Ostatnio zauważyłem, że wydajność mojego silniczka straszliwie spadła - podczas rysowania 1000 spritów wcześniej miałem 350 FPS, a teraz 120 FPS....

Winowajcą okazało się pewne ustawienie D3DPRESENT_PARAMETERS. Otóż problematyczne okazały się pola: EnableAutoDepthStencil wraz z AutoDepthStencilFormat tej struktury. Po ustawieniu EnableAutoDepthStencil na false okazało się że FPS zwiększyło się ze 3 razy :)

Pomijam już fakt, że kiedy włączę pełny ekran to FPS zwiększa się jeszcze bardziej. Taka wydajność na razie wystarczy żeby kodzić niewielkie gierki, ale co jeśli zechce zaimplementować particle engine? Cóż. o tym pomyśli się później :)

Bitwy wydajnościowe

Dzisiaj zdążyłem przetestować już kilka sposobów renderowania w celu sprawdzenia który byłby najlepszy [czyt: najszybszy]. Mam 3 kandydatów:

  • Można użyć D3DXSprite do rysowania co jest bardzo wygodne, ale problem pojawia się z wywołaniami Begin() i End(). Wywoływanie ich przy rysowaniu każdego pojedynczego sprita jest BARDZO niewydajne :) Koncept więc jest taki, żeby wywoływać je na początku i na końcu sceny. Ok. Tak może być. Oczywiście przed narysowaniem tekstu lub linii trzebaby wywołać metodę Flush() bo inaczej znajdą się one za wszystkimi spritami, a nie tam gdzie powinny. Ale co jeśli będę chciał narysować wypełniony kolorem prostokąt? Można użyć metody ColorFill() z IDirect3DDevice9, ale to jest równie wydajne co kupowanie jabłek po jednym i przynoszenie każdego do domu. Z kolei jeśli użyję DrawPrimitiveUP() to jeśli nie wywołam Flush() to oczywiście prostokąt rysowany jest za spritami, a jeżeli ją wywołam to prostokąt w ogóle nie jest rysowany!
  • Drugi sposób na rysowanie to użycie vertex bufferów. Niby dobry sposób, ale jak będę chciał zmienić którykolwiek z wierzchołków to trzeba użyć dość wolnego Lock()'a...
  • Trzeci sposób to rysowanie wszystkiego za pomocą DrawPrimitiveUP() problem w tym, ze wszystkie transformacje wierzchołków musiałbym robić na własną rękę co też mogłoby być średnio wydajne ;)
Podsumowując - nie ma złotego środka. No chyba że wymyślę jeszcze jakiś inny sposób albo dowiem się dlaczego DrawPrimitiveUP() nie działa po wywołaniu Flush()'a...

poniedziałek, 9 lipca 2007

AGE: po[d]stępy

Uff dzisiaj cały dzień się trudziłem z przywracaniem urządzenia D3DDevice w celu umożliwienia zmiany trybu graficznego i przełączania pomiędzy pełnym ekranem a oknem. Później stwierdziłem, że jak już pełny ekran to trzeba się też uporać z przestraszliwym ALT-TABem ;) Początkowo miałem pewne problemy, ale poczytałem trochę i zniknęły :)

Dodatkowo poprawiłem też funkcje wejścia klawiatury i myszki. Po drodze zakodziłem je jeszcze w Direct Input, ponieważ miałem pewne problemy z pozycją kursora na pełnym ekranie, ale wystarczyło tylko zmienić styl okna na WS_POPUP i już wszystko jest wporządku :) Dlatego też DInput poszedł się... w odstawkę. Powróciło stare dobre WinAPI ;)

Wnioski są 2:
- rozwiązanie jednego problemu od razu wpędza nas w drugi więc, jeśli założymy że zrobimy coś żeby mieć "z głowy" to może to być największy błąd naszego życia :)
- nie wszystko złoto co M$'a :P

niedziela, 8 lipca 2007

AGE-0.1: Final Countdown

Brzmi pięknie. Zupełnie jakbym już kończył :)

W pewnym sensie tak jest, ponieważ zaimplementowałem co chciałem i nawet da się na tym napisać grę. Rzecz w tym, że zanim wypuszczę wersję 0.1 czeka mnie jeszcze troche poprawiania niektórych rzeczy i małego przeorganizowania kodu. Jeżeli podczas najbliższego tygodnia mi się to nie znudzi to myślę, że AGE-0.1 będzie gotowe do tego czasu :)

sobota, 7 lipca 2007

Programowanie Toolsów ^^

Jako że kolizje są już skończone właśnie pomyślałem o tym, żeby stworzyć sobie własny format pliku z zapisanymi gotowymi punktami dla klasy ageBody reprezentującej obiekt kolizyjny. A jak własny format pliku to i własne narzędzie do tworzenia takich plików :)

Wychodząc z założenia że prostota przede wszystkim doszedłem do wniosku, że najlepiej będzie jeśli plik będzie się składał z 2 części:

  1. informacyjnej
  2. danych
W części informacyjnej wcisnę oczywiście nie mniej nie więcej tylko ilość punktów do wczytania, a w części danych - punkty :) Przypuszczam, że ten - jakże złożony - format pliku sprawdzi się najlepiej. Zresztą... co innego mógłbym w nim jeszcze zapisać? :P Jeśli kiedyś będzie mi się chciało pobawić w rozbudowaną fizykę, wtedy będzie trzeba dodać masę i inne śmieszne rzeczy, ale póki co - keep it simple :)

Collision Detection Finished

Wreszcie skończyłem prace nad detekcją kolizji pomiędzy obiektami. Myślałem, że to się nie zdarzy...

Tak czy inaczej AGE zostało wyposażone w prosty, szybki i skuteczny sposób na wykrywanie kolizjii metodą SAT. W tej chwili możliwe jest wykrywanie kolizji pomiędzy wszystkimi obiektami na scenie [ które wcześniej zostaną zarejestrowane w detektorze kolizji ] oraz prosty system umozliwiajacy definiowanie zachowania obu obiektow po zderzeniu.

piątek, 6 lipca 2007

Obija się!

Bazując na poście spidera, o którym pisałem poprzednio udało mi się napisać działającą funkcje rozpoznającą kolizje i wyznaczającą głębokość penetracji. Teraz dla podstawowego sprawdzania kolizji wystarczy napisać prostego managera kolizji i voilla!

Nie wierzyłem, że w ogóle mi się uda napisać te kolizje, ale wreszcie udało mi się to zrobić, a co najważniejsze - zrozumieć!

czwartek, 5 lipca 2007

SAT - Nauka

Oczywiście jak to przy nauce czegoś o czym niewiele jest naprawdę dobrych i wyjaśniających artów pomoc przychodzi niespodziewanie. Po wyszukaniu na www.forum.gamedev.pl postów traktujących o mechanizmie SAT rezultat był lepszy niż się spodziewałem! Znalazłem posta Spidera który wyjaśnia krótko i po ludzku o co w tym chodzi. Link: http://forum.gamedev.pl/index.php/topic,1913.msg25544.html#msg25544

BTW: Jak to opanuję to chyba napiszę tutoriala na ten temat. Myślę, że się przyda następnym pokoleniom :)

PS: Jeśli chodzi o postępy w pisaniu wykrywania kolizji to jak na razie nic nie osiągnąłem - ale już mam jakieś pojęcie na ten temat. Teraz pozostaje już tylko zakodzić - zobaczymy czy zrozumiałem ;)

Chosen one...

Do sprawdzania kolizji w AGE postanowiłem użyć mechanizmu SAT [Separating axis theorem] o którym dobry artykuł znajduje się tutaj: http://www.harveycartel.org/metanet/tutorials/tutorialA.html

Być może w późniejszym czasie rozbuduje to na cały moduł fizyki, ale póki co, zależy mi jedynie na wykrywaniu i reagowaniu na kolizje.

Przez następnych kilka dni będę się pewnie męczył z implementacją tego stwora, bo będzie to pierwszy raz kiedy postaram się poważnie zająć wykrywaniem kolizji =]

Wish me luck!

środa, 4 lipca 2007

Kolizje!

No i stało się... Wiedziałem, że kiedyś to nastąpi. Nadszedł czas, aby zająć się poważnie kolizjami i fizyką w moim silniku. Na razie chyba jednak oleje fizykę i zajmę się zaimplementowaniem kolizji między obiektami tak, aby użytkownik nie musiał się zbytnio męczyć i było to łatwe w użyciu. Piękne plany. Czas wziąć się za rozważanie! :)

Rozwój AGE

Wciąż rozwijam mój piękny silniczek, choć i tak jest on wciąż w fazie bardzo bardzo alpha :)

Na dzień dzisiejszy jego możliwości to:
#OBSŁUGA I/O
-- Sprawdzanie czy dany klawisz jest wciśnięty [keyDown]
-- Sprawdzanie czy dany klawisz został wciśnięty [keyPressed]
-- Odczytywanie pozycji, stanu przycisków oraz offsetu przesunięcia myszy.
#DŹWIĘK [ Audiere ]
-- Ładowanie i odtwarzanie dźwięków
-- Ustawienie głośności dźwięku
-- Ustawienie wysokości dźwięku
-- Jeszcze kilka innych przydatnych rzeczy ktorych nie chce mi sie wymieniać ;)
#GRAFIKA [ Direct Graphics ]
-- Ładowanie tekstur
-- Wyświetlanie sprite`ów
-- Wyświetlanie linii [ bardzo przydatne wbrew pozorom ;) ]
-- Obsługa przezroczystości plików PNG itp.
#FIZYKA
-- Wykrywanie kolizji pomiędzy 2 obiektami

W tej chwili pracuje nad modułem fizyki gdzie planuję wcisnąć mechanizm do wykrywania kolizji pomiędzy wszystkimi obiektami na ekranie oraz odpowiednie reakcje na nie.

Do grafiki w późniejszym czasie dodam jeszcze obsługę Particle Engine`a, ale do tego jeszcze sporo czasu.

Nowy projekt

Chciałem napisać sobie giercę, którą kiedyś wytworzyłem w The Games Factory. Oczywiście jak zawsze problem pojawił się przy wyborze biblioteki/enginu do wykorzystania.

Na początku postanowiłem wykorzystać DirectX 9 i troche je obudować, aby móc wyświetlać sprity i je obracać i różne takie ;) Ale po drodze stwierdziłem, że bez sensu jest odkrywanie koła na nowo jeśli są gotowe biblioteki.

Postawiłem na SDL ponieważ wszyscy tak bardzo go zachwalają, że musi coś w nim być. Potestowałem sobie go troche i co się okazało? Otóż okazało się, że jego wydajność przy wyświetlaniu zwykłych bitmapek leży daleko od pożądanej. Podczas wyświetlania 1 bitmapy na tło wielkości 640x480 miałem około 200 FPS. Niby fajnie, ale poszedłem z tym samym programem do brata i co? 60 FPS! Jak postanowiłem wyrenderować 5 razy tło żeby sprawdzić wydajność to u mnie spadła ona do 60 FPS a u brata była poniżej 10 FPS...

Zirytowany wynikami tego wspaniałego SDLa postanowiłem napisać własny kawałek kodu, który nazwałem AGE - Aquila Game Engine.

Po maturach

No, kawalek czasu temu byly juz wyniki, ale niespecjalnie mialem czas zeby tutaj cos napisac. Co do cyferek na swiadectwie - wyszlo calkiem dobrze.

piątek, 8 czerwca 2007

`F5`

Postanowiłem troche odświerzyć bloga bo dawno nie pisalem, a nie chce aby ktos pomyslal ze go wogole opuscilem ;) [ jesli wogole ktokolwiek to czyta ]

Ostatnimi czasy w sumie prawie nic nie skodzilem a jest to tym bardziej dziwne, ze po maturze mam tyle czasu ile tylko chce, a tu nic! Żadnej weny :P

Pozostaje mi tylko wierzyć, że to tylko dlatego, ze musze sie przyzwyczaic znow do siedzenia przed kompem =]

środa, 9 maja 2007

Nowy projekt: Saria

No.. pomimo tego, że mam maturę i obiecałem sobie, że nie będę nic a nic kodzić przez ten miesiąc postanowiłem z kolegą wskrzesić nasz pomysł z gimnazjum na napisanie gierki. Co prawda teraz zmieniliśmy nieco sposób myślenia o tym ponieważ miała to być zwykła gierca, a teraz zdecydowaliśmy się stworzyć ją z pomocą PHP i MySQL i wrzucić do internetu jako MMORPG.

Projekt pomimo swojego wieku jest raczej mało zaawansowany bo z kumplem poszliśmy do różnych liceów i sie rzedko widywaliśmy - a już napewno nie myśleliśmy o tworzeniu gry ;)

Wczoraj siedząc po nocy omówiliśmy kilka najważniejszych i najogólniejszych kwestii związanych z tym jak ma gierka działać. Przed nami jeszcze dużo pracy, ale za niecały miesiąc będę miał dłuugie wakacje :)

Żeby nie złamać danego sobie samemu słowa, nie będę nic kodzić. Aktualnie musimy opracować system gry i zrobić kilka rzeczy z tym związanych. Tak więc do zakodzenia czgokolwiek jescze daleko ;)


EDIT:
Nudziło mi się troszkę, więc zrobiłem sobie takie logo :)

środa, 2 maja 2007

Wzorce Projektowania

Jako pierwszy sensowny post na tym blogu wstawię artykuł który napisałem podczas uczenia się wzorców projektowania. Może pojęcie `artykuł` jest lekkim nadużyciem, ale bardziej adekwatnego pojęcia nie znalazłem ;)

In fact, ten dokument jest zbiorem najczęściej używanych wzorców wraz z krótkim [ często nawet zbyt krótkim ] opisem.

Link: http://doscorp.neostrada.pl/docs/wzorce_projektowania.pdf

Matura

Założyłem tego bloga aby publikować moje prace programistyczne, ale niestety przez najbliższy miesiąc nie będę miał zbytnio jak zajmować się jakimkolwiek projektem więc póki co niewiele będzie się tu działo :)
__________________

Nie chcąc tworzyć nowego posta o maturze [ bo w koncu nie po to one są ;) ] będę tutaj dopisywał co mi przyjdzie do łba.
__________________


Matura - pierwsze starcie [polski]
Nie ma co sie rozwodzić. Zadanie polega na posiedzeniu 170 minut w klasie z innymi + komisja egzaminacyjna. Ci ostatni mają najgorzej - my dostaniemy przynajmniej jakieś testy na zabicie czasu :)

Matura - reaktuwacja [angielski]
No jeden język już mam zaliczony. Teraz pójdzie drugi - na szczęście ten prostszy i bliższy każdemu programiscie i nie chodzi mi o C++ ;) Tak czy inaczej po dzisiejszym egzaminie bedzie tydzien obijania sie ^^ Mógłbym zdawać mature co miesiąc :D

Matura - początek [matma]
Dzisiaj rano nie chciało mi się pisać, ale właśnie wróciłem z maturki z matmy i jestem nastawiony w miare pozytywnie ;) To by było właściwie na tyle matur. Co prawda jeszcze jest Informatyka i usnte języki ale to już tylko formalność ;)

Matura - ostatni bastion [informa]
Ominąłem komentarz przed informą, ale już nadrabiam ;) Otóż: była prosta. To tyle ;)

Matura - testy oralne (part 1) [polski]
No dzisiaj tak naprawde ostatni egzamin maturalny. Jutro angielski, ale to nie jest egzamin tylko dialog przy kawie tyle ze bez kawy. Poprezentuje troche dostane kilka punktow i bede mial wakacje ^^ [ zdobylem 70% z polskiego - tak se ]

Matura - testy oralne (part 2) [angielski]
Pisze po fakcie, i to sporo po fakcie. No ale liczy sie to, ze maturke mam juz za soba. Ten angielski wlasciwie nie byl zly. Prawde mowiac to chyba najprostszy egzamin w calej maturze byl. Udalo mi sie zdobyc 100%, ale to raczej nie wielki wyczyn przy podstawowym angolu ustnym ;)

Start

No dobra, pozostawię plany zrobienia sobie swojej stronki na później. Póki co zadowolę się blogiem ;)
Do publikacji moich prac wystarczy.