Bojkar\'s dev blog
gru 1
C.d.
icon1 admin | icon2 c++, engine, projekty | icon4 12 1st, 2009| icon3No Comments »

Ostatnio naszÅ‚o mnie na dodanie konsoli do silnika, nie żadnej wypaÅ›nej z tysiÄ…cami komend a zwykłą konsole do wyÅ›wietlania logów. Teraz bez wychodzenia z aplikacji mogÄ™ sprawdzić logi z silnika.  Przy pisaniu konsoli dodatkowo doszÅ‚a obsÅ‚uga fontów. ZastanawiaÅ‚em siÄ™ chwile nad wybraniem odpowiednich dla mnie.  Wybór w sumie padÅ‚ na zwykÅ‚e fonty bitmapowe lub FreeType. WybraÅ‚em jednak FreeType z tego wzglÄ™du, że przy fontach bitmapowych jestem nieco uzależniony od formatu textur fontów, czyli generujÄ…c fonty bitmapowe różnymi programami, implementacja ich byÅ‚a by różna. Można byÅ‚o do tego “zaprząść” xml wraz ze kodami asci poszczególnych literek + ich współrzÄ™dne ale znowu wtedy bym musiaÅ‚ wszystko rÄ™cznie edytować co też nie jest fajne. FreeType też nie jest różowy (np. w przypadku “customowych” fontów) ale w moim przypadku bardziej odpowiednie. Wystarczy, że wczytam sobie zwykłą czcionkÄ™ ttf i mogÄ™ niÄ… pisać po ekranie. Do implementacji FreeType’a użyÅ‚em biblioteki FTGL (http://sourceforge.net/projects/ftgl/). Dość fajne i proste w obsÅ‚udze API, która potrafi rysować fonty jako textury czy nawet jako meshe.

DrugÄ… nowoÅ›ciÄ…, w moim silniku jest obsÅ‚uga dźwiÄ™ku. Tutaj posÅ‚użyÅ‚em siÄ™ OpenAL. Biblioteka jest bardzo przyjemna (szczególnie dla opengl-owców) w implementacji, dobrze udokumentowana i ma za plecami Creative’a. NapisaÅ‚em maÅ‚y wrapper na wÅ‚asne potrzeby, który obsÅ‚uguje WAV-y (OpenAL  posiada gotowe funkcjÄ™ do wczytywania) oraz OGG. ObsÅ‚ugÄ™ OGG musiaÅ‚em już sam napisać ale byÅ‚o to bajecznie proste, do tego sÄ… tysiÄ…ce tutoriali w necie na ten temat. Oprócz tego udaÅ‚o mi siÄ™ w koÅ„cu (wczeÅ›niej nigdy tego nie pisaÅ‚em) zaimplementować dźwiÄ™k 3D, co daje bardzo fajny efekt. Po pierwszych testach byÅ‚em miÅ‚o zaskoczony efektem. Tutaj warto zwrócić uwagÄ™ na maÅ‚y szczegół. Jak bÄ™dziecie kiedyÅ› implementować dźwiÄ™k 3D pod OpenAL i nie bÄ™dzie Wam dziaÅ‚aÅ‚, upewnijcie siÄ™,  że dźwiÄ™ki sÄ… w mono, bo możecie na tym stracić kilka godzin i kupkÄ™ nerwów :)

Nie długo postaram się zrobić jakieś krótkie tech-demko i udostępnić.

sie 24
LUA in da house
icon1 admin | icon2 c++, engine, programy | icon4 08 24th, 2009| icon37 Comments »

No i udaÅ‚o mi siÄ™ w koÅ„cu to co planowaÅ‚em od dÅ‚uższego czasu ale nigdy nie mogÅ‚em siÄ™ zebrać. Od wczoraj mogÄ™ siÄ™ cieszyć podpiÄ™tÄ… lua’Ä…. DziÄ™ki temu w koÅ„cu mam rozgraniczonÄ… logikÄ™ gry od samego silnika. UdaÅ‚o mi siÄ™ nawet przepisać caÅ‚a logikÄ™ gracza na skrypty i dużą część samego silnika. Luabind spisuje siÄ™ tutaj bardzo dobrze. Tylko podczas przepisywania logiki pojawiÅ‚ siÄ™ pewien problem, który jest argumenty dla ludzi przeciwnych jÄ™zykom skryptowym a mianowicie debugowanie. JeÅ›li chodzi o pisanie skryptów w “czystym” lua to z debugowaniem wiÄ™kszego problemu nie ma, ale znowu jak podepniemy np. nasz wÅ‚asny silnik wtedy problem siÄ™ pojawia. Na szczęście nie jest z tym tak źle jak to wyglÄ…da. Z pomocÄ… przychodzi nam program o nazwie Decoda (http://www.unknownworlds.com/decoda), który jest bardzo fajnym debugerem lua. Program jest w peÅ‚ni aplikacjÄ… graficznÄ… (“konsolówki” fuuuu), posiada wÅ‚asny dość ciekawy edytor skryptów (wciÄ™cia, kolorowanie i podpowiadanie skÅ‚adni, itp), project explorer oraz to co nas najbardziej interesuje czyli debuger. Posiada on takie funkcjÄ™ jak: breakpoint’y, call stack oraz output czyli to co jest najbardziej potrzebne. Zasada dziaÅ‚anie jest bardzo prosta, tworzymy nowy projekt zaznaczamy exe’ka w którym używamy naszych skryptów, ustawiamy “working directory”, wciskamy F5 (skÄ…d my to znamy..) i odpala siÄ™ nasza aplikacja, Decoda sama wczytuje skrypty użyte w niej i zaczynamy debugować. Sama zasada dziaÅ‚ania debugera jest bardzo podoba jak ta w Visuala, wiÄ™c nie ma problemu z jej obsÅ‚ugÄ….
Ogólnie program oceniam bardzo pozytywnie, jest tym czego szukaÅ‚em, teraz pisanie skryptów jest o wiele Å‚atwiejsze. CiekawostkÄ… jest to, że aplikacja umożliwia debugowanie pod konsolami xbox360 oraz ps3. Niestety aplikacja nie jest darmowa, no ale w sumie nie ma co siÄ™ temu dziwić. Pocieszeniem jest cena, która nawet w naszym kraju nie jest wygórowana. Licencja indie kosztuje 50$ natomiast licencja “peÅ‚na” jest już droższa i już nie taka niska bo 400$, ale myÅ›lÄ™, że dla sporej części osób licencja indie (dla firm i osób których roczny dochód nie przekracza 100k$) jest wystarczajÄ…ca.

decoda
sie 21
Co w silniku piszczy
icon1 admin | icon2 c++, engine, projekty | icon4 08 21st, 2009| icon31 Comment »

OdkÄ…d mieszkam w Szczecinie wieczorami mam trochÄ™ czasu i mogÄ™ znowu wrócić do silnika. Jako, że dawno już tam nie zaglÄ…daÅ‚em musiaÅ‚em trochÄ™ “poodkurzać”. Na dobry poczÄ…tek jako, że silnik siÄ™ rozrasta dodaÅ‚em namespace’y i część metod zamieniÅ‚em na const’owe. Dalej przerobiÅ‚em mojÄ… leciwÄ… i lekka kulejÄ…cÄ… (ale dziaÅ‚ajÄ…cÄ…!) serializacje. Teraz zamiast kilku metod postanowiÅ‚em sobie przeciążyć operator << (serializacja) i >> (deserializacja) i do tego jest maÅ‚y menedżer archiwów. Jak to wszystko dziaÅ‚a? Najpierw oczywiÅ›cie musimy stworzyć klasÄ™ archiwatora (czyli tam gdzie bÄ™dziemy zapisywać / odczytywać dane) implementujÄ…cÄ… interfejs IArchive. NastÄ™pnie musimy obiekt tego archiwum (oczywiÅ›cie menedżer zadba o to, żeby nie tworzyć 2 razy tego samego archiver’a). Teraz możemy już do niego zapisywać / odczytywać:


//serialize
arch << someInt << someVector << someOther;
//deserialize
arch >> someInt >> someVector >> someOther;

Oprócz tego do silnika dodaÅ‚em obsÅ‚ugÄ™ skryptów. ZdecydowaÅ‚em siÄ™ na bardzo popularna lua’e. Szczerze mówiÄ…c sama skÅ‚adnia bardziej mi siÄ™ podoba w AngelScript ale za lua przemawia jej szybkość oraz jej popularność wÅ›ród gamedeveloperów. Do połączenia lua’y z C++ użyÅ‚em biblioteki luabind, która w bardzo Å‚atwy sposób pozwala na “zbindowanie” lua’y do C++. Teraz dziÄ™ki temu caÅ‚a logika gry bÄ™dzie spoczywać na skryptach i bÄ™dzie można jÄ… Å‚atwo modyfikować bez ponownej kompilacji kodu (również przez osoby trzecie).
UdaÅ‚o mi siÄ™ również dodać klasÄ™ do obsÅ‚ugi klawiatury oraz myszki. Teraz w bardzo Å‚atwy i przystÄ™pny sposób mogÄ™ mieć obsÅ‚ugÄ™ tych dwóch urzÄ…dzeÅ„ w każdym miejscu silnika (oraz skryptów). PodłączyÅ‚em też już część PhysX, tj. character controler oraz mesh cooking, muszÄ™ jeszcze do edytora “dopiąć” opcje fizyczny dla aktorów.
Na dzieÅ„ dzisiejszy zostaÅ‚o mi dopracowanie meanedżera serializacji, skoÅ„czenie peÅ‚nego podpinania silnika do lua’y, refactoring fabryki klas, oraz klasa do dźwiÄ™ku i w koÅ„cu bÄ™dÄ™ mógÅ‚ siÄ™ wziąć za renderer :)

lip 16
icon1 admin | icon2 c++, engine | icon4 07 16th, 2009| icon31 Comment »

Witam. Znowu niestety zaniedbałem ostatnio devbloga i już dawno nie pojawiał się tutaj żaden wpis. Nie bedę tutaj znowu nudził, że brak czasu i pełno zajęć tylko odrazu przejdę do rzeczy. Co się ostatnio działo? Troszkę się działo, niestety w silniku dużych postępów nie zrobiłem nad czym ubolewam. Udało mi sie tylko napisać okno do statystyk w edytorze oraz manedżer efektów postprocessingowych, dość prosty ale skuteczny. Jak działa? Na początek oczywiście trzeba dodać jakies efekty. Aby to zrobić trzeba wykonać jedną metodę gdzie podajemy nazwę tego efektu oraz scieżkę do fragment i vertex programu. Np. tak:

m_postProcessing.Add(“Bloom”, “data/shaders/test.vp”, “data/shaders/test.fp”);

NastÄ™pnie w metodzie renderujÄ…cej musimy dodać na poczÄ…tku: m_postProcessing.Begin() oraz na koÅ„cu m_postProcessing.End(). Jak włączyć dowolny efekt? Wystarczy go “zbindowac” metodÄ… “Bind”, której jedynym argumentem jest nazwa efektu. Okno które widzicie na screenie poniżej jest “samo uzupeÅ‚niajÄ…ce”, czyli po dodaniu efektów do managera okno samo siÄ™ zaaktualizujÄ™ i pokaże dostÄ™pne efekty, także integracja w kod jest minimalna.

editor.jpg

Z kolejnych nowości to prawdopodobnie od sierpnia bedę pracował w nowej firmie, niestety położonej dość daleko od mojego miejsca zamieszkania ale za to będzie to moja pierwsza praca w gamedevie, ale żeby nie zapeszać to o tym napiszę w sierpniu jak już wszystko będzie pewne.