All blog entries, ordered from most recent. Entry count: 1198.
# Wiadomości strategiczne
Sat
19
May 2007
Grałem ostatnio w Command & Conquer 3 Tiberium Wars i gorąco polecam wszystkim tą nową grę strategiczną. Jakkolwiek zawsze byłem większym fanem RTS-ów ze stajni Blizzarda niż tych z serii C&C (i nadal jestem), muszę przyznać, że w nowego C&C3 gra się bardzo przyjemnie. Udane połączenie serowania znanego z serii Warcraft/Starcraft z tym Command-and-conquerowym, ciekawa fabuła, pierwszorzędna grafika... Ogólnie polecam :)
Inna dobra wiadomość "strategiczna" to oficjalne już potwierdzenie że strony Blizzarda prac nad StarCraft 2. Premiera pewnie nieprędko, ale jest na co czekać :) Więcej info:
NOWE: Jeśli jeszcze tego nie zrobiłeś, wejdź na stronę StarCraft II - Movies i pobierz opublikowany 21 maja Gameplay Video. Ten ponad-20-minutowy film po prostu trzeba zobaczyć. Jest niesamowity :)
# SCMP TechDemo 1.2
Thu
17
May 2007
Nowa wersja mojego dema poprawia trzy problemy:
Zachęcam do pobrania: TFQ_SCMP_TechDemo_1-2.rar (1.36 MB). Przetestujcie i powiedzcie, czy jest już znośne i czy można iść dalej z robotą :)
Comments | #productions #rendering #engine Share
# Konwencja nazywania identyfikatorów
Mon
14
May 2007
Istnieje kilka różnych sposobów nadawania nazw funkcjom, zmiennym, poleceniom, znacznikom i wszelkim identyfikatorom. Można je podzielić na:
MyLittleFunction - styl Microsoft
myLittleFunction - styl Java
my_little_function - styl C/C++
my-little-function - styl XML
mlttlfnctn - styl Unix
Który z nich jest najlepszy, tego nie można jednoznacznie powiedzieć. Zamiast tego spróbuj pomyśleć, który jest najgorszy ;)
Comments | #philosophy #software engineering Share
# INF-y i NAN-y
Sun
13
May 2007
Liczby zmiennoprzecinkowe typu float czy double mogą przyjmować pewne
specjalne wartości, m.in. oznaczające nieskończoność, nazywane -INF i
+INF, a osiągalne w C++ za pomocą nagłówka <limits> i wywołania
std::numeric_limits<float>::infinity().
Ciekawe jest, że w przeciwieństwie do liczb całkowitych dzielenie zmiennoprzecinkowe przez
zero nie powoduje "wywalenia" programu, ale daje w wyniku takie właśnie
nieskończoności.
Z mojego doświadczenia wynika, że zachowują się one absolutnie sensownie. -(+INF) daje -INF, -INF jest mniejsze od każdej liczby a +INF jest większe, -INF jest mniejsze od +INF, +INF - 2.f daje +INF, -INF * -2.f daje +INF itd. Zastanawia mnie więc, dlaczego wszyscy tych specjalnych wartości tak się boją, a nikt ich nie stosuje w swoim kodzie? Ostatnio znalazłem na to kolejny przykład - programiści nVidia w swoich przykładowych kodach używają liczby 1e32f jako wartości specjalnej.
# Pakowanie Shadow Mapy do A8R8G8B8
Sat
12
May 2007
Dzisiaj dopisałem nowy tryb Shadow Mappingu, w którym używam tekstury w formacie A8R8G8B8. To już nie ma prawa nie działać :) Wartość głębokości pakuję do składowych RGB. Składowa A pozostaje do wykorzystania przez Alpha Testing. Zresztą kodując liczbę typu float i tak nie uzyskałbym dokładności większej niż 24 bity, a nawet 16 wystarczy do tego celu.
Jak to się dokładnie robi? Niełatwo znaleźć konkretne informacje na ten temat. Pomogły mi dwa tematy forum: ten i ten. Ostatecznie mój kod wygląda tak:
// Kodowanie float v = In.ShadowMapZW.x / In.ShadowMapZW.y; // Tak naprawdę to zw Out = v * float4( 256*256, 256, 1, 0 ); Out = frac(Out); //Out -= Out.rrgb * float4( 0, 1.0/256.0, 1.0/256.0, 0 ); // Dekodowanie const float4 Factors = float4(1/256/256, 1/256, 1, 0); sample = dot(Factors, tex2D(s, t)); itd...
Ta ostatnia linijka w kodowaniu jest zakomentowana, ponieważ choć na forum zalecali ją jako niezbędna do pozbycia się artefaktów, a w moim przypadku właśnie jej usunięcie doprowadziło cienie do porządku. Rozchodzi się tutaj tak naprawdę o pytanie, czy kodując wychodzącą z Pixel Shadera wartość rzeczywistą 0.0 .. 1.0 do całkowitoliczbowego bajtu 0, 1, ..., 255 karta pozostałą część ułamkową obcina czy też zaokrągla? Ayufan twierdzi że obcina i moje doświadczenie też to potwierdza. Ale czy tak jest zawsze? Czy to jest zdefiniowane, czy zależne od konkretnej karty? Tego chyba trudno będzie się dowiedzieć...
# Walczący z błędami
Sat
12
May 2007
Dzięki kolegom z Warsztatu (pozdro!), którzy w tym temacie forum odpowiedzieli na moją prośbę, znalazło się całe stado błędów w moim demie. Opisałem je pokrótce tutaj i teraz spróbuję niektóre naprawić.
Comments | #productions #warsztat Share
# The Final Quest - SCM&P TechDemo
Thu
10
May 2007
Skończyłem to nad czym pracowałem przez ostatnie tygodnie czy nawet miesiące, czyli:
Efekt można obejrzeć i wypróbować na własne oczy pobierając i uruchamiając moje nowe demo techniczne - SCMP TechDemo 1.0. Oby działało bez zarzutów na różnym sprzęcie...
Comments | #rendering #productions #engine Share
# Visual C++ - debugger wchodzi do źródeł biblioteki standardowej
Fri
04
May 2007
Ano wchodzi... Jest to szczególnie niewygodne w przypadku używania STL. Wystarczy, że podając parametry do jakiejś funkcji czy metody robimy coś przy okazji, na przykład:
Funkcja(string("Łańcuch"), MojWektor[2]);
Zadałem o tym pytanie na forum i rozwiązanie się znalazło. Trzeba otóż:
std\:\:.*
Ponowne uruchomienie Visuala nie jest konieczne - wystarczy nowa sesja debugowania (F5).
Nowa wersja tego wpisu (po angielsku) znajduje się TUTAJ.