All blog entries, ordered from most recent. Entry count: 1198.
# Moje zdjęcia z Warszawy
Sun
13
Jul 2008
Wrzuciłem do Galerii zdjęcia, które zrobiłem dotychczas w Warszawie.
# Pracuję w Metropolis Software
Sat
12
Jul 2008
Dawno nie pisałem tu nic konkretnego. Co u mnie nowego? Właściwie wszystko. Mieszkam teraz w Warszawie i pracuję jako programista w Metropolis Software. Nie jest tajemnicą, że projekt który obecnie tworzymy to strzelanka zatytułowana They.
# Wygrałem konkurs na blog IT miesiąca
Fri
11
Jul 2008
Zająłem pierwsze miejsce w konkursie na blog IT miesiąca. Kompletnie się tego nie spodziewałem. To nie było głosowanie internetowe, blogi oceniało jury na podstawie określonych kryteriów. Liczyły się tylko wpisy z czerwca tego roku. Nie wiem wprawdzie jak duża była konkurencja, ale zapisałem się do niego ot tak, z ciekawości. Wcale nie blogowałem specjalnie pod konkurs. Byłem przekonany, że ze swoją egzotyczną tematyką programowania gier nie mam szans z blogami na tematy internetowo-bazodanowe związane z Java, C#, PHP itp., których pełno w sieci i które zwykle mamy na myśli mówiąc "IT". A jednak stało się i wygrałem książkę... "Aplikacje Windows Forms .Net w C#" :) Drugie miejsce w konkursie zajął Xion.
Comments | #web #homepage Share
# Moja praca mgr online
Tue
01
Jul 2008
Za pozwoleniem promotora udostępniam do pobrania moją pracę magisterską w formacie PDF: Architektura i implementacja silnika grafiki trójwymiarowej. Praca opisuje mój silnik graficzny The Final Quest. Zawiera przegląd literatury, opis architektury silnika (z jakch warstw, modułów, klas i pól się składa) oraz szczegóły implementacyjne (organizacja procesu renderowania, omówienie kodu shaderów, obliczenia animacji szkieletowej, realizacja efektów cząsteczkowych, format plików modeli i inne).
Jednym słowem, zbiera dużą część mojej wiedzy na tematy silnikologiczne, jaką miałem w czasie jej pisania. Ma 165 stron. Zawiera też obszerny spis literatury - ciekawych artykułów na konkretne tematy. Powinna być zrozumiała dla tych wszystkich, którzy znają już podstawy programowania, biblioteki graficznej 3D oraz shaderów.
Comments | #productions #rendering #engine #studies Share
# Blender 2.46
Sat
28
Jun 2008
W maju ukazała się nowa wersja Blendera - najlepszego darmowego programu do grafiki 3D. Lista nowości wersji 2.46 jest imponująca, w tym m.in.:
Jednego tylko twórcy uparcie nie chcą zmienić - koszmarnego interfejsu użytkownika. Wręcz przeciwnie - jest coraz gorzej. Oto przykład: Jesteśmy w UV/Image Editor, chcemy wczytać plik tekstury. Klikamy w menu Image > Open... i pokazuje się File Browser. Jak wybrać teksturę za pomocą nowego Image Browser? Trzeba wejść do menu Image i kliknąć polecenie Open... z przytrzymanym klawiszem CTRL! Nowy rekord absurdu został pobity.
Comments | #graphics #software Share
# Tablice 2D
Mon
23
Jun 2008
Mieliśmy ostatnio w tym wątku forum dyskusję na temat tablic 2D w C++. Sposobów na to jest kilka. Ten najbardziej oczywisty to podwójny wskaźnik, czyli tablica tablic:
int **Tab = new int*[SizeX]; for (int x = 0; x < SizeX; x++) Tab[x] = new int[SizeY]; Tab[x][y] // Odwołanie
Forumowi specjaliści piszą, że metoda z jednowymiarową tablicą jest lepsza, bo wszystko jest w jednym kawałku pamięci, co zapewnia lepszą spójność cache i mniejsze ryzyko wystąpienia problemów ze stronnicowaniem. Co ciekawe, odwołania do takiej tablicy wcale nie są wolniejsze ze względu na mnożenie, bo w kodzie powyżej mnożenie też zachodzi, skoro elementy pierwszej tablicy nie mają przecież wielkości 1 bajtu.
int *Tab = new int[SizeX*SizeY]; Tab[y*SizeX + x] // Odwołanie
Możliwa jest jeszcze inna metoda, ale ona jest już przekombinowana, a poza tym zadziała tylko kiedy drugi wymiar tablicy jest stały.
int (*Tab)[16]; Tab = new int[16][16]; Tab[x][y] // Odwołanie
Comments | #algorithms #c++ Share
# Kasowanie linijki w konsoli
Sun
22
Jun 2008
Konsola systemowa, używana przez funkcje C (jak printf) lub C++ (jak std::cout) pozwala tylko wypisywać na wyjście i pobierać na wejściu znaki lub całe łańcuchy. Dopiero Windows API umożliwia bardziej niskopioziomowe reagowanie na klawiaturę, myszkę i swobodne rysowanie znakami po dowolnych miejscach konsoli, także z użyciem kolorów. Zawsze zastanawiało mnie, jak bez WinAPI radzą sobie twórcy programów konsolowych, którzy kasują bieżącą linijkę zamiast tylko dopisywać nowe informacje, jak wtedy kiedy następuje odliczanie 10%, 20%, 30% itd.
Ostatnio znalazłem rozwiązanie. Jest nim magiczny znak "\r", który użyty samodzielnie (a nie jako część końca wiersza "\r\n") powoduje powrót karetki na początek linii umożliwiając napisanie w jej miejscu czegoś nowego. Na przykład:
for (unsigned i = 0; i < 10; i++)
{
std::cout << "\rLiczba: " << i;
Sleep(500);
}
std::cout << std::endl;
Comments | #c++ #stl #algorithms Share
# Liczby losowe o rozkładzie normalnym
Sat
21
Jun 2008
Osobnym zagadnieniem jest generowanie liczb o rozkładzie normalnym. Dotychczas używałem do tego algorytmu Box-Muller, który jednak jest wolny, bo wykorzystuje cosinus, pierwiastek i logarytm naturalny. Szybciej działa jego odmiana biegunowa, która bierze dwie liczby o rozkładzie równomiernym 0..1 i generuje na raz dwie liczby o rozkładzie normalnym w ten sposób:
float x1, x2, w;
do {
x1 = 2.0f * RandFloat() - 1.0f;
x2 = 2.0f * RandFloat() - 1.0f;
w = x1 * x1 + x2 * x2;
} while (w >= 1.0f);
w = sqrtf((-2.0f * logf(w)) / w);
Result1 = x1 * w;
Result2 = x2 * w;
Jeszcze inna metoda, opisana w dostępnej za darmo książce The Scientist and Engineer's Guide to Digital Signal Processing, opiera się na obserwacji, że suma 12 liczb losowych 0..1 o rozkładzie równomiernym ma rozkład normalny ze średnią 6 i oschyleniem standardowym 1. Wystarczy więc 1) Zsumować 12 liczb losowych 0..1, 2) Odjąć 6, 3) Pomnożyć przez żądane odchylenie standardowe, 4) Dodać żądaną średnią. Mój pomiar wykazał jednak jasno, że ta metoda z sumą 12 generowań nie będzie szybsza od pokazanego wyżej kodu, nawet mając szybki i sprytnie napisany generator o rozkładzie równomiernym 0..1.